精品文档
JMP START
SCAN: MOV A,#0 ;扫描子程序 MOV R0,#20H MOV R2,#8 LOOP: MOV P2,A MOV P0,@R0 INC R0 CALL DELAY ADD A,#01H
DJNZ R2,LOOP ;循环显示8个数字 MOV R2,#8 CLR A RET
DELAY:MOV R3,#1 ;扫描延时 D1:MOV R4,#2 D2:MOV R5,#248 DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET END
实验B、矩阵键盘实验:
ORG 0000H AJMP MAIN ORG 0030H
MAIN: MOV 20H,#00H MOV 21H,#00H MOV 22H,#00H MOV 23H,#00H MOV 24H,#00H MOV 25H,#00H
MOV 26H,#00H
MOV 27H,#00H
精品文档
;初始化,清显示
精品文档
LCALL SCAN ;显示 S1: LCALL KEY
;调用键盘扫描程序,并返回键值
LCALL SCAN
JNB F0,S1
CLR F0
;显示
;有键按下继续执行,否则继续返回S1扫描 ;清标志
MOV A,3FH
/////////数码管显示程序///////////////////////////////////// SCAN: MOV A,#0 ;扫描子程序 MOV R0,#20H MOV R2,#8 LOOP: MOV P2,A MOV P0,@R0 INC R0 CALL DELAY ADD A,#01H
DJNZ R2,LOOP ;循环显示8个数字 MOV R2,#8 CLR A
精品文档
MOV A,7BH MOV 27H,A LCALL SCAN AJMP S1
;低位的码型值存于27H
MOV A,7AH MOV 26H,A
;高位的码型值存于26H
LCALL CHA_BIAO ;查表,将数字对应的码型值存于相应寄存器 LCALL ZHUAN
;将16进制的编号转换成十进制的BCD码
MOV 46H,A
;存按键的编号到46H
精品文档
RET
DELAY:MOV R3,#1 ;扫描延时 D1:MOV R4,#2 D2:MOV R5,#248 DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET
////////////////////////////////////////////////////////////
//////将46H单元中存放的十六进制数转换成十进制的BCD码并存放于7CH(最高位),7DH, 7EH(最低位)单元中//////////// ZHUAN:MOV A,46H MOV B,#0AH DIV AB MOV 7EH,B MOV B,#0AH DIV AB MOV 7DH,B MOV 7CH,A RET
////////////////////////////////////////////////////////////////
///////////////十进制数存于7CH,7DH,7EH单元中//////////////////////////////////// //////////////对应的码型存入79H,7AH,7BH单元中/////////////////////// CHA_BIAO: MOV R3,#03H MOV R0,#7CH MOV R1,#79H C1: MOV A,@R0 MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV @R1,A INC R0 INC R1 DJNZ R3,C1 RET
//////////////////////////////////////////////////////////////////////////////////
精品文档
;查表,将码型存入79H,7AH,7BH
精品文档
TAB1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
///////键盘扫描程序/////////////////////////////////////////
KEY: MOV P3,#0FFH ;要先给P2口输出FF,再回读 MOV P3,#0F0H MOV A,P3 ORL A,#0FH
CJNE A,#0FFH,K1 ;有键按下,调至K1处执行
K1:
K2:
M1:
M2:
M3:
M4:
精品文档
AJMP EXIT ;否则继续扫描
LCALL DELAY_10 ;延时10ms去抖动 MOV P3,#0F0H MOV A,P3 ORL A,#0FH
CJNE A,#0FFH,K2 ;若确实有键按下,跳之K2 AJMP EXIT ;否则继续扫描
ANL A,#0F0H
MOV R0,A ;R0存列值 MOV P3,#0FH ;行扫描 MOV A,P3
ORL A,R0 ; 键值存R0 MOV R0,A
CJNE R0,#7EH,M1 MOV 3FH,#1 AJMP OUT
CJNE R0,#7DH,M2 MOV 3FH,#2 AJMP OUT
CJNE R0,#7BH,M3 MOV 3FH,#3 AJMP OUT
CJNE R0,#77H,M4 MOV 3FH,#4 AJMP OUT
CJNE R0,#0BEH,M5 MOV 3FH,#5
精品文档
AJMP OUT M5: CJNE R0,#0BDH,M6
MOV 3FH,#6 AJMP OUT
M6: CJNE R0,#0BBH,M7
MOV 3FH,#7 AJMP OUT
M7: CJNE R0,#0B7H,M8
MOV 3FH,#8 AJMP OUT
M8: CJNE R0,#0DEH,M9
MOV 3FH,#9 AJMP OUT
M9: CJNE R0,#0DDH,M10
MOV 3FH,#10 AJMP OUT
M10: CJNE R0,#0DBH,M11
MOV 3FH,#11 AJMP OUT
M11: CJNE R0,#0D7H,M12
MOV 3FH,#12 AJMP OUT
M12: CJNE R0,#0EEH,M13
MOV 3FH,#13 AJMP OUT
M13: CJNE R0,#0EDH,M14
MOV 3FH,#14 AJMP OUT
M14: CJNE R0,#0EBH,M15
MOV 3FH,#15 AJMP OUT
M15: CJNE R0,#0E7H,OUT
MOV 3FH,#16
OUT: SETB F0 EXIT: RET
精品文档