写99s的秒表程序,用一个按键分别控制秒表启动、停止、清零。(要求:使用定时器0,定时20ms中断一次)
写99s的秒表程序,用一个按键分别控制秒表启动、停止、清零。(要求:使用定时器0,定时20ms中断一次)。
代码:【自己写的,水平不高,但是能实现,如果有错误或者是可以优化,请评论区留言,不喜勿喷】
1 #include<reg51.h> 2 //连接74ls138模块 3 sbit A1=P1^0; 4 sbit B1=P1^1; 5 sbit C1=P1^2; 6 //按键*************************** 7 sbit k1=P3^0; //按一次启动、2次停止、3次清零,循环,没有效果就把消抖那个改大一点,一般最大一秒(也就是1000ms)就可以了 8 //*************************** 9 unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 10 void delay(int i); //延时函数i * 1ms 11 int num=0,x=0,s=0; 12 main() 13 { 14 15 IE=0X82; 16 TMOD=0X01; 17 TH0=(65536-20000)/256; 18 TL0=(65536-20000)/256; 19 while(1) 20 { 21 if(k1==0){ 22 delay(500); //500ms,按键消抖的,大一点稳一点 23 s++; 24 } 25 if(s==1) 26 { 27 TR0=1; 28 A1=0;B1=1;C1=1; 29 P0=tab[num/10]; 30 delay(1); 31 P0=0x00; 32 A1=1;B1=1;C1=1; 33 P0=tab[num%10]; 34 delay(1); 35 P0=0x00; 36 } 37 else if(s==2) 38 { 39 TR0=0; 40 } 41 else{ 42 num=0; 43 s=0; 44 } 45 A1=0;B1=1;C1=1; 46 P0=tab[num/10]; 47 delay(1); 48 P0=0x00; 49 A1=1;B1=1;C1=1; 50 P0=tab[num%10]; 51 delay(1); 52 P0=0x00; 53 } 54 } 55 void t0(void)interrupt 1 //t0定时器中断 56 { 57 58 if(x==50) 59 { 60 x=0; 61 num++; 62 if(num>100) 63 num=0; 64 } 65 TH0=(65536-20000)/256; 66 TL0=(65536-20000)%256; 67 x++; 68 } 69 70 void delay(int i) //i * 1ms 71 { 72 int x,y; 73 for(x=0;x<i;x++) 74 for(y=0;y<120;y++); //1ms 75 }
protues仿真: