
A19基于51单片机汇编语言独立按键计数器Proteus设计
用51单片机汇编语言做一个独立按键计数器:每按一次按键计数加1,2位数码管实时显示按键次数,从00计到99后自动归零。资料包含Proteus仿真文件和完整汇编源码,适合学按键计数和两位数分离显示的同学参考。
一、设计实现功能
本设计功能简介:使用51单片机和汇编语言设计一个独立按键计数器的proteus仿真,要求以下功能:
1、使用汇编语言编写程序。
2、要求检测1位独立按键,并通过2位数码管显示按键的次数。
二、资源汇总
1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。
2、程序文件:main.asm汇编源码,以及编译好的cx.hex。
3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。
三、设计介绍
拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。
2位共阳极数码管的十位段码接P0口、个位段码接P2口,独立按键接P1.7(按下为低电平)。程序上电后两位显示00,每按一次键,十位个位同步刷新。
图1 Proteus仿真总览

主循环结构是一个"加1—等按键—分离显示—等抬起"的四步循环:
`asm
S1: INC R0 ;计数值加1
CJNE R0,#100,S2 ;到100归零
MOV R0,#00H
S2: JB P1.7,$ ;等待按键按下
LCALL DELAY ;消抖10毫秒
JB P1.7,S2 ;再确认,不是真按下就当干扰
S3: MOV A,R0
MOV B,#10
DIV AB ;分离十位和个位
MOVC A,@A+DPTR ;十位段码送P0
MOV A,B
MOVC A,@A+DPTR ;个位段码送P2
JB P1.7,S1 ;等待按键抬起后才加下一次数
LJMP S3`
图2 汇编程序源码

几个设计细节值得注意:
1、INC在等按键之前:进入S1先把R0加1再进显示循环,保证上电后第一次按键就从01开始而不是从00再跳到01,显示和实际按键次数严格对齐。
2、消抖两次判断:JB P1.7,$等到低电平后调10毫秒延时,再看一次还是低电平才算有效按下,滤掉按键触点的机械抖动。
3、等抬起才放行:JB P1.7,S1这句是防重复计数的关键——按键不抬起就一直停在S3循环刷新显示,抬起来瞬间才回S1加下一次。没有这句,按住一秒能跳几十个数。
4、 计数到100归零:CJNE R0,#100判断,两位数码管最多显示99,到100清零重新开始,和设计要求一致。
段码表是0~9共阳段码,十位个位共用,MOVC按A的值取对应段码。
特别注意: 仿真跑起来按住按键数字狂跳,检查JB P1.7,S1等抬起那句是否漏了;显示00不变,看按键接线是否接到P1.7且另一端接地;十位个位接反了把P0和P2线对调;改了源码要重新编译生成hex再跑仿真;Proteus用7.8或8.6版本。
四、日期修改
资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。
五、资料下载
付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。
/

