shi--; //时钟减1
if(shi==255) shi=23; //小于0就等于23
}
k=1000;
}
}
else
{
if(k>500 && k<3000) //短按
{
if(knum==1)
{
miao--; //秒钟减1
if(miao==255) miao = 59; //小于0就等于59
}
if(knum==2)
{
fen--; //分钟减1
if(fen==255) fen=59; //小于0就等于59
}
if(knum==3)
{
shi--; //时钟减1
if(shi==255) shi=23; //小于0就等于23
}
}
k=0; //消抖变量清零,为下次按键做准备
}
}
void main()
{
init();//定时器初始化
out = 1;
while(1)
{
keysan();//按键扫描函数
dis();//显示函数
if(shi==0 && fen==0 && miao==0 && flag == 1 ) //倒计时时间到
{
flag=0; //停止计时
flag1=1; //启动蜂鸣器标志置1
out=1; //关闭输出
}
}
}
void timer() interrupt 1
{
TH0 = (65536-1000)/256; //1毫秒初值
TL0 = (65536-1000)%256;
//1s计时//
if(flag)
{
cont++;
if(cont == 1000) //1s到
{
cont = 0; //清0
miao--; //秒数减1
if(miao==255) //如果小于0,就是59
{
miao=59;
fen--; //分钟数减1
if(fen==255) //如果小于0,就是59
{
fen=59;
shi--; //小时减1
if(shi==255) shi=0; //时钟小于0,就是0
if(shi==0) fen=59; //时钟小于0,就是255
if(fen==0 && shi==0) fen=0;//时钟分钟都为0,就是0
}
}
}
}
//蜂鸣器控制//
if(flag1) //倒计时时间到,启动蜂鸣器
{
cont1++;
if(cont1==500) //500ms蜂鸣器响一次
{
cont1=0;
di=!di;
cont2++;
if(cont2==20)//500*20=10000ms=10s,蜂鸣器响10s后停止
{
cont2=0;
flag1=0;
}
}
}
//启动/暂停键//
if(knum != 0)
{
shan_cont++;
if(shan_cont==100) //设置时,100ms闪烁时间 可根据实际效果调整
{
shan_cont=0;
shan = !shan;
}
}
/**********************************数码管扫描函数**********************************/
i++; //挨个显示
if(i>=8) i=0; //清0
duan = 0x00;
switch(i)
{
case 0:
if(knum==1) //如果设置键第一次按下
{
if(shan==1) {wei = 0x00; duan = LedBuff[0];} //设置秒位闪烁
else {wei = weima[0]; duan = LedBuff[0];}
}
else{wei = weima[0]; duan = LedBuff[0];} break; //否则正常显示
case 1:
if(knum==1)//如果设置键第一次按下
{
if(shan==1){wei = 0x00; duan = LedBuff[1];} //设置秒位闪烁
else{wei = weima[1]; duan = LedBuff[1];}
}
else{wei = weima[1]; duan = LedBuff[1];} break;//否则正常显示
case 2: wei = weima[2]; duan = LedBuff[2]; break;//显示-
case 3:
if(knum==2) //如果设置键第二次按下
{
if(shan==1){wei = 0x00; duan = LedBuff[3];} //设置分位闪烁
else{wei = weima[3]; duan = LedBuff[3];}
}
else{wei = weima[3]; duan = LedBuff[3];} break;//否则正常显示
case 4:
if(knum==2) //如果设置键第二次按下
{
if(shan==1){wei = 0x00; duan = LedBuff[4];} //设置分位闪烁
else{wei = weima[4]; duan = LedBuff[4];}
}
else{wei = weima[4]; duan = LedBuff[4];} break;//否则正常显示
case 5: wei = weima[5]; duan = LedBuff[5]; break;//显示-
case 6:
if(knum==3) //如果设置键第三次按下
{
if(shan==1){wei = 0x00; duan = LedBuff[6];} //设置时位闪烁
else{wei = weima[6]; duan = LedBuff[6];}
}
else{wei = weima[6]; duan = LedBuff[6];} break;//否则正常显示
case 7:
if(knum==3) //如果设置键第三次按下
{
if(shan==1){wei = 0x00; duan = LedBuff[7];} //设置时位闪烁
else{wei = weima[7]; duan = LedBuff[7];}
}
else{wei = weima[7]; duan = LedBuff[7];} break;//否则正常显示
[1] [2] [3]