✅ 文末提供代码和仿真文件!
该时钟能够实现时、分、秒的实时显示,采用动态扫描方式驱动多位数码管,通过定时器中断实现精确计时功能。
本设计主要使用以下硬件资源:
STC89C5xRC 系列单片机
8 位共阴极数码管(通过动态扫描方式驱动)
两个 GPIO 引脚(P1^0 作为 CLK 时钟线,P1^1 作为 DAT 数据线)
数码管显示采用串行数据传输方式,通过 CLK 和 DAT 两根线控制 8 位数码管的段选和位选信号,减少了对单片机 IO 口的占用。
程序工作流程
- 系统上电后,首先初始化定时器 0,设置为 50ms 中断一次
- 主循环中不断通过动态扫描方式刷新 8 位数码管
- 每产生一次定时器中断,计数器加 1
- 当计数器达到 20 时(累计 1 秒),秒数加 1,并处理进位
- 数码管上实时显示当前的时、分、秒,格式为 “HH-MM-SS”
仿真效果

主函数代码
void main()
{
loading(); // 初始化定时器
while(1)
{
// 动态扫描显示各个位
sendbyte(second%10); // 秒,个位
delay(5);
sendbyte_1(second/10); // 秒,十位
delay(5);
sendbyte_2(10); // 显示"-"
delay(5);
sendbyte_3(minite%10); // 分,个位
delay(5);
sendbyte_4(minite/10); // 分,十位
delay(5);
sendbyte_5(10); // 显示"-"
delay(5);
sendbyte_6(hour%10); // 小时,个位
delay(5);
sendbyte_7(hour/10); // 小时,十位
delay(5);
}
}
完整代码获取
在小程序内复制网盘链接下载后,直接解压即可。
https://www.kdocs.cn/l/cdKOEx0g5dWQ

6644

被折叠的 条评论
为什么被折叠?



