- #include <reg52.h>
- sbit DGT0=P2^3;//数码管控制位
- sbit DGT1=P2^2;
- sbit DGT2=P2^1;
- sbit DGT3=P2^0;
- sbit KEY0=P2^4;
- sbit BEEP=P2^5;
- sbit KEY1=P2^6;
- sbit KEY2=P2^7;
- unsigned char code LedChar[]={
- 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- unsigned char LedBuff[4]={0xF9,0xC0,0xC0,0xC0};//显示数据储存空间
- bit sign,flag,B_flag;//工作表示
- unsigned int cnt=0;//计数器
- unsigned char i=0;//循环变量
- unsigned int sec,sec1=500;//定义变量,倒计时起始数据
- void main()
- {
- unsigned int t1,t2,t3;
- TMOD=0x01;//MOV TMOD,#01H//12M晶振产生1ms定时
- TH0=0xFC;//定时器初置
- TL0=0x18;
- TR0=1;//启动定时计数
- EA=1;//允许中断
- ET0=1;//允许定时器0中断
- while(1)
- {
- if(!KEY0 && !flag)
- {
- flag=1;//启动倒计时并自锁按键
- sec=sec1;//倒计时赋初值
- cnt=0;//定时器计数复位
- t2=0;//蜂鸣器计数复位
- BEEP=1;//蜂鸣器复位
- B_flag=0;//蜂鸣器工作标志复位
- }
- if(!KEY1 || !KEY2)//预置时间
- {
- if(++t1>=200 && !flag)
- {
- t1=0;
- sign=1;
- if(!KEY1){if(sec1<1000)sec1++;}
- if(!KEY2){if(sec1>10)sec1--;}
- t3=3000;//显示切换保持时间
- }
- }
- else
- {
- if(sign)
- {
- if(--t3==0)sign=0;
- }
- t1=0;
- }
- if(sign)//预置显存
- {
- LedBuff[0]=LedChar[sec1%10];//计数值个位存入
- LedBuff[1]=LedChar[sec1%100/10];//十位
- LedBuff[2]=LedChar[sec1%1000/100];//百位
- LedBuff[3]=LedChar[sec1/1000];//千位
- }
- else//正常显存
- {
- LedBuff[0]=LedChar[sec%10];//计数值个位存入
- LedBuff[1]=LedChar[sec%100/10];//十位
- LedBuff[2]=LedChar[sec%1000/100];//百位
- LedBuff[3]=LedChar[sec/1000];//千位
- }
- if(B_flag)//判断蜂鸣器允许标志
- {
- BEEP=0;//蜂鸣器工作
- if(++t2>=5000)//蜂鸣器工作时长
- {
- t2=0;//蜂鸣器计数复位
- BEEP=1;//蜂鸣器复位
- B_flag=0;//蜂鸣器工作标志复位
- }
- }
- }
- }
- void InterruptTime0() interrupt 1//定时中断
- {
- TH0=0xFC;//重赋初始值
- TL0=0x18;
- if(flag)
- {
- cnt++;//计数器加1
- if (cnt>=1000)//时间
- {
- cnt=0;//准备下一秒记时
- sec--;
- if(sec==0)
- {
- flag=0;//停止倒计时
- B_flag=1;//允许蜂鸣器工作
- }
- }
- }
- P0=0xFF;//熄灭,P0高电平
- switch (i)
- {
- case 0:DGT3=0;DGT2=0;DGT1=0;DGT0=1;i++;P0=LedBuff[0];break;//个位
- case 1:DGT3=0;DGT2=0;DGT1=1;DGT0=0;i++;P0=LedBuff[1];break;//十位
- case 2:DGT3=0;DGT2=1;DGT1=0;DGT0=0;i++;P0=LedBuff[2];break;//百位
- case 3:DGT3=1;DGT2=0;DGT1=0;DGT0=0;i=0;P0=LedBuff[3];break;//千位
- }
- }
复制代码
|