|
|
轉(zhuǎn)速測(cè)量,在仿真中等價(jià)于測(cè)量外部脈沖頻率
修改輸入脈沖的頻率,在數(shù)碼管上可實(shí)時(shí)顯示當(dāng)前頻率!
單片機(jī)計(jì)數(shù)測(cè)速仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- /*********************************************************************
- 功能:霍爾傳感器測(cè)速,霍爾傳感器的信號(hào)輸出腳接T1(P3.5)引腳
- 測(cè)量范圍;假設(shè)轉(zhuǎn)盤只有一個(gè)磁鋼,轉(zhuǎn)速低于10r/S則顯示0,高于655360r/s則計(jì)數(shù)溢出(一般應(yīng)用不會(huì)超出此限)
- *******************************************************************/
- #include <reg51.h>
- #define N 1//轉(zhuǎn)盤上所安裝的磁鋼個(gè)數(shù)
- sbit DLed1=P2^0;//定義第一位數(shù)碼管"位選"控制線的別名
- sbit DLed2=P2^1;//定義第二位數(shù)碼管"位選"控制線的別名
- sbit DLed3=P2^2;
- sbit DLed4=P2^3;
- unsigned int speed=0;//最后的轉(zhuǎn)速值
- unsigned int count=0;//在指定時(shí)間內(nèi)記到的外部脈沖數(shù)
- unsigned char k=0;
- unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4);//子函數(shù)前向聲明
- /*********************************
- 函數(shù)名稱:void delay1ms(unsigned int k)
- 功能:延時(shí)子函數(shù)
- 入口參數(shù):延時(shí)時(shí)長(zhǎng)
- 返回值:無(wú)
- **********************************/
- void delay1ms(unsigned int k)
- {
- unsigned char n,m;
- for(m=0;m<k;m++)
- {for(n=0;n<115;n++);}
- }
- //===================主函數(shù)
- void main()
- {
- unsigned char n;
- //EA=0;
- TMOD=0x51;//0101 0001,T1純軟件啟動(dòng),計(jì)數(shù)模式,工作方式1;T0純軟件啟動(dòng),定時(shí)模式,工作方式1
- TH0=0x3c;//12M晶振,定時(shí)50ms
- TL0=0xb0;
- ET0=1;//開啟定時(shí)0中斷
- EA=1;//開啟總中斷
- TR0=1;//同時(shí)啟動(dòng)定時(shí)與計(jì)數(shù)
- TR1=1;
- while(1)
- {
- speed=count/N;//結(jié)果為:x轉(zhuǎn)/s,注意防止其越界
- for(n=20;n>0;n--)//穩(wěn)定顯示一陣
- {
- disp(speed/1000,speed%1000/100,speed%100/10,speed%10);
-
-
- }
- TR0=1;//再次啟動(dòng)定時(shí)和計(jì)數(shù)功能,為下一次的測(cè)量作準(zhǔn)備
- TR1=1;
- }
-
- }
- /*********************************
- 函數(shù)名稱:
- 功能:T0中斷處理函數(shù)
- 說(shuō)明:定時(shí)時(shí)間到,則關(guān)閉定時(shí)器,取出計(jì)數(shù)值
- 入口參數(shù):
- 返回值:
- **********************************/
- void int0_fun() interrupt 1
- {
- k++;
- TH0=0x3c;//重載定時(shí)器T0初值
- TL0=0xb0;
- if(k>=20)//100ms的定時(shí)時(shí)間到
- {
- TR0=0;
- TR1=0;
- count=TH1*256+TL1;
- TH1=0x00;//清除計(jì)數(shù)值
- TL1=0x00;
- k=0; //清除標(biāo)志變量
- }
- }
- /********************************
- 功能:顯示函數(shù)
- 四位數(shù)碼管的顯示函數(shù)
- 段選:P1
- 位選:P20-P23
- 注意:采用的共陽(yáng)數(shù)碼管
- ***************************/
- void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4)
- {
- DLed1=1;DLed2=0;DLed3=0;DLed4=0;//送位碼,只讓第一位數(shù)碼管顯示
- P1=tab[x1];//送段碼
- delay1ms(10);//延時(shí)
- P1=0xff;//關(guān)閉
-
- //----掃描顯示第二位數(shù)碼管------
- DLed1=0;DLed2=1;DLed3=0;DLed4=0;
- P1=tab[x2];
- delay1ms(10);
- P1=0xff;
- //----掃描顯示第三位數(shù)碼管------
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
計(jì)數(shù)測(cè)速.rar
(57.92 KB, 下載次數(shù): 397)
2017-12-19 15:09 上傳
點(diǎn)擊文件名下載附件
|
|