2×2行列式鍵盤電路設(shè)計并編寫鍵盤掃描子程序?qū)嵗?/h1>
1)2×2行列式鍵盤電路如圖所示
圖片1
(2)鍵盤掃描子程序:
KEY1: ACALL KS1 ;調(diào)用判斷有無鍵按下子程序
JNZ LK1 ;有鍵按下,轉(zhuǎn)LK1
AJMP KEY1 ;無鍵按下,返回
LK1: ACALL T12MS ;調(diào)延時12ms子程序
ACALL KS1 ;查有無鍵按下
JNZ LK2 ;若有,則為鍵確實按下,轉(zhuǎn)逐列掃描
AJMP KEY1 ;無鍵按下,返回
LK2: MOV R4,#00H ;首列號 R4
MOV R2,#FEH ;首列掃描字 R2
LK4: MOV A,R2 ;列掃描字 P1口
MOV P1,A ;使第一列線為0
MOV A,P1 ;讀入行狀態(tài)
JB ACC.0,LONE;第0行無鍵按下,轉(zhuǎn)查第一行
MOV A,#00H ;第0行有鍵按下,該行首鍵號#00H A
AJMP LKP ;轉(zhuǎn)求鍵號
LONE: JB ACC.1,NEXT ;第一行無鍵按下,轉(zhuǎn)查下一列
MOV A,#02 ;第一行有鍵按下,該行首鍵號#02 A
LKP: ADD A,R4 ;鍵號=首行號+列號
PUSH ACC ;鍵號進棧保護
LK3: ACALL KS1 ;等待鍵釋放
JNZ LK3 ;未釋放,等待
POP AC ;鍵釋放,鍵號 A
RET ;鍵掃描結(jié)束
NEXT: INC R4 ;列號加1,指向下一列
MOV A,R2 ;列掃描字 A
JNB ACC.1,KND ;判斷2列全掃描完?掃描完,轉(zhuǎn)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 ;出口狀態(tài)(A)!=0,有鍵按下