给你个测转速的参考下
#include<at89x51.h> #define uchar unsigned char #define uint unsigned int sbit key=P3^0; sbit f=P1^1; uint cur_r; uint cur_ms,cur_sec;//当前毫秒,秒 uint couter; //脉冲数量 uchar code design[10]={0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60}; //******************************************************************* //***************initial********************************************* void initial(void) { couter=cur_r=0; TMOD=0x01; TH0=0xb1; TL0=0xe0; EA=1; EX0=0; IT0=1; } //延时*************************************************************** //delay()************************************************************ void delay(uint i) { uint j; for(;i>0;i--) for(j=0;j<120;j++) {;} } //外部中断*********************************************************** //caculate外部脉冲数量*********************************************** void intrp0(void) interrupt 0 { couter++; } //定时器1中断******************************************************** //20ms中断*********************************************************** //编码器采用100PULSE/R的********************************************* void intrp1(void) interrupt 1 { TH0=0xb1; TL0=0xe0; if(cur_ms<50){cur_ms++;} else { cur_ms=0; cur_sec++; if(cur_sec>=2) { EX0=0; //计算时禁止外部中断,停止计数 ET0=0; TR0=0; cur_r=couter*3/10; //当前转速 cur_ms=0; cur_sec=0; couter=0; EX0=1; //重新开启脉冲计数 ET0=1; TR0=1; f=~f; cur_sec=0; } } } //显示接口*********************************************************** //P0为数码管显示接口,P1为数码管控制接口***************************** void display(uint x) { uint g_wei,s_wei,b_wei;//个位,十位,百位 if(x>=999){x=999;}//限制为999R/MIN b_wei=x/100; s_wei=(x-b_wei*100)/10; g_wei=(x-b_wei*100-s_wei*10)%10; //百位显示 P0=design[b_wei]; P2=0xfe; delay(5); //十位显示 P0=design[s_wei]; P2=0xfd; delay(5); //个位显示 P0=design[g_wei]; P2=0xfb; delay(5); } //******************************************************************* //main*************************************************************** void main() { initial(); while(1) { display(cur_r); if(key){EX0=0;ET0=0;TR0=0;} //按下停止按钮 else {EX0=1;ET0=1,TR0=1;} } }
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |