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

image.png

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

用51单片机汇编语言做第二个矩阵按键方案:4×4矩阵按键接P1口,用逐行扫描法识别按键,段码经P2口直接驱动数码管,按下哪个键就显示对应的键值0到F。和A16的键码比对法思路不同,这篇用的是行号列号算法,代码更直观。资料包含Proteus仿真文件和完整汇编源码。

一、设计实现功能

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

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

2、要求可以检测4X4矩阵按键的数值,并通过数码管显示按键数值。

二、资源汇总

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

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

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

三、设计介绍

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

同样是4×4矩阵,A16用键码比对,这篇用逐行扫描+行号列号计算,是矩阵键盘的另一种经典写法。P1.0~P1.3接4根行线,P1.4~P1.7接4根列线,段码由P2口直接送数码管,不用串转并芯片,硬件更简单。

图1 Proteus仿真总览

仿真原理图

扫描分两轮,思路是把行和列分开确认:

第一轮逐行扫描——P1写0F0H(列线全置高、行线全置低),然后从P1.0开始逐位判断哪一行被拉低:

`asm
LSCAN: MOV P1,#0F0H
L1: JNB P1.0,L2 ;P1.0不是低电平,试下一行
LCALL DELAY ;消抖
JNB P1.0,L2
MOV LINE,#00H ;记下第0行
LJMP RSCAN
L2: JNB P1.1,L3
LCALL DELAY
JNB P1.1,L3
MOV LINE,#01H ;第1行
LJMP RSCAN
…(L3、L4同理,直到第3行)
`

第二轮逐列扫描——P1写0FH(行线全置高、列线全置低,电平互换),从P1.4开始判断哪一列被拉低,记下列号ROW。

图2 汇编程序源码

程序截图

拿到行号和列号,一句乘法加一句加法算出键值:

`asm
CALCU: MOV A,LINE ;行号
MOV B,#04H
MUL AB ;行号×4
ADD A,ROW ;加列号=键值
MOV VAL,A
`

键值=行号×4+列号,分布非常规整:

键值第0列第1列第2列第3列
第0行0123
第1行4567
第2行891011
第3行12131415

再用MOVC A,@A+DPTR拿键值查TABLE段码表,直接MOV P2,A输出,数码管亮出对应数字。表里16个段码依次是0~9、A~F的共阳段码,和A16的表内容一致。

特别注意: 仿真跑起来行扫描卡住不动,检查行线是否漏接上拉;两次扫描之间一定要重新写P1口切换电平方向,否则读不准;消抖延时约10毫秒;改了源码要重新编译生成hex再跑仿真;Proteus用7.8或8.6版本。

四、日期修改

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

五、资料下载

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

/

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