#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit RS=P2^5;sbit RW=P2^6;sbit EN=P2^7;sbit qitingjian=P1^0;sbit zhengzhuanjian=P1^1;sbit fanzhuanjian=P1^2;sbit jiasujian=P1^3;sbit jiansujian=P1^4;sbit zhengzhuan=P2^0;sbit fanzhuan=P2^1;sbit zhuansuled=P2^2;sbit qitingled=P3^0;sbit zhengzhuangled=P3^1;sbit waibuzhongduanling=P3^2;sbit fanzhuangled=P3^3;uint qian,bai,shi,ge,zhuansu;uint pwmshi,pwmge;uchar pwm,Timer0count,Timer1count,maichongcount,qitingnum,zhengzhuanflag,fanzhuanflag;uchar code table0[]={'z','h','a','n','k','o','n','g','b','i',':'};uchar code table1[]={'z','h','u','a','n','s','u',':'};uchar code table2[]={'r','p','m'}; void Delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void WriteCommand(uchar command){ RS=0; RW=0; P0=command; Delay(5); EN=1; Delay(5); EN=0; } void WriteData(uchar information){ RS=1; RW=0; P0=information; Delay(5); EN=1; Delay(5); EN=0; } void LCD1602Init(){ WriteCommand(0x38); WriteCommand(0x08); WriteCommand(0x01); WriteCommand(0x06); WriteCommand(0x0c); } void LCD1602InitDisplay(){ uchar j; WriteCommand(0x80+0x00); for(j=0;j<11;j++) { WriteData(table0[j]); Delay(2); } WriteCommand(0x80+0x40); for(j=0;j<8;j++) { WriteData(table1[j]); Delay(2); } WriteCommand(0x80+0x4c); for(j=0;j<3;j++) { WriteData(table2[j]); Delay(2); } } void LCD1602DisplaySpeed(uint qian,bai,shi,ge){ LCD1602InitDisplay(); WriteCommand(0x80+0x0b); WriteData(pwmshi+0x30); WriteData(pwmge+0x30); WriteCommand(0x80+0x48); WriteData(qian+0x30); WriteData(bai+0x30); WriteData(shi+0x30); WriteData(ge+0x30); } void TimerInit(){ TMOD=0x11; TH0=(65536-10000)/256; TL0=(65536-10000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; EX0=1; IT0=1; ET0=1; TR0=1; ET1=1; TR1=1; } void Timer0() interrupt 1{ TH0=(65536-10000)/256; TL0=(65536-10000)%256; Timer0count++; if(Timer0count==10) { Timer0count=0; } if(qitingnum==1) { if(zhengzhuanflag==1) { if(Timer0count<pwm) { zhengzhuan=0; fanzhuan=1; zhuansuled=0; } else { zhengzhuan=1; fanzhuan=1; zhuansuled=1; } } if(fanzhuanflag==1) { if(Timer0count<pwm) { fanzhuan=0; zhengzhuan=1; zhuansuled=0; } else { fanzhuan=1; zhengzhuan=1; zhuansuled=1; } } } } void Timer1() interrupt 3{ TH1=(65536-50000)/256; TL1=(65536-50000)%256; Timer1count++; if(Timer1count==20) { Timer1count=0; EX0=0; zhuansu=55*maichongcount/24; qian=zhuansu/1000; bai=zhuansu%1000/100; shi=zhuansu%100/10; ge=zhuansu%10; LCD1602DisplaySpeed(qian,bai,shi,ge); maichongcount=0; EX0=1; } } void waibuzhongduanlingjishu() interrupt 0 using 1{ maichongcount++ ; } void KeyScan(){ if(qitingjian==0) { Delay(1); if(qitingjian==0) { Delay(1); while(!qitingjian); qitingnum++; qitingled=0; if(qitingnum==2) { qitingnum=0; qitingled=1; zhengzhuangled=1; fanzhuangled=1; zhuansuled=1; zhengzhuan=1; fanzhuan=1; zhengzhuanflag=0; fanzhuanflag=0; } } } if(qitingnum==1) { if(zhengzhuanjian==0) { Delay(1); if(zhengzhuanjian==0) { Delay(1); while(!zhengzhuanjian) zhengzhuangled=0; fanzhuangled=1; zhengzhuanflag=1; fanzhuanflag=0; } } if(fanzhuanjian==0) { Delay(1); if(fanzhuanjian==0) { Delay(1); while(!fanzhuanjian) zhengzhuangled=1; fanzhuangled=0; zhengzhuanflag=0; fanzhuanflag=1; } } } if(zhengzhuanflag==1||fanzhuanflag==1) { if(jiasujian==0) { Delay(1); if(jiasujian==0) { Delay(1); while(!jiasujian); if(pwm<10) { pwm++; pwmshi=pwm/10; pwmge=pwm%10; } if(pwm>=10) pwm=10; } } if(jiansujian==0) { Delay(1); if(jiansujian==0) { Delay(1); while(!jiansujian); if(pwm>0) { pwm--; pwmshi=pwm/10; pwmge=pwm%10; } if(pwm<=0) pwm=0; } } } } void main(){ TimerInit(); LCD1602Init(); while(1) { KeyScan(); } }