給你寫了一個程序,完全符合你的要求《60+10秒互鎖倒計時+仿真》
60+10秒互鎖倒計時+仿真.zip
(108.73 KB, 下載次數: 14)
2019-4-15 13:59 上傳
點擊文件名下載附件
- #include <reg52.h>
- #define u16 unsigned int
- #define u8 unsigned char
- sbit key1=P3^2;
- sbit key2=P3^3;
- u8 code table[]={ //0~F段碼
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- u8 code wei[]={0xfe,0xfd,0xfb,0xf7};//位碼
- u16 Cnt1ms1=0,Cnt1ms2=0; //中斷2毫秒變量
- u8 Cnt1s1=0,Cnt1s2=0; //1秒變量
- bit start1=0,start2=0; //計時標志
- bit stop1,stop2; //停止標志
- /***********定時器初始化程序****************/
- void Timer0Init() //1毫秒@12MHz
- {
- TMOD=0x01;
- TH0=(65536-1000)/256; //1ms
- TL0=(65536-1000)%256; //1ms
- TR0=1;
- EA=1;
- ET0=1;
- }
- /***********按鍵掃描程序****************/
- void keyscan()
- {
- static u8 count1=0,count2=0; //消抖計數變量
- static bit key_sign1=0,key_sign2=0;//按鍵自鎖標志
- if(key1==0) //檢測輸入如果為0
- {
- if(++count1>=10 && key_sign1==0)//消抖計數,檢測按鍵自鎖標志為0
- {
- key_sign1=1; //按鍵自鎖標志置1,防止重復響應
- stop2=0; //暫停10秒倒計時
- if(Cnt1ms1!=0 && Cnt1s1!=0)//判斷暫停狀態
- stop1=1; //繼續倒計時
- else
- {
- Cnt1s1=60; //賦初值
- Cnt1ms1=0; //清0
- stop1=1; //開始倒計時
- }
- }
- }
- else
- {
- count1=0; //計數變量清0
- key_sign1=0; //按鍵自鎖標志清0
- }
- if(key2==0) //檢測輸入如果為0
- {
- if(++count2>=10 && key_sign2==0)//消抖計數,檢測按鍵自鎖標志為0
- {
- key_sign2=1; //按鍵自鎖標志置1,防止重復響應
- stop1=0; //暫停60秒倒計時
- if(Cnt1ms2!=0 && Cnt1s2!=0)//判斷暫停狀態
- stop2=1; //繼續倒計時
- else
- {
- Cnt1s2=10; //賦初值
- Cnt1ms2=0; //清0
- stop2=1; //開始倒計時
- }
- }
- }
- else
- {
- count2=0; //計數變量清0
- key_sign2=0; //按鍵自鎖標志清0
- }
- }
- /**************4位數碼管顯示程序***************/
- void display() //顯示程序
- {
- static u8 i=0; //計數變量
- P0=0x00; //消隱
- switch(i)
- {
- case 0: P2=wei[i];P0=table[Cnt1s1/10];i++;break;
- case 1: P2=wei[i];P0=table[Cnt1s1%10];i++;break;
- case 2: P2=wei[i];P0=table[Cnt1s2/10];i++;break;
- case 3: P2=wei[i];P0=table[Cnt1s2%10];i=0;break;
- }
- }
- void main()
- {
- Timer0Init();
- while(1);
- }
- /**************中斷服務程序*****************/
- void timer0() interrupt 1
- {
- TH0=(65536-1000)/256; //1ms
- TL0=(65536-1000)%256; //1ms
- if(stop1==1)
- {
- Cnt1ms1++;
- if(Cnt1ms1==1000) //1s
- {
- Cnt1ms1=0;
- Cnt1s1--;
- if(Cnt1s1==0)
- stop1=0;
- }
- }
- if(stop2==1)
- {
- Cnt1ms2++;
- if(Cnt1ms2==1000) //1s
- {
- Cnt1ms2=0;
- Cnt1s2--;
- if(Cnt1s2==0)
- stop2=0;
- }
- }
- keyscan(); //按鍵掃描
- display(); //數碼管顯示
- }
復制代碼
|