矩阵式键盘程序.docx
《矩阵式键盘程序.docx》由会员分享,可在线阅读,更多相关《矩阵式键盘程序.docx(7页珍藏版)》请在冰点文库上搜索。
![矩阵式键盘程序.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/3e765fa1-f54e-48f6-a6a3-bd8fb4a50c0d/3e765fa1-f54e-48f6-a6a3-bd8fb4a50c0d1.gif)
矩阵式键盘程序
;30H存列号31H存行号32H装键值,要改键盘的值排列可以通过改变后面TAB的值。
;程序构思,先给键盘的接入口p1赋0F0H,通过检测p1.4-p1.7那个出现低电平,举例如果是p1.4那列有键按
;下则p1.4出现低电平,则跳到y0得到列号为0,接下来分别给p1.4-p1.7赋0,看什么时候p1.4在那出现低电
;平,则可以得到行号,最终计算行号*4+列号就可以得到键盘的值,如果要修改矩阵键盘键值排列,则可以
;通过查表,计算出的前期键值只是作为一个地址。
不知表述是否清楚了
SCAN:
MOVP1,#0F0H ;键盘扫描程序
JNBP1.4,Y0 ;判断列
JNBP1.5,Y1
JNBP1.6,Y2
JNBP1.7,Y3
SJMPSCAN
Y0:
MOV30H,#00H ;赋列号
MOVP1,#0FEH
JNBP1.4,X0
MOVP1,#0FDH
JNBP1.4,X1
MOVP1,#0FBH
JNBP1.4,X2
MOVP1,#0F7H
JNBP1.4,X3
Y1:
MOV30H,#01H
MOVP1,#0FEH
JNBP1.5,X0
MOVP1,#0FDH
JNBP1.5,X1
MOVP1,#0FBH
JNBP1.5,X2
MOVP1,#0F7H
JNBP1.5,X3
Y2:
MOV30H,#02H
MOVP1,#0FEH
JNBP1.6,X0
MOVP1,#0FDH
JNBP1.6,X1
MOVP1,#0FBH
JNBP1.6,X2
MOVP1,#0F7H
JNBP1.6,X3
Y3:
MOV30H,#03H
MOVP1,#0FEH
JNBP1.7,X0
MOVP1,#0FDH
JNBP1.7,X1
MOVP1,#0FBH
JNBP1.7,X2
MOVP1,#0F7H
JNBP1.7,X3
X0:
MOV31H,#00H ;赋行号
ACALLDELAY
MOVP1,#0F0H
LJMPJISUAN
X1:
MOV31H,#01H
ACALLDELAY
MOVP1,#0F0H
LJMPJISUAN
X2:
MOV31H,#02H
ACALLDELAY
MOVP1,#0F0H
LJMPJISUAN
X3:
MOV31H,#03H
ACALLDELAY
MOVP1,#0F0H
LJMPJISUAN
JISUAN:
MOVA,31H
MOVB,#04H
MULAB
ADDA,30H
MOVDPTR,#TABLE
MOVC A,@A+DPTR
MOV32H,A
RET
delay:
MOVR4,#0C5H ;键扫延时
DEL1:
MOVR5,#43H
DEL0:
MOVR6,#10H
DJNZR6,$
DJNZR5,DEL0
DJNZR4,DEL1
RET
TABLE:
DB01H,02H,03H,04H,05H,06H,07H,08H,09H,00H,0AH,0BH,0CH,0DH,0EH,0FH ;键盘值
实验十三例程:
KEYBUFEQU30H
ORG0000H
LJMPSTART
ORG0100H
START:
movp2,#0ffh;灭灯
movP1,#0f0h
mova,p1
anla,#0f0h
xrla,#0f0h
jzstart
lcalldely10ms
mova,p1
anla,#0f0h
xrla,#0f0h
jzstart
MOVP1,#0feH;
clrP1.0
MOVA,P1
ANLA,#0F0H
CJNEA,#0e0H,NK0
MOVKEYBUF,#0
LJMPDK1
NK0:
CJNEA,#0d0H,NK1
MOVKEYBUF,#1
LJMPDK1
NK1:
CJNEA,#0b0H,NK2
MOVKEYBUF,#2
LJMPDK1
NK2:
CJNEA,#70H,NK3
MOVKEYBUF,#3
LJMPDK1
NK3:
MOVP1,#0fdH;
clrp1.1
MOVA,P1
ANLA,#0F0H
CJNEA,#0e0H,NK4
MOVKEYBUF,#4
LJMPDK1
NK4:
CJNEA,#0d0H,NK5
MOVKEYBUF,#5
LJMPDK1
NK5:
CJNEA,#0b0H,NK6
MOVKEYBUF,#6
LJMPDK1
NK6:
CJNEA,#70H,NK7
MOVKEYBUF,#7
LJMPDK1
NK7:
MOVP1,#0fbH;
clrp1.2
MOVA,P1
ANLA,#0F0H
CJNEA,#0e0H,NK8
MOVKEYBUF,#8
LJMPDK1
NK8:
CJNEA,#0d0H,NK9
MOVKEYBUF,#9
LJMPDK1
NK9:
CJNEA,#0b0H,NK10
MOVKEYBUF,#10
LJMPDK1
NK10:
CJNEA,#70H,NK11
MOVKEYBUF,#11
LJMPDK1
NK11:
MOVP1,#0f7H;
clrp1.3
MOVA,P1
ANLA,#0F0H
CJNEA,#0e0H,NK12
MOVKEYBUF,#12
LJMPDK1
NK12:
CJNEA,#0d0H,NK13
MOVKEYBUF,#13
LJMPDK1
NK13:
CJNEA,#0b0H,NK14
MOVKEYBUF,#14
LJMPDK1
NK14:
MOVKEYBUF,#15
DK1:
MOVA,KEYBUF;display
MOVDPTR,#TABLE
MOVCA,@A+DPTR
cpla
MOVP2,A
DK1A:
MOVA,P1
ANLA,#0F0H
XRLA,#0F0H
JNZDK1A
ljmpstart
DELY10MS:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
END