|
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV P2,#0F0H ;给列送高电平
LCALL Delay ;延时,使电路稳定
MOV A,P2 ;取P2口的值
ANL A,#0F0H ;屏蔽行线的影响
CJNE A,#0F0H,l ;如果有键按下,就跳转到l
AJMP MAIN
l: LCALL Delay ;延时去抖
MOV A,P2 ;重新取值
JB ACC.4,l1 ;P2.4这一列有键按下?没有则跳转至l1
MOV R3,#00H ;如果有则将值0存入R3
AJMP Q1 ;跳到行判断程序
l1: JB ACC.5,l2
MOV R3,#01H
AJMP Q1
l2: JB ACC.6,l3
MOV R3,#02H
AJMP Q1
l3: JB ACC.7,MAIN
MOV R3,#03H
AJMP Q1
Q1: MOV P2,#0FH ;给行送高电平
LCALL Delay ;延时,稳定电路
MOV A,P2 ;取值
ANL A,#0FH ;屏蔽高四位
JB ACC.0,Q2 ;判断是不是第0行,不是则转
MOV R4,#00H ;如果是,则将0送给R4
AJMP JIA ;调用加法程序,取得键盘的值
Q2: JB ACC.1,Q3
MOV R4,#04H
AJMP JIA
Q3: JB ACC.2,Q4
MOV R4,#08H
AJMP JIA
Q4: JB ACC.3, MAIN
MOV R4,#0CH
AJMP JIA
JIA: MOV A,R3 ;行号加上列号就是该键的值
ADD A,R4
DA A ;十六进制调整为十进制
MOV P1,A ;调整后送给数码管显示(静态显示)
AJMP MAIN
Delay: MOV R6,#20H
Q6: MOV R5,#0BBH
Q5: DJNZ R5,Q5
DJNZ R6,Q6
RET
END
|
|