基于51单片机的倒计时器设计
void Displaypro(void)
{
StrTab[0]=tab[hour/10]; //存储小时
StrTab[1]=tab[hour%10];
StrTab[2]=0x40; //存储"-"
StrTab[3]=tab[minute/10]; //存储分钟
StrTab[4]=tab[minute%10];
StrTab[5]=0x40; //存储"-"
StrTab[6]=tab[second/10]; //存储秒
StrTab[7]=tab[second%10];
}
void Print_play_pro(void) //动态扫描数码管
{
D0=1; D1=1; D2=1; //显示秒
P0=StrTab[7];
delay(3);
D0=0;D1=1; D2=1;
P0=StrTab[6];
delay(3);
D0=1;D1=0; D2=1; //显示"-"
P0=StrTab[5];
delay(3);
D0=0;D1=0;D2=1; //显示分
P0=StrTab[4];
delay(3);
D0=1;D1=1;D2=0;
P0=StrTab[3];
delay(3);
D0=0;D1=1;D2=0; //显示"-"
P0=StrTab[2];
delay(3);
D0=1;D1=0;D2=0; //显示小时
P0=StrTab[1];
delay(3);
D0=0;D1=0;D2=0;
P0=StrTab[0];
delay(3);
}
/*****************************定时器1中断*********************************/
void time1_isr(void) interrupt 3 //定时器1用来处理蜂鸣器
{
static uint count = 1; //位置待定
TH1=0xd8; //重入初值定时20ms
TL1=0xf0;
//Print_play_pro(); //抖动效果
count++;
D3=0; //产生闹钟方波
if(200==count)
{
TR0=1;
TR1=0;
count=1;
D3=1;
}
}
/***************************定时器0中断**********************************/
void tim(void) interrupt 1 //定时器0用来处理倒计时
{
static uchar count; //定义内部局部变量
TH0=0xd8; //重新赋值
TL0=0xf0;
count++;
switch (count)
{
case 80:Displaypro();break; //隔一定时间调用显示处理
default:break;
}
if (count==100)
{
clock_judge_pro(); //定时时间判断
count=0;
if((0==minute)&&(second==0)) //倒计时值处理
{
if(0==hour) { hour=0; }
else { hour--; }
minute=60;
}
if(0==second)
{
if(0==minute) { minute=59; }
else { minute-=1; }
}
if(0==second) { second=60; }
else { second-=1; }
if((0==hour)&&(0==minute)&&(0==second)) //倒计时到00:00:00,结束倒计时
{ hour=0; minute=0; second=0; Displaypro(); TR0=0; }
}
}
评论