如何利用STC89C52RC去实现一种99秒倒计时器的设计呢

如何利用STC89C52RC去实现一种99秒倒计时器的设计呢,第1张

设计要求:通过STC89C52RC单片机定时器0实现精确定时,并通过LCD1602实现倒计时时间的显示功能,初始值为99秒,并且具有暂停和复位功能。,倒计时时间设置功能。

倒计时器系统电路通过LCD1602显示倒计时初始值和当前计时值,并且可以通过set键启动倒计时,通过reset复位停止倒计时。并且在停止模式时可以通过plus和minus键进行倒计时初值的加减 *** 作,在运行模式无法调整倒计时的初始值。。

如何利用STC89C52RC去实现一种99秒倒计时器的设计呢,pYYBAGL-DNCAHS1LAAC_HxGAxRY112.png,第2张

系统的软件设计:上电首先初始化单片机,主要包括定时器的初始化、倒计时初始值的初始化、运行状态初始化。整个系统运行分为2个模式:停止模式、倒计时运行模式。主程序流程图:

如何利用STC89C52RC去实现一种99秒倒计时器的设计呢,pYYBAGL-DNaANrGiAAGFywfwDo8126.png,第3张

主要代码

主函数:

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);
             }
        
         }
                 
}



审核编辑:刘清

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/3000488.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存