基于51單片機(jī)的簡(jiǎn)單速度測(cè)量?jī)x
protues仿真如圖參考代碼如下
#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; Sbit Buzzer=P3^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); (2)延時(shí)子函數(shù)程序 void delay1ms(unsigned int k) { unsigned char n,m; for(m=0;m<k;m++) {for(n=0;n<115;n++);} } void main() { unsigned char n; //EA=0; TMOD=0x51; TH0=0x3c; TL0=0xb0; ET0=1; EA=1; TR0=1; TR1=1; while(1) { speed=2*0.25*3.14*3.6*100*count/N; Buzzer=1; If(speed>=2000) { Buzzer=~Buzzer; } for(n=20;n>0;n--) { disp(speed/1000,speed%1000/100,speed%100/10,speed%10); } TR0=1; TR1=1; } } (3)T0中斷處理函數(shù)程序 void int0_fun() interrupt 1 { k++; TH0=0x3c; TL0=0xb0; if(k>=20) { TR0=0; TR1=0; count=TH1*256+TL1; TH1=0x00; TL1=0x00; k=0; } } (4)四位數(shù)碼管的顯示函數(shù)程序 void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4) { DLed1=1;DLed2=0;DLed3=0;DLed4=0; P1=tab[x1]; delay1ms(10); P1=0xff; DLed1=0;DLed2=1;DLed3=0;DLed4=0; P1=tab[x2]; delay1ms(10); P1=0xff; DLed1=0;DLed2=0;DLed3=1;DLed4=0; P1=tab[x3]; delay1ms(10); P1=0xff; DLed1=0;DLed2=0;DLed3=0;DLed4=1; P1=tab[x4]; delay1ms(10); P1=0xff; }
|