写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仿真:

版权声明:本文为mcpigdull原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mcpigdull/p/danpianji_seg_timer_2.html