case 0xFB:KEY3();break; case 0XF7:KEY4();break; case 0xEF:KEY5();break; case 0xDF:KEY6();break; case 0xBF:KEY7();break; case 0x7F:KEY8();break; } } } } }
void delay_15ms() {
unsigned char a,b,c; for(c=3;c>0;c--) for(b=212;b>0;b--) }
void KEY1() { P3=0xF9; }
void KEY2() { P3=0xA4; }
void KEY3() { P3=0xB0; }
void KEY4()
for(a=140;a>0;a--);
{ P3=0x99; }
void KEY5() { P3=0x92; }
void KEY6() { P3=0x82; }
void KEY7() { P3=0xF8; }
void KEY8() { P3=0x80; }
11-10 4×4矩阵键盘与单片机的连接如图11-47所示,编写程序,使不同按键按下时在数码管上能显示该键编号的十六进制码。
图11-47 习题11-10电路
汇编语言:
K_CODE EQU 30H S_CODE EQU 31H C_CODE EQU 32H
ORG 0000H LJMP MAIN ORG 100H MAIN: MOV SP,#0AFH START:LCALL KEY
MOV A,K_CODE CJNE A,#0FFH,KEY_T LJMP START
KEY_T: RL A
ADD A,K_CODE MOV DPTR,#KEY_TAB JMP @A+DPTR
KEY_TAB: LJMP KEY0
LJMP KEY1 LJMP KEY2
LJMP KEY3 LJMP KEY4
LJMP KEY5 LJMP KEY6
LJMP KEY7 LJMP KEY8 LJMP KEY9
LJMP KEY10 LJMP KEY11
LJMP KEY12 LJMP KEY13
LJMP KEY14 LJMP KEY15
KEY:
MOV K_CODE,#0FFH MOV R0,#00H MOV P1,#0FH LCALL DELAY_1us MOV A,P1 ANL A,#0FH CJNE A,#0FH,KEY_1 RET
KEY_1: LCALL DELAY_15ms
MOV C_CODE,#0EFH
COLUWN: MOV P1,C_CODE
MOV A,C_CODE RL A
MOV C_CODE,A MOV A,P1
ANL A,#0FH CJNE A,#0FH,KEY_2 INC R0
CJNE R0,#4,COLUWN RET
KEY_2: CJNE A,#0EH,K1
MOV S_CODE,#00 SJMP RESULT CJNE A,#0DH,K2 MOV S_CODE,#01H SJMP RESULT CJNE A,#0BH,K3 MOV S_CODE,#02 SJMP RESULT CJNE A,#07H,LEND MOV S_CODE,#03
K1:
K2:
K3:
RESULT: MOV A,S_CODE
RL A RL A ADD A,R0 MOV K_CODE,A
LEND: RET DELAY_15ms:…….;略
RET
DELAY_1us:……….;略
RET
KEY0:MOV P3,#0C0H
LJMP START
KEY1:MOV P3,#0F9H
LJMP START
KEY2:MOV P3,#0A4H