manzunzu 发表于 2024-1-26 16:30:30

不用了,显示正常了

wangxiangtan 发表于 2024-1-26 16:32:23

干得不错,功能再完善一下

泰勒soc 发表于 2024-1-26 16:44:11

跟着冲哥学,比他更会冲{:4_166:}

challis 发表于 2024-1-27 22:51:55

manzunzu 发表于 2024-1-26 15:09
你好这个代码能分享下吗,我做出来的乱码

好的,我一会整理一下

challis 发表于 2024-1-27 22:52:11

今天比较忙,晚上回家,赶紧添加了按钮以及调整时间的功能

challis 发表于 2024-1-27 22:55:35

新建mode.h文件,来实现不同模式的显示
目前的模式有3中,一种是正常显示模式,一种是修改分钟,一种是修改小时模式,用宏定义3种模式的值分别为1,2,3#define Mode_Normal 1
#define Mode_Change_Minute 2
#define Mode_Change_Hour 3

challis 发表于 2024-1-27 22:56:41

建立局部变量,以及把之前的is_show_dot变量剪切到这个文件中定义,并初始化
uchar is_show_dot = 1;
uchar mode = Mode_Normal;

challis 发表于 2024-1-27 22:57:44

接下来重写SetSeg4Bit函数,当正常模式时,显示小时和分钟,并且根据is_show_dot来切换是否显示时间中间的冒号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;
    }
}

challis 发表于 2024-1-27 22:59:37

当是修改分钟的模式时(Mode_Change_Minute),会常亮显示冒号,并且根据is_show_dot来决定是否显示分钟的那2位数字,这样就实现了显示分钟的那2个数码管闪烁的效果
修改时钟的模式(Mode_Change_Hour)和修改分钟的模式类似,只是闪烁变为了前2位,也就是小时

challis 发表于 2024-1-27 23:01:37

timer3中断函数中修改一下,只有在正常模式(Mode_Normal)才会增加秒数,而修改模式设定的时间流逝是暂停的
if(t3_iter == 10)
    {
      if(mode == Mode_Normal)
            AddSec();
      is_show_dot = !is_show_dot;
      SetSeg4Bit();
      t3_iter = 0;
    }
页: 1 2 3 [4] 5 6 7 8 9 10 11
查看完整版本: 从零开始做一个数码管时钟-开天斧,程序开源 | 已完结