1、#include#define uchar unsigned char#define uint unsigned int#define out P2uchar flag,count,n,m,x;/x是总开关标标志位,flag计数标志位,count变量:控制自动累加的时间长短,m档位标志位uchar temp0,temp1,temp2,temp3;/手动按键设置四个数码管的数值变量uchar tl_temp,th_temp,tl1_temp,th1_temp;/中间变量uchar xz;/uint s;/数码管显示的值/uint pwm13 = 56536,49536,36536; uint p
2、wm23 = 56536,56536,56536;/这两个数组是为了给定时器1一个初值uchar zdm10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/数码管的字段码void keyscan1();/声明键盘扫描函数void dispaly();/声明函数:选择挡位1,2,3三个档位void dispaly1();/声明:功能赋值函数void delay();/声明延时void delay() uchar i,j; for(i=0;i=10;i+) for(j=0;j=120;j+);/延时程序void keyscan1() if(P
3、3_0=0) delay(); if(P3_0=0) while(P3_0=0); flag+; if(flag=2) flag=0; /当p3_0按下falg加1,flag=2时清0;功能:下面说明 if(P1_4=0) delay(); if(P1_4=0) while(P1_4=0); temp0+; if(temp0=10) temp0=0; if(P1_3=0) delay(); if(P1_3=0) while(P1_3=0); temp1+; if(temp1=10) temp1=0; if(P1_2=0) delay(); if(P1_2=0) while(P1_2=0); t
4、emp2+; if(temp2=10) temp2=0; if(P1_1=0) delay(); if(P1_1=0) while(P1_1=0); temp3+; if(temp3=10) temp3=0; /按键调整四个数码管的调的数值 if(P3_1=0) delay(); if(P3_1=0) m=1; if(P3_2=0) delay(); if(P3_2=0) m=2; if(P3_3=0) delay(); if(P3_3=0) m=3; /按键控制三个档位if(P1_5=0) delay(); if(P1_5=0) while(P1_5=0); x+; if(x=2) x=0;
5、 /总开关void timer() interrupt 1 TH0=0X3C;TL0=0XB0;count+;if(count=20) count=0; s+; temp3=s/1000; temp2=s%1000/100; temp1=s%100/10; temp0=s%10; /用定时器控制累加的时间间隔,s自加然后得出个十百千位的数值void dispaly() P0=zdms%10; P3=0x7f; delay(); P3=0xff; P0=zdms%100/10; P3=0xbf; delay(); P3=0xff; P0=zdms%1000/100; P3=0xdf; delay
6、(); P3=0xff; P0=zdms/1000; P3=0xef; delay(); P3=0xff; /数码管显示void display1() if(m=1) tl_temp=pwm10%256; th_temp=pwm10/256; tl1_temp=pwm20%256; th1_temp=pwm20/256; else if(m=2) tl_temp=pwm11%256; th_temp=pwm11/256; tl1_temp=pwm21%256; th1_temp=pwm21/256; else if(m=3) tl_temp=pwm12%256; th_temp=pwm12/2
7、56; tl1_temp=pwm22%256; th1_temp=pwm22/256; /占空比的时间初值,我的意思是把初值付给定时器的高八位低八位 void time2() interrupt 3 if(xz=0) TL1=tl_temp;TH1=th_temp;n=0; /xz=0时把值付给定时器作初值计满电机开转 else TL1=tl1_temp; TH1=th1_temp; n=1; /xz=1时把另外的一个值付给定时器作初值,定时器计满电机停止 xz=xz;/起循环控制作用 /改变他们的初值就改变了速度void main() TMOD=0x11; TH0=0X3C; TL0=0XB0; EA=1; ET1=1; TR0=1; TR1=1; /启用两个定时器 while(1) keyscan1(); display1(); P1_0=n; if(x=1) P3=0X00; P0=0X00; if(s=10000) ET1=0; P1_0=1; s=0; P3=0X0F; P0=0XFF;else if(flag=1) ET0=0; else ET0=1; s=temp3*1000+temp2*100+temp1*10+temp0; dispaly();else s=0; P1_0=1; P3=0X0F; P0=0XFF;