1. 程式人生 > 實用技巧 >寫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模擬: