|
|
程序已經(jīng)改為兩個(gè)按鍵控制與單獨(dú)分別控制一樣,定時(shí)器與12MHz晶振配套。至于LED亮度不足可能改變供電電壓不易,只能減小限流電阻或換用超高亮LED。
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit Key1=P3^0;
- sbit Key2=P3^1;
- sbit Relay1=P2^0;
- sbit Relay2=P2^1;
- sbit LED=P2^2;
- sbit Buzzer=P2^3;
- uchar Cnt50ms=0;
- uint Cnt1s=0;
- bit sign=0;
- /****延時(shí)程序*****/
- void delay(uint t)
- {
- while(t--);
- }
- /****定時(shí)器初始化程序*****/
- void Timer0Init() //50毫秒@12.000MHz
- {
- TMOD= 0x01; //設(shè)置定時(shí)器模式
- TL0 = 0xB0; //設(shè)置定時(shí)初值
- TH0 = 0x3C; //設(shè)置定時(shí)初值
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)定時(shí)器0中斷
- }
- /*
- void Timer0Init() //50毫秒@11.0592MHz
- {
- TMOD= 0x01; //設(shè)置定時(shí)器模式
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0x4C; //設(shè)置定時(shí)初值
- TR0 = 1; //定時(shí)器0開(kāi)
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)定時(shí)器0中斷
- }*/
- /****主程序*******/
- void main()
- {
- Timer0Init();
- while(1)
- {
- if((Key1==0)||(Key2==0))
- {
- delay(10000);//延時(shí)消抖
- if((Key1==0)||(Key2==0)&&(sign==0))
- {
- sign=1;//按鍵自鎖 啟動(dòng)定時(shí)器計(jì)時(shí)
- }
- }
- }
- }
- /****中斷服務(wù)程序*******/
- void timer0() interrupt 1
- {
- // TL0 = 0x00; //設(shè)置定時(shí)初值50毫秒@11.0592MHz
- // TH0 = 0x4C; //設(shè)置定時(shí)初值50毫秒@11.0592MHz
- TL0 = 0xB0; //設(shè)置定時(shí)初值50毫秒@12.000MHz
- TH0 = 0x3C; //設(shè)置定時(shí)初值50毫秒@12.000MHz
- if(sign==1)
- {
- Cnt50ms++;
- if(Cnt50ms>=20)
- {
- Cnt50ms=0;
- Cnt1s++;
- }
- if(Cnt1s<25)
- {
- Relay1=0;
- }
- if(Cnt1s>=25)
- {
- Relay1=1;
- Relay2=0;
- }
- if(Cnt1s>=205)
- {
- Relay2=1;
- LED=0;
- }
- if(Cnt1s>=265)
- {
- LED=1;
- Buzzer=0;
- }
- if(Cnt1s>=300)
- {
- sign=0;
- Cnt50ms=0;
- Cnt1s=0;
- Buzzer=1;
- }
- }
- }
復(fù)制代碼
|
|