A12基于51单片机汇编语言按键控制数码管显示Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-14 05:55:21    阅读:14 次   消耗积分:5 分

image.png

A12基于51单片机汇编语言按键控制数码管显示Proteus设计

用51单片机汇编语言做一个按键控制数码管:按键按下,2位数码管从右向左滚动显示"12345";按键弹起,改为滚动显示"HELLO"。资料包含Proteus仿真文件和完整汇编源码,适合学汇编动态显示和按键检测的同学参考。

一、设计实现功能

本设计功能简介:使用51单片机和汇编语言设计一个按键控制数码管显示的proteus仿真,要求以下功能:

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

2、使用1个独立按键控制数码管的显示方式。

3、要求按键按下数码管从右向左滚动显示"12345",当按键弹起的时候数码管从右向左滚动显示"HELLO"。

二、资源汇总

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

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

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

三、设计介绍

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

硬件用2位共阳极数码管,P2口送段码,P3.2和P3.3分别控制两位的公共端(高电平亮),按键接在P3.7(按下为低电平)。2位显示用动态扫描:同一时刻只有一位点亮,高速轮流切换,利用人眼余晖看起来两位都亮着。

图1 Proteus仿真总览

仿真原理图

程序一开始先判断按键电平,决定用哪张段码表:

按键状态选用表显示内容FLAG
按下(低电平)TABLE11 2 3 4 50
弹起(高电平)TABLE2H E L L O1

两张段码表都是共阳段码(0和1互换,低电平点亮):

字符TABLE1段码TABLE2段码
106H-
25BH-
34FH-
466H-
56DH-
H-76H
E-79H
L-38H
O-3FH

表首和表尾都补了00H作为缓冲,滚动时字符从右侧进入、左侧移出,不会出现半亮字符。

图2 汇编程序源码

程序截图

滚动核心是两个偏移地址R0和R1,分别指向高位和低位的字符:

`asm
MOV R0,#00H ;高位字符偏移
MOV R1,#01H ;低位字符偏移
K1: MOV R7,#100 ;每屏动态扫描100轮
L1: SETB LB ;关低位
CLR HB ;开高位
MOV A,R0
MOVC A,@A+DPTR ;查高位段码
MOV P2,A
LCALL DELAY
SETB HB ;关高位
CLR LB ;开低位
MOV A,R1
MOVC A,@A+DPTR ;查低位段码
MOV P2,A
LCALL DELAY
DJNZ R7,L1 ;100轮后整体左移一格
INC R0
INC R1
CJNE R0,#06H,K1 ;滚完5个字符回初始
`

每扫完100轮(约125毫秒)两个偏移各加1,显示内容就向左滚动一格;R0加到06H说明5个字符滚完,LJMP START重新判断按键状态。扫描中途还嵌了一次按键电平复核:按键状态变了立刻跳回START换表,保证松手/按下后切换很快。

延时子程序R5=5、R6=250两层循环,约1.25毫秒,决定每一位的点亮时长,也就是动态扫描的占空比。

特别注意: 仿真跑起来数码管乱跳或者亮度不均,检查数码管是否是共阳极;按键检测带消抖,直接短接P3.7测试时按住停一会再松;改了源码要重新编译生成hex再跑仿真;Proteus用7.8或8.6版本。

四、日期修改

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

五、资料下载

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

/

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:A11基于51单片机汇编语言LED循环显示Proteus设计
下一篇:A13基于51单片机汇编语言8X8点阵流水灯Proteus设计
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}