A20基于51单片机汇编语言按键秒表Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-14 06:13:49    阅读:14 次   消耗积分:10 分

image.png

A20基于51单片机汇编语言按键秒表Proteus设计

用51单片机汇编语言做一个带按键控制的秒表:第一次按下启动计时,第二次按下暂停,第三次按下停止归零。2位共阳数码管显示00到99秒,定时器中断计时,和A18的纯软件延时是两个技术路线。资料包含Proteus仿真文件和完整汇编源码,适合学定时器中断和三态按键控制的同学参考。

一、设计实现功能

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

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

2、使用一个独立按键检测输入,两个共阳数码管进行显示。

3、按键按下第一启动秒表,按下第二次暂停秒表,按下第三次停止秒表。

二、资源汇总

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

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

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

三、设计介绍

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

2位共阳极数码管十位段码接P0口、个位接P2口,独立按键接P1.7。和A18最大的区别:计时交给定时器0中断,CPU主程序只管按键和显示,计时精度不受主循环影响,按键响应也快。

图1 Proteus仿真总览

仿真原理图

定时器0配置成方式1(16位定时器),初值按50毫秒算:

参数值说明
工作方式TMOD=01H方式1,16位计数
计数初值65536-50000=1553612MHz下50毫秒
初值拆分TH0=3CH,TL0=0B0H15536=3CB0H
中断入口0BHLJMP INT_T0
中断允许IE=82HEA=1、ET0=1

中断里每50毫秒进一次,TCOUNT计2次凑0.1秒,SECOND加1,到99归零:

`asm
INT_T0: MOV TH0,#3CH ;重装初值
MOV TL0,#0B0H
INC TCOUNT
MOV A,TCOUNT
CJNE A,#2,I2 ;2次×50ms=100ms
MOV TCOUNT,#00H
INC SECOND
MOV A,SECOND
CJNE A,#100,I1 ;99秒归零
MOV SECOND,#00H
I1: MOV A,SECOND
MOV B,#10
DIV AB ;分离十位个位
MOVC A,@A+DPTR
MOV P0,A ;十位
MOV A,B
MOVC A,@A+DPTR
MOV P2,A ;个位
I2: RETI
`

图2 汇编程序源码

程序截图

按键的三态控制用KCOUNT计数实现,每按一次切一个状态:

按键次数动作代码
第1次启动计时SETB TR0 + IE=82H
第2次暂停计时CLR TR0 + IE=00H
第3次停止归零LJMP START,全部清零

`asm
K1: JB KEY,$ ;等待按键
LCALL DELAY ;消抖
JB KEY,$
MOV A,KCOUNT
CJNE A,#00H,K2 ;判断第几次按键
SETB TR0 ;第1次:启动
MOV IE,#82H
JNB KEY,$ ;等抬起
INC KCOUNT
LJMP K1
K2: CJNE A,#01H,K3
CLR TR0 ;第2次:暂停
MOV IE,#00H
JNB KEY,$
INC KCOUNT
LJMP K1
K3: CJNE A,#02H,K1
JNB KEY,$
LJMP START ;第3次:停止,回初始
`

暂停时CLR TR0停计数、IE清零关中断,显示值冻住不动;第三次按键直接跳回START,SECOND、TCOUNT、KCOUNT全部清零,数码管回到00,可以重新开始计时。每次按键后都有JNB KEY,$等抬起,防止一次按住连翻三个状态。

特别注意: 仿真跑起来计时不准,检查晶振是否12MHz以及初值3CB0H是否被改;按一下跳好几个状态,确认等抬起那句在位;暂停后显示值应该完全冻住,如果还在走就是中断没关干净;改了源码要重新编译生成hex再跑仿真;Proteus用7.8或8.6版本。

四、日期修改

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

五、资料下载

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

/

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