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位
【2×2行列式键盘电路设计并编写键盘扫描子程序实例】RET ;出口状态(A)!=0,有键按下

    推荐阅读