
A02基于51单片机汇编语言数字时钟Proteus设计,asm
用51单片机汇编语言做一个数字时钟仿真:8位共阴数码管显示时分秒,3个按键分别设定时、分、秒。资料包含Proteus仿真文件和完整汇编源码,适合学汇编语言和定时器中断的同学参考。
一、设计实现功能
本设计功能简介:使用51单片机设计一个电子时钟的proteus仿真,要求以下功能:
1、使用汇编语言编写程序。
2、使用8位共阴数码管模拟显示时钟的时分秒。
3、有3个独立按键,分别可以设定时、分、秒。
二、资源汇总
1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。
2、程序文件:main.asm汇编源码,以及编译好的cx.hex。
3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。
三、设计介绍
拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。
硬件链路:P0口送段码,接8位共阴数码管的段选;位选用P3口控制,P3.6/P3.7是秒的十位/个位,P3.3/P3.4是分的十位/个位,P3.0/P3.1是时的十位/个位,P3.5和P3.2两个位置送分隔符。时分秒三个计时单元分别放在内部RAM的30H、31H、32H。
图1 Proteus仿真总览

计时核心是定时器0:工作于模式1(16位定时器),初值TH0/TL0按65536-50000装入,每50ms中断一次;中断服务程序里用TCNT(34H)计数,满20次就是1秒,秒加1;秒满60进分钟,分钟满60进小时,小时满24全部清零,回到00:00:00。
| 计数器 | 存放单元 | 动作 |
| TCNT | 34H | 每50ms加1,满20次秒加1 |
| SECOND | 30H | 满60进分钟并清零 |
| MINUTE | 31H | 满60进小时并清零 |
| HOUR | 32H | 满24时全部清零 |
50ms的来历:12MHz晶振下机器周期1微秒,50000个计数正好50毫秒;换成别的晶振,定时时间等比例变化,改初值即可。
显示用动态扫描:DISPLAY子程序把秒、分、时分别除以10拆出十位和个位,用MOVC A,@A+DPTR查表取段码送到P0,同时把P3对应位选脚置零选中当前位数码管,送完马上置1关闭,8个位置轮流点亮,利用视觉暂留就能看到完整的时、分、秒。
段码表存在程序末尾的TABLE里,是共阴数码管的0到9:3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。两个冒号分隔符送的是40H,也就是g段,显示中间一横。
按键设定部分:P1.0、P1.1、P1.2分别是秒、分、时设定键,低电平有效。主循环检测到哪个键按下,先调DELAY去抖,确认键仍然按下才给对应计时单元加1;加完之后循环等待按键抬起,避免按住不放数字连续狂跳。小时加到24时,分钟和秒跟着一起清零。
图2 汇编程序源码

特别注意: 仿真跑起来数码管不亮,先检查压缩包是否解压完整;Proteus用7.8或8.6版本;改了汇编源码要重新编译生成hex再跑仿真。
四、日期修改
资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。
五、资料下载
付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。
/

