设计要求:通过STC89C52RC单片机的定时器0实现精确定时,并通过LCD1602实现倒计时时间的显示功能,初始值为99秒,并且具有暂停和复位功能。,倒计时时间设置功能。
倒计时器系统电路:通过LCD1602显示倒计时初始值和当前计时值,并且可以通过set键启动倒计时,通过reset复位停止倒计时。并且在停止模式时可以通过plus和minus键进行倒计时初值的加减 *** 作,在运行模式无法调整倒计时的初始值。。
系统的软件设计:上电首先初始化单片机,主要包括定时器的初始化、倒计时初始值的初始化、运行状态初始化。整个系统运行分为2个模式:停止模式、倒计时运行模式。主程序流程图:
主要代码
主函数:
void main()
{
InitLcd1602();
LcdShowStr(0, 0, "Current : 99 S");
LcdShowStr(0, 1, "IniTIal : 99 S");
TImer_inial();
while(1)
{
if(0==run_mode){
TIme_set();
}else{
second_cal_show();
}
start();
stop();
}
}void main()
{
InitLcd1602();
LcdShowStr(0, 0, "Current : 99 S");
LcdShowStr(0, 1, "IniTIal : 99 S");
timer_inial();
while(1)
{
if(0==run_mode){
time_set();
}else{
second_cal_show();
}
start();
stop();
}
}
运行模式代码:
void second_cal_show()
{
if(TF0==1)
{
TF0=0;
TH0=0XB8;
TL0=0X00;
time_count++;
if(time_count>=50)//50次一秒
{
time_count=0;
time_S--;
if(0==time_S) {TR0=0;FM=0;run_mode=0;}
sprintf(Disp_Buffer,"%d S ",time_S);
LcdShowStr(10, 0, Disp_Buffer);
}
}
}
停止模式代码:
void time_set()
{
if(0==key_plus)
{
delay(1200);//10ms消抖
if(0==key_plus)//再次检测按键是否按下
{
//while(!key_plus);//等待按键释放
ini_value++;
sprintf(Disp_Buffer,"%d S ",ini_value);
LcdShowStr(10, 1, Disp_Buffer);
LcdShowStr(10, 0, Disp_Buffer);
}
}else if(0==key_minus)
{
delay(1200);//10ms消抖
if(0==key_minus)//再次检测按键是否按下
{
//while(!key_minus);//等待按键释放
ini_value--;
sprintf(Disp_Buffer,"%d S ",ini_value);
LcdShowStr(10, 1, Disp_Buffer);
LcdShowStr(10, 0, Disp_Buffer);
}
}
}
审核编辑:刘清
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)