久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8514|回復: 2
打印 上一主題 下一主題
收起左側

無刷電機霍爾匹配小工具制作(適用電機控制器霍爾120度)附單片機源碼與電路

[復制鏈接]
跳轉到指定樓層
樓主
玩過無刷電機的和電動車維修的人經常碰到電機霍爾和控制器不匹配的問題。主控是AT89c2051以前51單片機入門的時候買的扔了可惜所以拿來用了當然使用現在市面上的51單片機都可以 顯示是12864液晶屏串行驅動,  按鍵就3個, 第一個是復位  第2個是匹配方式加  第3個是匹配方式減
總共6種接法。編程水平入門級 大神看了程序不要取笑。

廢話少說直接上制作出來的實物圖



Altium Designer畫的原理圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. /* 液晶模塊型號:JLX12864C-1
  2.    接口方式:串行
  3.    液晶模塊驅動IC是:ST7920(或兼容的IC),
  4. */
  5. #include <reg51.h>
  6. sbit sid=P3^2;        //R/W
  7. sbit sclk=P3^3; //E

  8. sbit k1=P3^5;
  9. sbit k2=P3^4;

  10. sbit Q1=P3^7;
  11. #define  uchar unsigned char
  12. #define uint unsigned int

  13. uchar a=1;
  14. bit b=1;
  15. /*=============延時=====================*/
  16. void delay(int i)               
  17. {
  18. int j,k;
  19. for(j=0;j<i;j++)
  20. for(k=0;k<110;k++);
  21. }

  22. //=============transfer command to LCM===============
  23. void transfer_command(int data1)   //傳輸命令到LCM
  24. {
  25.         int i;

  26.         for(i=0;i<5;i++)
  27.         {
  28.                 sid=1;
  29.                 sclk=0;               
  30.                 sclk=1;               
  31.         }
  32.         sid=0;               
  33.         sclk=0;       
  34.         sclk=1;               
  35.         sid=0;       
  36.         sclk=0;       
  37.         sclk=1;               
  38.         sid=0;
  39.         sclk=0;               
  40.         sclk=1;               
  41.         for(i=0;i<4;i++)
  42.         {
  43.        
  44.                 if(data1&0x80) sid=1;
  45.                 else sid=0;
  46.                 sclk=0;       
  47.                 sclk=1;       
  48.                  data1=data1<<=1;
  49.          }
  50.          
  51.         for(i=0;i<4;i++)
  52.         {
  53.                 sid=0;
  54.                 sclk=0;               
  55.                 sclk=1;       
  56.         }       
  57.         for(i=0;i<4;i++)
  58.         {
  59.        
  60.                 if(data1&0x80) sid=1;
  61.                 else sid=0;
  62.                 sclk=0;               
  63.                 sclk=1;       
  64.                  data1=data1<<=1;
  65.          }
  66.          
  67.         for(i=0;i<4;i++)
  68.         {
  69.                 sid=0;
  70.                 sclk=0;               
  71.                 sclk=1;               
  72.         }       

  73. }

  74. //-----------transfer data to LCM---------------
  75. void transfer_data(int data1)//將數據傳輸到LCM
  76. {
  77.         int i;
  78.         for(i=0;i<5;i++)                        /*SID=1,5個脈沖,同步信號串*/
  79.         {
  80.                 sid=1;
  81.                 sclk=0;               
  82.                 sclk=1;
  83.         }
  84.         sid=0;                                                /*這一位為R/W設置,R/W=0表示寫*/
  85.         sclk=0;
  86.         sclk=1;
  87.         sid=1;                                                /*這一位為RS設置,RS=1表示數據寄存器*/
  88.         sclk=0;
  89.         sclk=1;
  90.         sid=0;
  91.         sclk=0;
  92.         sclk=1;       
  93.         for(i=0;i<4;i++)                        /*傳數據的高4位*/
  94.         {
  95.        
  96.                 if(data1&0x80) sid=1;
  97.                 else sid=0;
  98.                 sclk=0;
  99.                 sclk=1;
  100.                  data1=data1<<=1;
  101.          }
  102.          
  103.         for(i=0;i<4;i++)                        /*SID=0,過4個脈沖*/
  104.         {
  105.                 sid=0;
  106.                 sclk=0;
  107.                 sclk=1;
  108.         }       
  109.         for(i=0;i<4;i++)                        /*傳數據的低4位*/
  110.         {
  111.        
  112.                 if(data1&0x80) sid=1;
  113.                 else sid=0;
  114.                 sclk=0;
  115.                 sclk=1;
  116.                  data1=data1<<=1;
  117.          }
  118.          
  119.         for(i=0;i<4;i++)                        /*SID=0,過4個脈沖*/
  120.         {
  121.                 sid=0;
  122.                 sclk=0;
  123.                 sclk=1;
  124.         }       
  125.                        
  126. }

  127. void clear_ddram()
  128. {
  129.         transfer_command(0x30);
  130.         transfer_command(0x01);
  131.         delay(5);
  132. }

  133. /*初始化*/
  134. void Initial_ic()
  135. {
  136.     delay(100);   
  137.         transfer_command(0x30);        /*選用基本指令集*/
  138.         delay(10);
  139.         transfer_command(0x01);     /*清屏*/
  140.         delay(10);
  141.         transfer_command(0x06);        //
  142.         delay(10);
  143. //        transfer_command(0x1c);        //光標右移
  144.         transfer_command(0x0c);/*開顯示,關光標*/
  145.         delay(10);
  146. }

  147. /*調用中文字庫里的漢字*/
  148. void display_char(int y,int x,int char_length,uchar *p)
  149. {
  150.         uchar i=0;
  151.         transfer_command(0x30);        /*選用基本指令集*/
  152.         delay(2);
  153.         //transfer_command(0x01);     /*清屏*/
  154.         delay(2);
  155.         if(y<3)
  156.         {
  157.                 transfer_command(0x80+(y-1)*(0x10)+(x-1));
  158.         }
  159.         else
  160.         {
  161.                 transfer_command(0x80+(y-3)*(0x10)+(x+7));
  162.         }
  163.         for(i=0;i<char_length;i++)
  164.         {
  165.                 transfer_data(*p);
  166.                 p++;
  167.                 transfer_data(*p);/*  以上兩行數據合起來顯示一個漢字*/
  168.                 p++;
  169.         }
  170. }

  171. //單行反顯
  172. /*void OneLine_reverse(int y)
  173. {
  174.         if(y>0&&y<3)
  175.         {
  176.                 transfer_command(0x34);       
  177.                 delay(10);
  178.                 transfer_command(0x04+y-1);
  179.                 delay(10);
  180.         }

  181.         else
  182.         {
  183.                 y-=2;
  184.                 transfer_command(0x34);       
  185.                 delay(10);
  186.                 transfer_command(0x04+y-1);
  187.                 delay(10);
  188.         }       
  189. }*/





  190. /*主程序*/
  191. void main(void)
  192. {
  193.                  clear_ddram();
  194.                  Initial_ic();                                        /*初始化*/
  195.                          display_char(1,1,8,"無刷電機霍爾配對");  /*(在第1行,第1列,8個漢字)調用顯示漢字子程序*/         
  196. //黃對黃  綠對綠 藍對藍        1
  197. //黃對黃  綠對藍 藍對綠 2
  198.          
  199. //黃對綠  綠對黃 藍對藍 3
  200. //黃對綠  綠對藍 藍對黃 4
  201.          
  202. //黃對藍  綠對綠 藍對黃 5
  203. //黃對藍  綠對黃 藍對綠 6

  204.         while(1)
  205.         {       
  206.         if(k1==0)
  207.                         delay(150);                 //消抖
  208. {
  209. if(k1==0)
  210. {
  211. while(!k1);
  212. a++;b=1;if(a>=6)a=6;
  213. }       
  214. }                       
  215.         if(k2==0)
  216.                        
  217. {
  218. if(k2==0)
  219. {
  220.         delay(150);                 //消抖
  221. while(!k2);
  222. a--;b=1;if(a<=1)a=1;       

  223. }
  224. }
  225. switch(a)
  226. {
  227.         case(1):if(b==1)
  228.         {P1=0XFC;
  229. //                         display_char(1,1,8,"無刷電機霍爾配對");  /*(在第1行,第1列,8個漢字)調用顯示漢字子程序*/
  230.                          display_char(2,1,8,"黃對黃    綠對綠");  /*(在第2行,第1列,8個漢字)調用顯示漢字子程序*/       
  231.                          display_char(3,1,8,"藍對藍          ");
  232.                          display_char(4,1,8,"匹配方式1       ");        b=0;       
  233.         }
  234.                 break;
  235.        
  236.         case(2):if(b==1)
  237.         {P1=0XE4;
  238.         //                 display_char(1,1,8,"無刷電機霍爾配對");  /*(在第1行,第1列,8個漢字)調用顯示漢字子程序*/
  239.                          display_char(2,1,8,"黃對黃    綠對藍");  /*(在第2行,第1列,8個漢字)調用顯示漢字子程序*/       
  240.                          display_char(3,1,8,"藍對綠          ");
  241.                          display_char(4,1,8,"匹配方式2       ");        b=0;       
  242.         }
  243.                 break;
  244.        
  245.         case(3):if(b==1)
  246.         {P1=0X9C;
  247.          //                display_char(1,1,8,"無刷電機霍爾配對");  /*(在第1行,第1列,8個漢字)調用顯示漢字子程序*/
  248.                          display_char(2,1,8,"黃對綠    綠對黃");  /*(在第2行,第1列,8個漢字)調用顯示漢字子程序*/       
  249.                          display_char(3,1,8,"藍對藍          ");
  250.                          display_char(4,1,8,"匹配方式3       ");        b=0;       
  251.         }
  252.                 break;
  253.        
  254.         case(4):if(b==1)
  255.         {P1=0XA8;
  256.         //                 display_char(1,1,8,"無刷電機霍爾配對");  /*(在第1行,第1列,8個漢字)調用顯示漢字子程序*/
  257.                          display_char(2,1,8,"黃對綠    綠對藍");  /*(在第2行,第1列,8個漢字)調用顯示漢字子程序*/       
  258.                          display_char(3,1,8,"藍對黃          ");
  259.                          display_char(4,1,8,"匹配方式4       ");        b=0;       
  260.         }
  261.                 break;
  262.        
  263.         case(5):if(b==1)
  264.         {P1=0X78;
  265.         //                 display_char(1,1,8,"無刷電機霍爾配對");  /*(在第1行,第1列,8個漢字)調用顯示漢字子程序*/
  266.                          display_char(2,1,8,"黃對藍    綠對綠");  /*(在第2行,第1列,8個漢字)調用顯示漢字子程序*/       
  267.                          display_char(3,1,8,"藍對黃          ");
  268.                          display_char(4,1,8,"匹配方式5       ");        b=0;       
  269.         }
  270.                 break;
  271.        
  272.         case(6):if(b==1)
  273.         {P1=0X54;
  274.         //                 display_char(1,1,8,"無刷電機霍爾配對");  /*(在第1行,第1列,8個漢字)調用顯示漢字子程序*/
  275.                          display_char(2,1,8,"黃對藍    綠對黃");  /*(在第2行,第1列,8個漢字)調用顯示漢字子程序*/       
  276.                          display_char(3,1,8,"藍對綠          ");
  277.                          display_char(4,1,8,"匹配方式6       ");        b=0;       
  278.         }
  279.                 break;
  280. }       

  281.         }
  282. }
復制代碼

所有資料51hei提供下載:
AT89C2051-12864-霍爾匹配程序.rar (136.02 KB, 下載次數: 32)


評分

參與人數 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:258566 發表于 2018-10-11 22:56 | 只看該作者
只是提示.沒測試功能.
回復

使用道具 舉報

板凳
ID:408394 發表于 2018-10-12 08:47 | 只看該作者
拿來用了當然使用現在市面上的51單片機都可以 顯示是12864液晶屏串行驅動,  按鍵就3個, 第一個是復位  第2個是匹配方式加  第3個是匹配方式減
總共6種接法。編程水平入門級 大神看了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色操视频 | 91综合网 | 婷婷成人在线 | 黄色毛片黄色毛片 | 亚洲视频在线观看 | 精品久久久一区 | 成人在线免费网站 | 国产日韩在线观看一区 | 精品国产91 | 久久男人天堂 | 国产精品自产拍 | 色一阁| 国产aⅴ | 91视频进入 | 亚洲一区二区三区视频 | a级片在线观看 | 欧美日韩中文国产一区发布 | 欧美一区在线看 | 欧美福利 | 国产成人在线视频 | 91在线| 亚洲五码在线 | 国产欧美精品一区二区色综合朱莉 | 特级毛片爽www免费版 | 国产精品一区三区 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 精品一区在线免费观看 | 国产成人福利视频在线观看 | 欧美日韩亚洲一区 | 国产午夜精品久久久 | 国产 欧美 日韩 一区 | 一区二区三区在线免费观看 | 久久亚洲一区二区 | 国产剧情久久 | 99伊人| 自拍 亚洲 欧美 老师 丝袜 | 久久久久黄色 | 狠狠操狠狠搞 | 一区二区三区视频播放 | 可以免费观看的av片 | 精品欧美色视频网站在线观看 |