A18基于51单片机汇编语言秒表计数器Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-14 06:08:01    阅读:18 次   消耗积分:5 分

image.png

A18基于51单片机汇编语言秒表计数器Proteus设计

用51单片机汇编语言做一个简易秒表:2位数码管从00走到59,每秒加1,计满60自动归零重新开始,纯软件延时不占用定时器。资料包含Proteus仿真文件和完整汇编源码,适合学DIV除法分离十位个位和软件延时精确计算的同学参考。

一、设计实现功能

本设计功能简介:使用51单片机和汇编语言设计一个简易秒表的proteus仿真,要求以下功能:

1、使用汇编语言编写程序。

2、要求2位数码管显示秒钟。

二、资源汇总

1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。

2、程序文件:main.asm汇编源码,以及编译好的cx.hex。

3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。

三、设计介绍

拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。

硬件用2位共阳极数码管,十位段码接P2口、个位段码接P3口,两个公共端分别接高电平常亮,不做动态扫描——因为这个程序每秒钟才换一次数,直接静态点亮最省事。

图1 Proteus仿真总览

仿真原理图

秒计数值存在R0里,从00到59循环。每轮先做除法,把R0分离成十位和个位两段段码分别送P2、P3:

`asm
S2: MOV R1,#10
MOV A,R0
MOV B,R1
DIV AB ;A÷10,商(十位)在A,余数(个位)在B
MOVC A,@A+DPTR ;十位段码
MOV P2,A
MOV A,B
MOVC A,@A+DPTR ;个位段码
MOV P3,A
LCALL DELAY ;等1秒
INC R0
CJNE R0,#60,S2 ;到60归零
MOV R0,#00H
LJMP S1
`

DIV AB是51单片机唯一的除法指令:A除以B,商放回A、余数放B,一句就把十位个位分开了,比移位减10的土办法干净得多。段码表就是0~9的共阳段码,十位个位共用一张表。

图2 汇编程序源码

程序截图

延时的精确算法是这个程序的重点,三层循环,每层圈数固定:

层级寄存器圈数周期贡献
外层R5100100×9920
中层R62020×496
内层R7248248×2

内层DJNZ R7,$每条2个机器周期,248圈=496周期;中层套20圈=9920周期;外层100圈=992000周期。12MHz晶振下1个机器周期1微秒,合计约0.992秒≈1秒,这就是秒表的"秒"。

为什么内层用248而不是255?因为100×20×248凑出来正好接近100万周期这个整数关口,1秒的误差可以压到千分之8以内;换成255总周期数会变成102万,误差反而更大。想要更准可以外挂晶振校准,或者改用定时器中断计时。

特别注意: 仿真跑起来走时偏快,检查DELAY三层圈数是否被改动,以及晶振是不是12MHz;数码管十位个位显示反了,把P2和P3的接线对调;这个方案CPU全程困在延时循环里,实际项目建议改定时器中断版本;改了源码要重新编译生成hex再跑仿真;Proteus用7.8或8.6版本。

四、日期修改

资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。

五、资料下载

付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。

/

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:A17基于51单片机汇编语言矩阵按键控制数码管显示Proteus设计
下一篇:A19基于51单片机汇编语言独立按键计数器Proteus设计
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}