;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:MOV P1,#0F0H ;键盘扫描程序 JNB P1.4,Y0 ;判断列 JNB P1.5,Y1 JNB P1.6,Y2 JNB P1.7,Y3 SJMP SCANY0:MOV 30H,#00H ;赋列号 MOV P1,#0FEH JNB P1.4,X0 MOV P1,#0FDH JNB P1.4,X1 MOV P1,#0FBH JNB P1.4,X2 MOV P1,#0F7H JNB P1.4,X3Y1:MOV 30H,#01H MOV P1,#0FEH JNB P1.5,X0 MOV P1,#0FDH JNB P1.5,X1 MOV P1,#0FBH JNB P1.5,X2 MOV P1,#0F7H JNB P1.5,X3Y2:MOV 30H,#02H MOV P1,#0FEH JNB P1.6,X0 MOV P1,#0FDH JNB P1.6,X1 MOV P1,#0FBH JNB P1.6,X2 MOV P1,#0F7H JNB P1.6,X3Y3:MOV 30H,#03H MOV P1,#0FEH JNB P1.7,X0 MOV P1,#0FDH JNB P1.7,X1 MOV P1,#0FBH JNB P1.7,X2 MOV P1,#0F7H JNB P1.7,X3X0:MOV 31H,#00H ;赋行号 ACALL DELAY MOV P1,#0F0H LJMP JISUANX1:MOV 31H,#01H ACALL DELAY MOV P1,#0F0H LJMP JISUANX2:MOV 31H,#02H ACALL DELAY MOV P1,#0F0H LJMP JISUANX3:MOV 31H,#03H ACALL DELAY MOV P1,#0F0H LJMP JISUANJISUAN:MOV A,31H MOV B,#04H MUL AB ADD A,30H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV 32H,A RET delay:MOV R4,#0C5H ;键扫延时DEL1:MOV R5,#43HDEL0:MOV R6,#10HDJNZ R6,$DJNZ R5,DEL0DJNZ R4,DEL1RETTABLE:DB 01H,02H,03H,04H,05H,06H,07H,08H,09H,00H,0AH,0BH,0CH,0DH,0EH,0FH ;键盘值