challis 发表于 2024-1-30 00:36:02

添加函数AddTimerSec,用来处理计时器的时间流逝
当秒钟达到60时,分钟+1,秒钟归0
当分钟达到99时,分钟归0
void AddTimerSec()
{
    if(timer_second >= 59)
    {
      timer_second = 0;
      if(timer_minute >= 99)
            timer_minute = 0;
      else
            ++timer_minute;
    }
    else
      ++timer_second;
}

challis 发表于 2024-1-30 00:37:51

模式按钮增加长按功能Btn_Mode_LongClick
长按时,如果当前为 Mode_Normal 模式,则进入计时器模式(Mode_Timer),且计时器的时间清零
如果当前是 Mode_Timer 模式,则退出计时器模式,返回正常模式(Mode_Normal)
否则响应短按函数Btn_Mode_Click
uchar Btn_Mode_LongClick()
{
    if(mode == Mode_Normal)
    {
      timer_minute = 0;
      timer_second = 0;
      mode = Mode_Timer;
      return 1;
    } else if(mode == Mode_Timer)
    {
      mode = Mode_Normal;
      return 1;
    }
    else
    {
      return Btn_Mode_Click();
    }
}

challis 发表于 2024-1-30 00:40:20

在Button_OnTimeOut函数中,修改模型按钮的函数触发逻辑,每100ms检测一次,当按钮按下时,btn_mode_ts+1,当按钮松开时,如果btn_mode_ts>10(按下超过1000ms),则触发长按函数,且将btn_mode_ts置0,如果0<btn_mode_ts<=10,则触发短按函数,同样将btn_mode_ts置0
if(btn_mode)
    {
      if(btn_mode_ts>10)
      {
            need_update += Btn_Mode_LongClick();
            btn_mode_ts = 0;
      }else if(btn_mode_ts)
      {
            need_update += Btn_Mode_Click();
            btn_mode_ts = 0;
      }
    }else
      btn_mode_ts += 1;

challis 发表于 2024-1-30 00:41:33

Timer3_Isr中修改,如果过去1s<且模式为Mode_Timer_Running,则调用AddTimerSec来增加计时器的时间
if(mode == Mode_Timer_Running)
      {
            AddTimerSec();
      }
      else if(mode != Mode_Change_Minute && mode != Mode_Change_Hour )
      {
            if(AddSec() && clock_enable)
            {
                //如果分钟变动:
                if(mode == Mode_Normal)
                {
                  if(minute == clock_minute && hour == clock_hour)
                        mode = Mode_Clock_Alert;
                }else if(mode == Mode_Clock_Alert)
                {
                  if(minute != clock_minute || hour != clock_hour)
                        mode = Mode_Normal;
                }
            }
      }

challis 发表于 2024-1-30 00:44:44

模式按钮短按函数中,添加逻辑,如果当前是Mode_Timer模式,则开始计时,进入Mode_Timer_Running模式,如果是计时模式(Mode_Timer_Running),则暂停,进入Mode_Timer模式
      case Mode_Timer:
            mode = Mode_Timer_Running;
            break;
      case Mode_Timer_Running:
            mode = Mode_Timer;
            break;

challis 发表于 2024-1-30 00:45:50

按钮+的函数中添加逻辑,如果是Mode_Timer模式,则将计时器时间归0,如果是Mode_Timer_Running模式,则不处理
    case Mode_Timer:
      if(timer_minute || timer_second)
      {
            timer_minute = 0;
            timer_second = 0;
            return 1;
      }
      else
            return 0;
      break;
    case Mode_Timer_Running:
      return 0;
      break;

challis 发表于 2024-1-30 00:46:16

烧录,测试功能正常!

challis 发表于 2024-1-30 00:47:35

添加了计时器功能的项目源码

challis 发表于 2024-1-30 00:50:07

数码管时钟的项目到此就算告一段落了,接下来准备研究串口通信,以及使用串口发送数据来测试STC-ISP调试接口的各个模块功能!

lzl1okOK 发表于 2024-1-30 02:09:01

challis 发表于 2024-1-25 09:26
写一个通用的数码管显示的函数

uchar led 控制共阳极数码管显示情况


你的LED代码查询工具能否分享下
页: 1 2 3 4 5 6 7 8 [9] 10 11
查看完整版本: 从零开始做一个数码管时钟-开天斧,程序开源 | 已完结