要求:
利用4x4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管的显示键盘按下键的键号。共有4x4个按键和一个数码管,16个按键的键号分别对应十六进制数字:0~F。单机相应按键,数码管就会显示相应的数字。
电路原理图
数码管:这里采用共阳极数码管
CA为共阳极数码管
CC为共阴级数码管
矩阵键盘扫描步骤:
示范程序:
ORG 0000H
AJMP KEY2
ORG 0100H
KEY2: LCALL KS ;调用键盘检测走程序KS;调用键盘检测子程序KS,如有键按下A中内容非0
JNZ K1 ;A中内容非0,则可能键按下,跳K1
LCALL D10ms ;调用10ms延时去抖
AJMP KEY2 ;无键按下,返回KEY2处继续检测按键是否按下
K1: LCALL D10m ;可能有键按下,调用延时10ms子程序(见例5-8)去抖动,
JNZ K2 ;再调用键盘检测子程序
AJMP KEY2 ;无键按下返回继续检测
K2: MOV R2,#0EFH ;将列扫描值P1.4为“0”送入R2暂存
MOV R4,#00H ;将第0列号送入R4 (列号计数器)暂存
K3: MOV P1,R2 ;将R2的列扫描值值送P1口,驱动P1.4为低
L6: JB P1.0,L1 ;判行线电平,P1.0等于1,则0行无键按下跳L1,检测1行
MOV A,#00H ;将0行的首键号送入ACC
AJMP LK ;跳转到键号计算程序
L1: JB P1.1,L2 ;P1.1等于1跳转到L2,检测2行
MOV A,#04H ;将1行的首键号送入ACC
AJMP LK ;跳转到键号计算程序
L2: JB P1.2,L3 ;P1.2等于1跳转到L3,检测3行
MOV A,#08H ;将2行的首键号送入ACC
AJMP LK ;跳转到键号计算程序
L3: JB P1.3,NEXT ;P1.3等于1跳转到NEXT处,为扫描下一列做准备
MOV A,#0CH ;将3行的首键号送入ACC
LK: ADD A,R4 ;行值与列值相加后的键值送入A
PUSH ACC ;将A中的键号送入堆栈暂存
LCALL DISPLAY
NEXT: INC R4 ;将R2的列扫描值送入A
MOV A,R2
JNB ACC.7,KEY2
RL A
MOV R2,A
AJMP K3
K4: LCALL KS
JNZ K4
POP ACC
RET
KS: MOV P1,#0FH
MOV A,P1
XRL A,#0FH
RET
DISPLAY: MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,88H
DB 83H,0C6H,0A1H,86H
DB 8EH
D10ms: MOV R7,#25
D1: MOV R6,#200
DJNZ R6,$
DJNZ R7,D1
RET
END
效果图:
主要是矩阵键盘的扫描过程。知道如何去判断矩阵式键盘是否有键按下有键按下之后在判断是哪一个键被按下,并输出显示。
1、行扫描,全部输出零,读列线状态,若列线读入为零,代表有键按下。
2、判断哪个按键被按下,逐行输出零,依次读列线状态,如:i 行 j 列。
3、给按键赋值:按键有两种赋值方式:一种是直接赋值,另一种是顺序赋值。文章来源:https://www.toymoban.com/news/detail-508044.html
4、提取按键值后,行线送出低电平,读入列线电平状态。若列线全为高电平,就表示按键已被释放。文章来源地址https://www.toymoban.com/news/detail-508044.html
到了这里,关于汇编语言:矩阵式键盘扫描实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!