找回密码
 立即注册
查看: 7448|回复: 102

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

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

13

主题

198

回帖

1175

积分

金牌会员

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

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



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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:310
  • 最近打卡:2025-06-14 12:42:57
已绑定手机

5

主题

56

回帖

114

积分

注册会员

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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

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

13

主题

198

回帖

1175

积分

金牌会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 02:16 , Processed in 0.528480 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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