A15基于51单片机汇编语言独立按键控制数码管显示Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-14 06:01:33    阅读:15 次   消耗积分:5 分

image.png

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

用51单片机汇编语言做一个8按键数码管显示器:8个独立按键接在P1口,按下哪个键,数码管就显示对应的键值0到7。资料包含Proteus仿真文件和完整汇编源码,适合学按键识别和74HC595串行驱动的同学参考。

一、设计实现功能

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

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

2、要求可以检测8个按键的数值,并通过数码管显示按键数值。

二、资源汇总

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

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

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

三、设计介绍

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

8个按键一端接P1口、一端接地,按下时对应位变低。数码管的段码不直接接单片机,而是经过一片74HC595串转并芯片:单片机用P3.0送数据、P3.1送时钟,一个字节移进595,595再驱动数码管8个段。这样只占2个IO口就能驱8个段,是扩展IO的常用手法。

图1 Proteus仿真总览

仿真原理图

按键识别用查表比较法。P1口"先写1再读"是51单片机的规范动作(读之前必须先往口里写全1,否则读回的值不准),读到不是0FFH说明有键按下,再和键码表逐个比对:

按键P1读回值对应键值
K10FEH0
K20FDH1
K30FBH2
K40F7H3
K50EFH4
K60DFH5
K70BFH6
K807H7

键值=表的下标,直接用MOVC A,@A+DPTR查段码表就能取到0~7的段码。比对命中后还要等按键抬起(CJNE A,#0FFH循环),防止一次按住显示乱跳。

图2 汇编程序源码

程序截图

串行移出8位段码是这段代码的精华,用带进位位移凑数据:

`asm
DP12: MOV R2,#8 ;移位8次
MOV A,@R0 ;取段码
DP13: RLC A ;最高位移进进位位C
MOV DIN,C ;数据位送595
CLR CLK ;产生一个上升沿
SETB CLK
DJNZ R2,DP13
`

RLC A把段码的最高位转进进位位,再从P3.0送给595的DS端;CLK先清后置给一个上升沿,595锁入这一位。重复8次,一个字节就从最低位到最高位依次送完,最后一段显示程序送出一位锁存信号,数码管亮出对应数字。

段码表SEGTAB收了16个段码,0~7直接对应8个按键,0F8H往后的留给以后扩展。

特别注意: 仿真跑起来按键没反应,检查按键是否接了上拉或依赖P1口内部弱上拉;数码管显示缺段,检查595的时钟沿是否每个数据位都给了;消抖延时约2×248×2个周期,有特殊需要可以加长;改了源码要重新编译生成hex再跑仿真;Proteus用7.8或8.6版本。

四、日期修改

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

五、资料下载

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

/

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