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

image.png

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

用51单片机汇编语言做一个4×4矩阵按键数码管显示器:16个按键只用8个IO口,按下矩阵里任意一个键,数码管就显示对应的键值0到F。资料包含Proteus仿真文件和完整汇编源码,适合学矩阵键盘扫描和键码合成的同学参考。

一、设计实现功能

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

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

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

二、资源汇总

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

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

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

三、设计介绍

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

4×4矩阵按键把16个按键排成4行4列的矩阵,行线和列线交叉点上接一个按键,8根线就能识别16个键,比独立按键省一半IO口。P1口高4位接列线、低4位接行线,数码管段码还是经74HC595串行驱动(P3.0送数据、P3.1送时钟)。

图1 Proteus仿真总览

仿真原理图

矩阵扫描分两步:先读列、再读行,两个半字节合成一个完整键码。

`asm
KEY1: MOV P1,#0F0H ;列线写1、行线写0
MOV A,P1
CJNE A,#0F0H,K11 ;高4位有0=有键按下
K10: AJMP KEY1
K11: ACALL DELAY ;消抖
MOV P1,#0F0H
MOV A,P1
CJNE A,0F0H,K12 ;再读一次确认
SJMP K10
K12: MOV B,A ;存列值(高4位)
MOV P1,#0FH ;行线写1、列线写0,电平互换
MOV A,P1
ANL A,B ;列值+行值合成键码
MOV B,A
`

合成后的键码长这样:高4位是列号特征位,低4位是行号特征位,比如第1列第1行是81H,第4列第4行是18H。键码表K1TAB按行优先存了全部16个组合:

键码键值键码键值键码键值键码键值
81H082H484H888H12
41H142H544H948H13
21H222H624H1028H14
11H312H714H1118H15

程序用MOVC逐个取表项和实测键码CJNE比较,相等时R2就是键值,拿它去查SEGTAB段码表,0到F都有。

图2 汇编程序源码

程序截图

段码表比A15多了5个字符段码(77H、7CH、58H、5EH、79H、71H等),除了0~9和A~F还能显示一些常用符号,日常做计算器小键盘正好够用。串行输出部分和A15完全一样:RLC A把段码最高位移进进位位,经P3.0送595的DS端,P3.1给上升沿,8次一位字节送完。

等按键释放单独做了处理:确认键值后先把P1写成0FH再循环读,等4位全部回1才返回,防止按住不放时连续触发。

特别注意: 仿真跑起来按一个键显示的值不对,先看键码表顺序和仿真里按键的物理排列是否一致;矩阵按键建议在Proteus里选带按键帽的元件;消抖和等释放两段循环都不能少;改了源码要重新编译生成hex再跑仿真;Proteus用7.8或8.6版本。

四、日期修改

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

五、资料下载

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

/

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