|
玩過無刷電機(jī)的和電動(dòng)車維修的人經(jīng)常碰到電機(jī)霍爾和控制器不匹配的問題。主控是AT89c2051以前51單片機(jī)入門的時(shí)候買的扔了可惜所以拿來用了當(dāng)然使用現(xiàn)在市面上的51單片機(jī)都可以 顯示是12864液晶屏串行驅(qū)動(dòng), 按鍵就3個(gè), 第一個(gè)是復(fù)位 第2個(gè)是匹配方式加 第3個(gè)是匹配方式減
總共6種接法。編程水平入門級(jí) 大神看了程序不要取笑。
廢話少說直接上制作出來的實(shí)物圖
1539256152280.jpg (2.64 MB, 下載次數(shù): 55)
下載附件
2018-10-11 19:14 上傳
IMG_20181011_181232.jpg (2.69 MB, 下載次數(shù): 80)
下載附件
2018-10-11 19:16 上傳
IMG_20181011_181237.jpg (2.61 MB, 下載次數(shù): 75)
下載附件
2018-10-11 19:16 上傳
Altium Designer畫的原理圖如下:(51hei附件中可下載工程文件)
0.png (22.21 KB, 下載次數(shù): 61)
下載附件
2018-10-12 16:24 上傳
單片機(jī)源程序如下:
- /* 液晶模塊型號(hào):JLX12864C-1
- 接口方式:串行
- 液晶模塊驅(qū)動(dòng)IC是:ST7920(或兼容的IC),
- */
- #include <reg51.h>
- sbit sid=P3^2; //R/W
- sbit sclk=P3^3; //E
- sbit k1=P3^5;
- sbit k2=P3^4;
- sbit Q1=P3^7;
- #define uchar unsigned char
- #define uint unsigned int
- uchar a=1;
- bit b=1;
- /*=============延時(shí)=====================*/
- void delay(int i)
- {
- int j,k;
- for(j=0;j<i;j++)
- for(k=0;k<110;k++);
- }
- //=============transfer command to LCM===============
- void transfer_command(int data1) //傳輸命令到LCM
- {
- int i;
- for(i=0;i<5;i++)
- {
- sid=1;
- sclk=0;
- sclk=1;
- }
- sid=0;
- sclk=0;
- sclk=1;
- sid=0;
- sclk=0;
- sclk=1;
- sid=0;
- sclk=0;
- sclk=1;
- for(i=0;i<4;i++)
- {
-
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=0;
- sclk=1;
- data1=data1<<=1;
- }
-
- for(i=0;i<4;i++)
- {
- sid=0;
- sclk=0;
- sclk=1;
- }
- for(i=0;i<4;i++)
- {
-
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=0;
- sclk=1;
- data1=data1<<=1;
- }
-
- for(i=0;i<4;i++)
- {
- sid=0;
- sclk=0;
- sclk=1;
- }
- }
- //-----------transfer data to LCM---------------
- void transfer_data(int data1)//將數(shù)據(jù)傳輸?shù)絃CM
- {
- int i;
- for(i=0;i<5;i++) /*SID=1,5個(gè)脈沖,同步信號(hào)串*/
- {
- sid=1;
- sclk=0;
- sclk=1;
- }
- sid=0; /*這一位為R/W設(shè)置,R/W=0表示寫*/
- sclk=0;
- sclk=1;
- sid=1; /*這一位為RS設(shè)置,RS=1表示數(shù)據(jù)寄存器*/
- sclk=0;
- sclk=1;
- sid=0;
- sclk=0;
- sclk=1;
- for(i=0;i<4;i++) /*傳數(shù)據(jù)的高4位*/
- {
-
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=0;
- sclk=1;
- data1=data1<<=1;
- }
-
- for(i=0;i<4;i++) /*SID=0,過4個(gè)脈沖*/
- {
- sid=0;
- sclk=0;
- sclk=1;
- }
- for(i=0;i<4;i++) /*傳數(shù)據(jù)的低4位*/
- {
-
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=0;
- sclk=1;
- data1=data1<<=1;
- }
-
- for(i=0;i<4;i++) /*SID=0,過4個(gè)脈沖*/
- {
- sid=0;
- sclk=0;
- sclk=1;
- }
-
- }
- void clear_ddram()
- {
- transfer_command(0x30);
- transfer_command(0x01);
- delay(5);
- }
- /*初始化*/
- void Initial_ic()
- {
- delay(100);
- transfer_command(0x30); /*選用基本指令集*/
- delay(10);
- transfer_command(0x01); /*清屏*/
- delay(10);
- transfer_command(0x06); //
- delay(10);
- // transfer_command(0x1c); //光標(biāo)右移
- transfer_command(0x0c);/*開顯示,關(guān)光標(biāo)*/
- delay(10);
- }
- /*調(diào)用中文字庫里的漢字*/
- void display_char(int y,int x,int char_length,uchar *p)
- {
- uchar i=0;
- transfer_command(0x30); /*選用基本指令集*/
- delay(2);
- //transfer_command(0x01); /*清屏*/
- delay(2);
- if(y<3)
- {
- transfer_command(0x80+(y-1)*(0x10)+(x-1));
- }
- else
- {
- transfer_command(0x80+(y-3)*(0x10)+(x+7));
- }
- for(i=0;i<char_length;i++)
- {
- transfer_data(*p);
- p++;
- transfer_data(*p);/* 以上兩行數(shù)據(jù)合起來顯示一個(gè)漢字*/
- p++;
- }
- }
- //單行反顯
- /*void OneLine_reverse(int y)
- {
- if(y>0&&y<3)
- {
- transfer_command(0x34);
- delay(10);
- transfer_command(0x04+y-1);
- delay(10);
- }
- else
- {
- y-=2;
- transfer_command(0x34);
- delay(10);
- transfer_command(0x04+y-1);
- delay(10);
- }
- }*/
- /*主程序*/
- void main(void)
- {
- clear_ddram();
- Initial_ic(); /*初始化*/
- display_char(1,1,8,"無刷電機(jī)霍爾配對(duì)"); /*(在第1行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- //黃對(duì)黃 綠對(duì)綠 藍(lán)對(duì)藍(lán) 1
- //黃對(duì)黃 綠對(duì)藍(lán) 藍(lán)對(duì)綠 2
-
- //黃對(duì)綠 綠對(duì)黃 藍(lán)對(duì)藍(lán) 3
- //黃對(duì)綠 綠對(duì)藍(lán) 藍(lán)對(duì)黃 4
-
- //黃對(duì)藍(lán) 綠對(duì)綠 藍(lán)對(duì)黃 5
- //黃對(duì)藍(lán) 綠對(duì)黃 藍(lán)對(duì)綠 6
-
- while(1)
- {
- if(k1==0)
- delay(150); //消抖
- {
- if(k1==0)
- {
- while(!k1);
- a++;b=1;if(a>=6)a=6;
- }
- }
- if(k2==0)
-
- {
- if(k2==0)
- {
- delay(150); //消抖
- while(!k2);
- a--;b=1;if(a<=1)a=1;
- }
- }
- switch(a)
- {
- case(1):if(b==1)
- {P1=0XFC;
- // display_char(1,1,8,"無刷電機(jī)霍爾配對(duì)"); /*(在第1行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(2,1,8,"黃對(duì)黃 綠對(duì)綠"); /*(在第2行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(3,1,8,"藍(lán)對(duì)藍(lán) ");
- display_char(4,1,8,"匹配方式1 "); b=0;
- }
- break;
-
- case(2):if(b==1)
- {P1=0XE4;
- // display_char(1,1,8,"無刷電機(jī)霍爾配對(duì)"); /*(在第1行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(2,1,8,"黃對(duì)黃 綠對(duì)藍(lán)"); /*(在第2行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(3,1,8,"藍(lán)對(duì)綠 ");
- display_char(4,1,8,"匹配方式2 "); b=0;
- }
- break;
-
- case(3):if(b==1)
- {P1=0X9C;
- // display_char(1,1,8,"無刷電機(jī)霍爾配對(duì)"); /*(在第1行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(2,1,8,"黃對(duì)綠 綠對(duì)黃"); /*(在第2行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(3,1,8,"藍(lán)對(duì)藍(lán) ");
- display_char(4,1,8,"匹配方式3 "); b=0;
- }
- break;
-
- case(4):if(b==1)
- {P1=0XA8;
- // display_char(1,1,8,"無刷電機(jī)霍爾配對(duì)"); /*(在第1行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(2,1,8,"黃對(duì)綠 綠對(duì)藍(lán)"); /*(在第2行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(3,1,8,"藍(lán)對(duì)黃 ");
- display_char(4,1,8,"匹配方式4 "); b=0;
- }
- break;
-
- case(5):if(b==1)
- {P1=0X78;
- // display_char(1,1,8,"無刷電機(jī)霍爾配對(duì)"); /*(在第1行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(2,1,8,"黃對(duì)藍(lán) 綠對(duì)綠"); /*(在第2行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(3,1,8,"藍(lán)對(duì)黃 ");
- display_char(4,1,8,"匹配方式5 "); b=0;
- }
- break;
-
- case(6):if(b==1)
- {P1=0X54;
- // display_char(1,1,8,"無刷電機(jī)霍爾配對(duì)"); /*(在第1行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(2,1,8,"黃對(duì)藍(lán) 綠對(duì)黃"); /*(在第2行,第1列,8個(gè)漢字)調(diào)用顯示漢字子程序*/
- display_char(3,1,8,"藍(lán)對(duì)綠 ");
- display_char(4,1,8,"匹配方式6 "); b=0;
- }
- break;
- }
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
AT89C2051-12864-霍爾匹配程序.rar
(136.02 KB, 下載次數(shù): 32)
2018-10-11 19:25 上傳
點(diǎn)擊文件名下載附件
霍爾匹配程序+原理圖 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|