《stc12频率计经过验证》由会员分享,可在线阅读,更多相关《stc12频率计经过验证(5页珍藏版)》请在金锄头文库上搜索。
1、#include #include unsigned char code cdis1 = MOTOR SPEED ;unsigned char code cdis2 = R/S;unsigned char code cdis3 = FRICTION POWER ;sbit LCD_RS = P2 6;sbit LCD_RW = P2 5;sbit LCD_EN = P2 7;unsigned char Hdata = 0, Ldata = 0, Count = 0;unsigned char msec;unsigned long temp = 0;unsigned char data disp
2、lay = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00;char code reserve3_at_ 0x3b; /保留0x3b开始的3个字节void delayNOP(unsigned int dwTime)dwTime=250;while (dwTime-); void delayms(unsigned int ms)unsigned int x, y;for (x=0; xms; x+)for (y=0; y300; y+); bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delay
3、NOP(); result = (bit)(P0 &0x80); LCD_EN = 0; return (result);void lcd_wcmd(unsigned char cmd) while (lcd_busy() ; LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; P0 = cmd; delayNOP(); LCD_EN = 0;void lcd_wdat(unsigned char dat) while (lcd_busy() ; LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; P0 = dat; delayNOP(); LCD_EN
4、 = 0;void lcd_init() / delayms(15); lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 / delayms(5); lcd_wcmd(0x38); / delayms(5); lcd_wcmd(0x38); / delayms(5); lcd_wcmd(0x0c); /开显示,不显示光标 / delayms(5); lcd_wcmd(0x06); / /delayms(5); lcd_wcmd(0x01); /清除LCD的显示内容 / delayms(5);void lcd_pos(unsigned char pos) lcd_wcmd(p
5、os | 0x80); /数据指针=80+地址变量 void play() unsigned char n; for (n = 0; n 0; n-) /高位为0不显示 if (displayn = 0x30) displayn = 0x20; else break; lcd_pos(0x46); /显示实际频率值 for (n = 5; n != 0xff; n-) lcd_wdat(displayn);/* * * * 主函数 * * * */void main() unsigned char m; unsigned long frq_num; P3 = 0xff; lcd_init();
6、 lcd_pos(0x00); /设置显示位置为第一行 for (m = 0; m 16; m+) lcd_wdat(cdis1m); /显示字符 lcd_pos(0x40); /设置显示位置为第二行 for (m = 0; m 16; m+) lcd_wdat(cdis2m); /显示字符 TMOD = 0x51; /定时器0工作在定时方式,定时器1工作在计数方式 TH0 = 0x3c; /50ms定时 TL0 = 0xb0; TH1 = 0x00; /计数初值 TL1 = 0x00; ET1 = 1; /使能TIMER1中断 PT1 = 1; /定义TIMER1中断优先 TR0 = 1;
7、TR1 = 1; ET0 = 1; /使能TIMER0中断 EA = 1; /允许中断 while (1) if (msec=20) TR0 = 0; /关闭TIMER0 TR1 = 0; /关闭TIMER1 msec = 0;Hdata = TH1; /取计数值 Ldata = TL1; frq_num = Count *65535+Hdata * 256+Ldata ; / frq_num = Hdata * 256+Ldata ; TH1 = 0; TL1 = 0; Count = 0; TR1 = 1; TR0 = 1; temp = frq_num/6; play(); void Time0()interrupt 1 TF0=0; TH0 = 0x3c; /50ms定时 TL0 = 0xb0; msec+; void Time1()interrupt 3 Count+;