找回密码
 立即注册
查看: 2310|回复: 100

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

[复制链接]
  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 86 天

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
    发表于 2024-1-25 09:03:36 | 显示全部楼层 |阅读模式
    免费申请的开天斧到货了,在淘宝上购买了华强北的一堆小零件后,准备开始做一个小数码管时钟
    测试芯片为STC-8H8K64U-TSSOP20,频率6MHz,电压3.7v
    开天斧同样适用

    实现了显示时间,修改时间,设置闹钟,闹钟提醒,以及定时器的功能
    最新代码在88楼
    LED代码查询V1.1 在91楼



    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    回复 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 09:11:38 来自手机 | 显示全部楼层
    先用 3.7v 电池接 100Ω电阻,来测量一下数码管各个引脚的位置,我买的这个 4 位共阳极时钟数码管,12 个引脚,应该是正常的 8 个阴极引脚控制单个数码管的显示,4 个阳极引脚来控制具体显示哪个数码管,测量后,果然和我预想的一样,奇怪的是,这个晶体管的引脚居然不是顺序排列的,感觉内部弄得好随意!用纸记录下引脚功能,以便以后使用
    IMG_20240125_084640R.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 09:19:40 来自手机 | 显示全部楼层
    确定数码管引脚功能后,开始接线,因为我最终准备用 stc8h8u64 tssop20 这个芯片,于是 使用 p30~p37 控制数码管阴极,p1.4~p1.7 控制阳极
    IMG_20240125_091540R.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 09:26:30 | 显示全部楼层
    写一个通用的数码管显示的函数
    1. //seg:0x01-P14,0x02-P15,0x04-P16,0x08-P17
    2. void ShowSeg(uchar led,uchar seg)
    3. {
    4.     P14 = 0;
    5.     P15 = 0;
    6.     P16 = 0;
    7.     P17 = 0;
    8.     _nop_();
    9.     P3 = led;
    10.     P14 = seg & 0x01;
    11.     P15 = (seg>>1) & 0x01;
    12.     P16 = (seg>>2) & 0x01;
    13.     P17 = (seg>>3) & 0x01;
    14. }
    复制代码

    uchar led 控制共阳极数码管显示情况
    uchar seg 控制显示哪些数码管,如果显示第一个就是0x01,如果想同时显示第一个和第三个就是0x01|0x04
    并用程序生成好led显示的数据
    微信截图_20240125092559.png
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-5 09:52
  • 签到天数: 99 天

    [LV.6]常住居民II

    3

    主题

    49

    回帖

    417

    积分

    中级会员

    积分
    417
    发表于 2024-1-25 10:16:47 | 显示全部楼层
    回复 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 11:23:50 | 显示全部楼层
    把数码管连上开发板,初始化端口,调用ShowSeg函数来测试一下
    1. P1M0 = 0x00;
    2. P1M1 = 0x00;
    3. P0 = 0x00;
    4. P3M0 = 0x00;
    5. P3M1 = 0x00;
    6. P3 = 0xff;
    7. ShowSeg(seg_led_data[8],0x01);
    8. while(1);
    复制代码

    发现数码管点亮了,但是亮度有点太暗了
    IMG_20240125_085337R.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 11:25:55 | 显示全部楼层
    测压阳极和阴极之间的电压,发现只有1.61v,是不是IO口驱动不够?
    IMG_20240125_085535R.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 11:27:07 | 显示全部楼层
    我尝试把P14~P17改为推挽输出模式,这下数码管显示正常了!
    IMG_20240125_085141R.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 11:34:51 | 显示全部楼层
    接下来就是利用定时器来循环点亮4个数码管了,初始化定时器,在定时器函数内添加显示第二个数码管的代码,来测试一下定时中断是否正常
    1. void Timer4_Isr(void) interrupt 20
    2. {
    3.     ShowSeg(seg_led_data[2],0x02);
    4. }
    复制代码
    微信截图_20240125113327.png
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.6]常住居民II

    13

    主题

    199

    回帖

    531

    积分

    高级会员

    积分
    531
     楼主| 发表于 2024-1-25 11:38:44 | 显示全部楼层
    烧录后,发现数码管并没有显示2,而是和之前一样,只显示1,那么说明定时器中断没有进入,打开万能的手册去找找答案!
    我去,原来是EA没有设置为1,这里给STC官方烧录软件提个小小的建议,定时器计算器功能中生成使能定时器中断的示例代码里面把EA=1加上,不然新手容易漏掉这个,导致无法进入中断
    微信截图_20240125113837.png
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 16:25 , Processed in 0.081519 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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