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

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

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:26:54 | 显示全部楼层
模式按钮中添加对新增的4中模式进行处理:
当前为 Mode_Change_Hour 时,按按钮后变为 Mode_Clock 模式
当前为 Mode_Clock 时,按按钮后变为 Mode_Clock_Change_Minute模式
当前为 Mode_Clock_Change_Minute时,按按钮后变为 Mode_Clock_Change_Hour模式
当前为 Mode_Clock_Change_Hour时,按按钮后变为 Mode_Normal模式
当前为 Mode_Clock_Alert时,按按钮后变为 Mode_Normal模式

uchar Btn_Mode_Click()
{
    switch(mode)
    {
        case Mode_Clock_Alert:
            mode = Mode_Normal;
            break;
        case Mode_Normal:
            mode = Mode_Change_Minute;
            break;
        case Mode_Change_Minute:
            mode = Mode_Change_Hour;
            break;
        case Mode_Change_Hour:
            mode = Mode_Clock;
            break;
        case Mode_Clock:
            mode = Mode_Clock_Change_Minute;
            break;
        case Mode_Clock_Change_Minute:
            mode = Mode_Clock_Change_Hour;
            break;
        case Mode_Clock_Change_Hour:
            mode = Mode_Normal;
            break;
    }
    return 1;
}
回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:28:27 | 显示全部楼层
AddSec函数中,添加返回值,如果分钟变化,则返回1,否则返回0
以便在主函数中进行判断是否到了闹钟时间
  1. //增加1s,如果分钟变动,返回1
  2. uchar AddSec()
  3. {
  4.     if(second >= 59)
  5.     {
  6.         second = 0;
  7.         if(minute >= 59)
  8.         {
  9.             minute = 0;
  10.             if(hour >= 23)
  11.                 hour = 0;
  12.             else
  13.                 ++hour;
  14.         }
  15.         else
  16.             ++minute;
  17.         return 1;
  18.     }
  19.     else
  20.         ++second;
  21.     return 0;
  22. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:31:21 | 显示全部楼层
Timer3中添加对AddSec的后续处理:
只有模式不为Mode_Change_Minute和Mode_Change_Hour时才会增加秒数
AddSec如果返回1,代表分钟变了,则判断是否需要切换模式为Mode_Clock_Alert,或者切回Mode_Normal (闹钟响应提醒持续时间为1分钟)
  1. //100毫秒@6.000MHz
  2. void Timer3_Isr(void) interrupt 19
  3. {
  4.     uchar need_update;
  5.     need_update = Button_OnTimeOut(BTN_UP,BTN_MODE);
  6.     ++t3_iter;
  7.     if(t3_iter == 5)
  8.     {
  9.         is_show_dot = !is_show_dot;
  10.         SetSeg4Bit();
  11.     }
  12.     else if(t3_iter == 10)
  13.     {
  14.         if(mode != Mode_Change_Minute && mode != Mode_Change_Hour )
  15.         {
  16.             if(AddSec())
  17.             {
  18.                 //如果分钟变动:
  19.                 if(mode == Mode_Normal)
  20.                 {
  21.                     if(minute == clock_minute && hour == clock_hour)
  22.                         mode = Mode_Clock_Alert;
  23.                 }else if(mode == Mode_Clock_Alert)
  24.                 {
  25.                     if(minute != clock_minute || hour != clock_hour)
  26.                         mode = Mode_Normal;
  27.                 }
  28.             }
  29.         }
  30.         is_show_dot = !is_show_dot;
  31.         SetSeg4Bit();
  32.         t3_iter = 0;
  33.     }
  34.     else if(need_update)
  35.         SetSeg4Bit();
  36. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:33:59 | 显示全部楼层
测试显示闹钟模式,以及修改闹钟时间:

VID_20240128_220821~1.mp4

6.41 MB, 下载次数: 42

回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:34:28 | 显示全部楼层
测试闹钟到时间后的闪烁提醒效果:

VID_20240128_220917~1.mp4

3.39 MB, 下载次数: 42

回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:35:02 | 显示全部楼层
忘记添加可以设置闹钟的开关了,我再去修改代码并调试一下
回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:42:04 | 显示全部楼层
clock.h中新添加一个变量:clock_enable
  1. uchar clock_minute = 0,clock_hour=0,clock_enable=0;
复制代码
回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:43:00 | 显示全部楼层
timer3中,分钟变化切换模式的代码中添加条件clock_enable
  1. if(AddSec() && clock_enable)
  2.             {
  3.                 //如果分钟变动:
  4.                 if(mode == Mode_Normal)
  5.                 {
  6.                     if(minute == clock_minute && hour == clock_hour)
  7.                         mode = Mode_Clock_Alert;
  8.                 }else if(mode == Mode_Clock_Alert)
  9.                 {
  10.                     if(minute != clock_minute || hour != clock_hour)
  11.                         mode = Mode_Normal;
  12.                 }
  13.             }
复制代码
回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:43:48 | 显示全部楼层
按钮+中添加功能,如果是Mode_Clock模式,则修改clock_enable为!clock_enable
  1. uchar Btn_Up_Pressed()
  2. {
  3.     switch(mode)
  4.     {
  5.     case Mode_Clock_Alert:
  6.         mode = Mode_Normal;
  7.             break;
  8.     case Mode_Normal:
  9.         return 0;
  10.     case Mode_Change_Minute:
  11.         if(minute>=59)
  12.             minute = 0;
  13.         else
  14.             ++minute;
  15.         break;
  16.     case Mode_Change_Hour:
  17.         if(hour>=23)
  18.             hour = 0;
  19.         else
  20.             ++hour;
  21.         break;
  22.     case Mode_Clock_Change_Minute:
  23.         if(clock_minute>=59)
  24.             clock_minute = 0;
  25.         else
  26.             ++clock_minute;
  27.         break;
  28.     case Mode_Clock_Change_Hour:
  29.         if(clock_hour>=23)
  30.             clock_hour = 0;
  31.         else
  32.             ++clock_hour;
  33.         break;
  34.     case Mode_Clock:
  35.         clock_enable = !clock_enable;
  36.         break;
  37.     }
  38.     second = 0;
  39.     return 1;
  40. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-28 22:44:17 | 显示全部楼层
烧录,测试-闹钟开关功能

VID_20240128_223927~1.mp4

1.73 MB, 下载次数: 42

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 07:07 , Processed in 0.128083 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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