找回密码
 立即注册
楼主: challis

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 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. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 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. }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 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;
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 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.         }
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 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;
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 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;
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

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

VID_20240130_002650~1.mp4

3.32 MB, 下载次数: 46

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

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

MyClock.zip

94.58 KB, 下载次数: 62

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:414
  • 最近打卡:2025-05-02 09:17:58

5

主题

296

回帖

2034

积分

金牌会员

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

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:31 , Processed in 0.127594 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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