找回密码
 立即注册
楼主: cha***

从零开始做一个数码管时钟-开天斧,程序开源 | 已完结

[复制链接]
  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:36:02 | 显示全部楼层
    添加函数AddTimerSec,用来处理计时器的时间流逝
    当秒钟达到60时,分钟+1,秒钟归0
    当分钟达到99时,分钟归0
    1. void AddTimerSec()
    2. {
    3.     if(timer_second >= 59)
    4.     {
    5.         timer_second = 0;
    6.         if(timer_minute >= 99)
    7.             timer_minute = 0;
    8.         else
    9.             ++timer_minute;
    10.     }
    11.     else
    12.         ++timer_second;
    13. }
    复制代码
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:37:51 | 显示全部楼层
    模式按钮增加长按功能Btn_Mode_LongClick
    长按时,如果当前为 Mode_Normal 模式,则进入计时器模式(Mode_Timer),且计时器的时间清零
    如果当前是 Mode_Timer 模式,则退出计时器模式,返回正常模式(Mode_Normal)
    否则响应短按函数Btn_Mode_Click
    1. uchar Btn_Mode_LongClick()
    2. {
    3.     if(mode == Mode_Normal)
    4.     {
    5.         timer_minute = 0;
    6.         timer_second = 0;
    7.         mode = Mode_Timer;
    8.         return 1;
    9.     } else if(mode == Mode_Timer)
    10.     {
    11.         mode = Mode_Normal;
    12.         return 1;
    13.     }
    14.     else
    15.     {
    16.         return Btn_Mode_Click();
    17.     }
    18. }
    复制代码
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 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
    1. if(btn_mode)
    2.     {
    3.         if(btn_mode_ts>10)
    4.         {
    5.             need_update += Btn_Mode_LongClick();
    6.             btn_mode_ts = 0;
    7.         }else if(btn_mode_ts)
    8.         {
    9.             need_update += Btn_Mode_Click();
    10.             btn_mode_ts = 0;
    11.         }
    12.     }else
    13.         btn_mode_ts += 1;
    复制代码
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:41:33 | 显示全部楼层
    Timer3_Isr中修改,如果过去1s<且模式为Mode_Timer_Running,则调用AddTimerSec来增加计时器的时间
    1. if(mode == Mode_Timer_Running)
    2.         {
    3.             AddTimerSec();
    4.         }
    5.         else if(mode != Mode_Change_Minute && mode != Mode_Change_Hour )
    6.         {
    7.             if(AddSec() && clock_enable)
    8.             {
    9.                 //如果分钟变动:
    10.                 if(mode == Mode_Normal)
    11.                 {
    12.                     if(minute == clock_minute && hour == clock_hour)
    13.                         mode = Mode_Clock_Alert;
    14.                 }else if(mode == Mode_Clock_Alert)
    15.                 {
    16.                     if(minute != clock_minute || hour != clock_hour)
    17.                         mode = Mode_Normal;
    18.                 }
    19.             }
    20.         }
    复制代码
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:44:44 | 显示全部楼层
    模式按钮短按函数中,添加逻辑,如果当前是Mode_Timer模式,则开始计时,进入Mode_Timer_Running模式,如果是计时模式(Mode_Timer_Running),则暂停,进入Mode_Timer模式
    1.         case Mode_Timer:
    2.             mode = Mode_Timer_Running;
    3.             break;
    4.         case Mode_Timer_Running:
    5.             mode = Mode_Timer;
    6.             break;
    复制代码
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:45:50 | 显示全部楼层
    按钮+的函数中添加逻辑,如果是Mode_Timer模式,则将计时器时间归0,如果是Mode_Timer_Running模式,则不处理
    1.     case Mode_Timer:
    2.         if(timer_minute || timer_second)
    3.         {
    4.             timer_minute = 0;
    5.             timer_second = 0;
    6.             return 1;
    7.         }
    8.         else
    9.             return 0;
    10.         break;
    11.     case Mode_Timer_Running:
    12.         return 0;
    13.         break;
    复制代码
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:46:16 | 显示全部楼层
    烧录,测试功能正常!

    VID_20240130_002650~1.mp4

    3.32 MB, 下载次数: 5

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:47:35 | 显示全部楼层
    添加了计时器功能的项目源码

    MyClock.zip

    94.58 KB, 下载次数: 19

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:29
  • 签到天数: 98 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    579

    积分

    高级会员

    积分
    579
     楼主| 发表于 2024-1-30 00:50:07 | 显示全部楼层
    数码管时钟的项目到此就算告一段落了,接下来准备研究串口通信,以及使用串口发送数据来测试STC-ISP调试接口的各个模块功能!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 150 天

    [LV.7]常住居民III

    4

    主题

    235

    回帖

    960

    积分

    高级会员

    积分
    960
    发表于 2024-1-30 02:09:01 | 显示全部楼层
    challis 发表于 2024-1-25 09:26
    写一个通用的数码管显示的函数

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

    你的LED代码查询工具能否分享下
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-3 10:36 , Processed in 0.091359 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表