2×2行列式键盘电路设计并编写键盘扫描子程序实例
扫描二维码
随时随地手机看文章
1)2×2行列式键盘电路如图所示
图片1
(2)键盘扫描子程序:
KEY1: ACALL KS1 ;调用判断有无键按下子程序
JNZ LK1 ;有键按下,转LK1
AJMP KEY1 ;无键按下,返回
LK1: ACALL T12MS ;调延时12ms子程序
ACALL KS1 ;查有无键按下
JNZ LK2 ;若有,则为键确实按下,转逐列扫描
AJMP KEY1 ;无键按下,返回
LK2: MOV R4,#00H ;首列号 R4
MOV R2,#FEH ;首列扫描字 R2
LK4: MOV A,R2 ;列扫描字 P1口
MOV P1,A ;使第一列线为0
MOV A,P1 ;读入行状态
JB ACC.0,LONE;第0行无键按下,转查第一行
MOV A,#00H ;第0行有键按下,该行首键号#00H A
AJMP LKP ;转求键号
LONE: JB ACC.1,NEXT ;第一行无键按下,转查下一列
MOV A,#02 ;第一行有键按下,该行首键号#02 A
LKP: ADD A,R4 ;键号=首行号+列号
PUSH ACC ;键号进栈保护
LK3: ACALL KS1 ;等待键释放
JNZ LK3 ;未释放,等待
POP AC ;键释放,键号 A
RET ;键扫描结束
NEXT: INC R4 ;列号加1,指向下一列
MOV A,R2 ;列扫描字 A
JNB ACC.1,KND ;判断2列全扫描完?扫描完,转KND
RL A ;没扫描完,扫描字左移一位,形成下一列扫描字
MOV R2,A ;扫描字 R2
AJMP LK4 ;扫描下一列
AJMP KEY1 ;全扫描完,返回
MOV A,#FCH ;全扫描字11111100B A
MOV P1,A ;全扫描字 所有行
MOV A,P1 ;读取列值
CPL A ;取正逻辑,高电平表示有键按下
ANL A,#0C0H ;屏蔽低6位,取高2位
RET ;出口状态(A)!=0,有键按下