1)2×2行列式鍵盤電路如圖所示////////
圖片1
(2)鍵盤掃描子程序:
KEY1:ACALLKS1;調(diào)用判斷有無鍵按下子程序
JNZLK1;有鍵按下,轉(zhuǎn)LK1
AJMPKEY1;無鍵按下,返回
LK1:ACALLT12MS;調(diào)延時12ms子程序
ACALLKS1;查有無鍵按下
JNZLK2;若有,則為鍵確實按下,轉(zhuǎn)逐列掃描
AJMPKEY1;無鍵按下,返回
LK2:MOVR4,#00H;首列號R4
MOVR2,#FEH;首列掃描字R2
LK4:MOVA,R2;列掃描字P1口
MOVP1,A;使第一列線為0
MOVA,P1;讀入行狀態(tài)
JBACC.0,LONE;第0行無鍵按下,轉(zhuǎn)查第一行
MOVA,#00H;第0行有鍵按下,該行首鍵號#00HA
AJMPLKP;轉(zhuǎn)求鍵號
LONE:JBACC.1,NEXT;第一行無鍵按下,轉(zhuǎn)查下一列
MOVA,#02;第一行有鍵按下,該行首鍵號#02A
LKP:ADDA,R4;鍵號=首行號+列號
PUSHACC;鍵號進棧保護
LK3:ACALLKS1;等待鍵釋放
JNZLK3;未釋放,等待
POPAC;鍵釋放,鍵號A
RET;鍵掃描結(jié)束
NEXT:INCR4;列號加1,指向下一列
MOVA,R2;列掃描字A
JNBACC.1,KND;判斷2列全掃描完?掃描完,轉(zhuǎn)KND
RLA;沒掃描完,掃描字左移一位,形成下一列掃描字
MOVR2,A;掃描字R2
AJMPLK4;掃描下一列
AJMPKEY1;全掃描完,返回
MOVA,#FCH;全掃描字11111100BA
MOVP1,A;全掃描字所有行
MOVA,P1;讀取列值
CPLA;取正邏輯,高電平表示有鍵按下
ANLA,#0C0H;屏蔽低6位,取高2位
RET;出口狀態(tài)(A)!=0,有鍵按下





