challis 发表于 2024-1-27 23:32:33

修改后效果如视频,大量修改时间起来方便多了!

challis 发表于 2024-1-27 23:35:28

功能代码及原理图,芯片为STC-8H8K64U-TSSOP20:

嵌入式之路 发表于 2024-1-28 01:06:05

你这小工具准备的真多哈 哈哈

jackfangxq 发表于 2024-1-28 05:37:39

步骤清晰,内容详细,努力学习

challis 发表于 2024-1-28 22:14:05

嵌入式之路 发表于 2024-1-28 01:06
你这小工具准备的真多哈 哈哈

开发板收到后,在淘宝从华强北买了一堆的小零件,自学没办法,什么都缺,想找个匹配的电阻都没有,我目前电阻只有一包以前买的100Ω的

challis 发表于 2024-1-28 22:15:08

今天实现了闹钟的功能,可以查看闹钟时间,设置闹钟,并且在到对应的时间后进行提示(因为没有蜂鸣器,所以改为了屏幕闪烁来进行提示)

challis 发表于 2024-1-28 22:16:56

现在mode.h中添加4种模式:
Mode_Clock 为显示当前的闹钟时间
Mode_Clock_Change_Minute 为修改闹钟分钟模式
Mode_Clock_Change_Hour 为修改闹钟小时模式
Mode_Clock_Alert 为闹钟时间到了的屏幕闪烁模式
#define Mode_Clock 4
#define Mode_Clock_Change_Minute 5
#define Mode_Clock_Change_Hour 6
#define Mode_Clock_Alert 7

challis 发表于 2024-1-28 22:20:20

在SetSeg4Bit函数中添加对应模式的显示逻辑
Mode_Clock 模式显示闹钟,且不显示冒号(和时间模式进行区分)
Mode_Clock_Change_Minute 模式显示闹钟,且分钟闪烁
Mode_Clock_Change_Hour 模式显示闹钟,且小时闪烁
Mode_Clock_Alert 显示当前时间,且小时分钟都闪烁
void SetSeg4Bit()
{
    switch(mode)
    {
    case Mode_Normal:
      SetSeg4BitData_1(Mode_Show_1,is_show_dot);
      SetSeg4BitData_2(Mode_Show_2);
      break;
    case Mode_Change_Minute:
      SetSeg4BitData_1(Mode_Show_1,1);
      if(is_show_dot)
            SetSeg4BitData_2(Mode_Show_2);
      else
            SetSeg4BitData_2(SEG_NULL);
      break;
    case Mode_Change_Hour:
      if(is_show_dot)
            SetSeg4BitData_1(Mode_Show_1,1);
      else
            SetSeg4BitData_1(SEG_NULL,1);
      SetSeg4BitData_2(Mode_Show_2);
      break;
    case Mode_Clock:
      SetSeg4BitData_1(clock_hour,0);
      SetSeg4BitData_2(clock_minute);
      break;
    case Mode_Clock_Change_Minute:
      SetSeg4BitData_1(clock_hour,0);
      if(is_show_dot)
            SetSeg4BitData_2(clock_minute);
      else
            SetSeg4BitData_2(SEG_NULL);
      break;
    case Mode_Clock_Change_Hour:
      if(is_show_dot)
            SetSeg4BitData_1(clock_hour,0);
      else
            SetSeg4BitData_1(SEG_NULL,0);
      SetSeg4BitData_2(clock_minute);
      break;
    case Mode_Clock_Alert:
      if(is_show_dot)
      {
            SetSeg4BitData_1(Mode_Show_1,1);
            SetSeg4BitData_2(Mode_Show_2);
      }
      else
      {
            SetSeg4BitData_1(SEG_NULL,0);
            SetSeg4BitData_2(SEG_NULL);
      }
      break;
    }
}

challis 发表于 2024-1-28 22:22:05

在clock.h中添加clock_minute和clock_hour的变量定义
uchar clock_minute = 0,clock_hour=0;

challis 发表于 2024-1-28 22:25:17

按钮+的按键响应函数中添加对新增的4种模式的处理:
Mode_Clock_Alert 闹钟时间到时,按键关闭闹钟
Mode_Clock 显示闹钟模式时,按键无响应
Mode_Clock_Change_Minute,Mode_Clock_Change_Hour 修改闹钟小时和分钟时,按键增加闹钟的小时和分钟,并且判断溢出后变0
uchar Btn_Up_Pressed()
{
    switch(mode)
    {
    case Mode_Clock_Alert:
      mode = Mode_Normal;
            break;
    case Mode_Normal:
    case Mode_Clock:
   
      return 0;
    case Mode_Change_Minute:
      if(minute>=59)
            minute = 0;
      else
            ++minute;
      break;
    case Mode_Change_Hour:
      if(hour>=23)
            hour = 0;
      else
            ++hour;
      break;
    case Mode_Clock_Change_Minute:
      if(clock_minute>=59)
            clock_minute = 0;
      else
            ++clock_minute;
      break;
    case Mode_Clock_Change_Hour:
      if(clock_hour>=23)
            clock_hour = 0;
      else
            ++clock_hour;
      break;
    }
    second = 0;
    return 1;
}
页: 1 2 3 4 5 [6] 7 8 9 10 11
查看完整版本: 从零开始做一个数码管时钟-开天斧,程序开源 | 已完结