|
霍爾測(cè)速
單片機(jī)源程序如下:
- /************霍爾測(cè)速儀******************/
- /****************************************/
- /****************************************/
- /**編寫(xiě)人:劉夢(mèng)宇**/
- /**主控芯片:STC89C52RC**/
- /**晶振12MHZ**/
- #include<reg52.h>
- #include<intrins.h>
- #define uint8 unsigned char
- #define uint16 unsigned int
- #define CMD 0x00
- #define DAT 0x01
- #define DataPort P0//LCD數(shù)據(jù)口
- sbit RW=P2^6;
- sbit RS=P2^5;
- sbit E=P2^7;
- uint16 N=0;
- uint8 C_50ms;
- uint8 Z=0;
- uint8 count=0;
- bit flag_1s=0;
- /**ms級(jí)延時(shí)子程序**/
- void delay(uint16 t)
- {
- uint16 a;
- for(;t>0;t--)
- for(a=123;a>0;a--);
- }
- /**LCD時(shí)序**/
- void write_LCD(uint8 dat,bit rs)
- {
- E=0;
- RW=0;
- RS=rs;//選擇指令or數(shù)據(jù)
- _nop_();
- _nop_();
- _nop_();
- E=1;
- _nop_();//delay(1);
- _nop_();
- _nop_();
- DataPort=dat;//將數(shù)據(jù)送到LCD數(shù)據(jù)口
- _nop_();
- _nop_();
- _nop_();
- E=0;
- delay(1);
- }
- /**LCD選擇顯示位置子函數(shù)**/
- void SetXY(uint8 x,uint8 y)
- {
- x=x&0x0f;//防止X、Y 超過(guò)量程
- y=y&0x01;
- if(y)
- {
- write_LCD(0x80+x,CMD);
- }
- else
- {
- write_LCD(0xc0+x,CMD);
- }
- }
- /**轉(zhuǎn)速數(shù)值轉(zhuǎn)換子函數(shù)**/
- void disload(uint16 a)
- {
- SetXY(4,0);
- write_LCD(a/1000+'0',DAT);
- write_LCD(a%1000/100+'0',DAT);
- write_LCD(a%100/10+'0',DAT);
- write_LCD(a%10+'0',DAT);
- write_LCD('r',DAT);
- write_LCD('/',DAT);
- write_LCD('m',DAT);
- write_LCD('i',DAT);
- write_LCD('n',DAT);
- }
- /**LCD字符指針函數(shù)**/
- void LCD_wrstr(uint8*str)
- {
- while(*str!='\0')
- {
- write_LCD(*str,DAT);
- str++;
- }
- }
- /**初始化子程序**/
- void All_init()
- {
- delay(500);
- write_LCD(0x38,CMD);
- write_LCD(0x38,CMD);
- write_LCD(0x0c,CMD);
- write_LCD(0x01,CMD);
- delay(10);
- SetXY(0,1);//設(shè)置標(biāo)題顯示位置
- LCD_wrstr("Tachometer:");
-
- TMOD=0x01;//設(shè)置T0位工作方式1——作為16位定時(shí)器
- ET0=1;//打開(kāi)定時(shí)器0的中斷
- TR0=1;//打開(kāi)定時(shí)器0
- TH0=(65536-50000)/256;//裝入初值
- TL0=(65536-50000)%256;
- IT0=1;//外部中斷0為下降沿中斷
- EX0=1;//打開(kāi)外部中斷
- EA=1;//打開(kāi)總中斷
- }
- void main()
- {
- All_init();//先進(jìn)行初始化
- while(1)
- {
- if(flag_1s==1)
- {
- flag_1s=0;//1s標(biāo)志位清零
- disload(N);
- }
- }
- }
- /**定時(shí)器0中斷服務(wù)子程序**/
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- if(++C_50ms>19)
- {
- EX0=0;//關(guān)閉外部中斷0
- C_50ms=0;//定時(shí)1s之后C_50ms清零
- N=60*Z;//計(jì)算轉(zhuǎn)速
- Z=0;//初始化圈數(shù)
- flag_1s=1;//1s標(biāo)志位置1
- TH0=0x3c;//重新賦值
- TL0=0xb0;
- EX0=1;//打開(kāi)外部中斷0,開(kāi)始計(jì)數(shù)。
- }
- }
- void wai0() interrupt 0
- {
- count++;
- if(count==2) //兩次外部脈沖,電機(jī)轉(zhuǎn)一圈。
- {
- Z++;//轉(zhuǎn)圈+1
- count=0;//初始計(jì)數(shù)值
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載:
霍爾測(cè)速.rar
(18.03 KB, 下載次數(shù): 32)
2017-11-30 22:20 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|