📄 keyscan.lst
字号:
A51 MACRO ASSEMBLER KEYSCAN 03/16/2006 09:08:59 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN KeyScan.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE KeyScan.Asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;==============================================================
2 ; 文件名称: KeyScan.Asm
3 ; 功能描述: 8255扩展IO, 完成键盘及数码管显示实验.
4 ; 按下按键, 数码管显示相应键值.
5 ;==============================================================
6
7F00 7 A_8255 EQU 7F00H ;8255端口定义
7F01 8 B_8255 EQU 7F01H
7F02 9 C_8255 EQU 7F02H
7F03 10 CON_8255 EQU 7F03H
11
0000 12 ORG 0000H
0000 020100 13 LJMP MAIN
0100 14 ORG 0100H
0100 755000 15 MAIN: MOV 50H,#00H ;键值缓冲
0103 755100 16 MOV 51H,#00H
0106 755200 17 MOV 52H,#00H
0109 755300 18 MOV 53H,#00H
010C 755400 19 MOV 54H,#00H
010F 755500 20 MOV 55H,#00H
0112 7D55 21 MOV R5, #55H
0114 7481 22 MOV A, #81H
0116 907F03 23 MOV DPTR, #CON_8255 ;8255控制端口
0119 F0 24 MOVX @DPTR, A ;写入控制字
011A 120191 25 BEGIN: LCALL DIS ;调用显示子程序
011D 12018A 26 LCALL CLEAR ;清屏
0120 12017C 27 LCALL CCSCAN ;调用键扫子程序
0123 7003 28 JNZ INK1 ;判是否有键按下
0125 02011A 29 LJMP BEGIN
0128 120191 30 INK1: LCALL DIS
012B 1201D1 31 LCALL DL1MS ;消除按键抖动
012E 1201D1 32 LCALL DL1MS
0131 12018A 33 LCALL CLEAR
0134 12017C 34 LCALL CCSCAN
0137 7002 35 JNZ INK2
0139 211A 36 AJMP BEGIN
37
013B 7AFE 38 INK2: MOV R2,#0FEH
013D 7C00 39 MOV R4,#00H ;从第0列开始扫描
013F 907F00 40 COLUM: MOV DPTR,#A_8255
0142 EA 41 MOV A,R2
0143 F0 42 MOVX @DPTR,A ;写入列扫描值
0144 907F02 43 MOV DPTR, #C_8255
0147 E0 44 MOVX A,@DPTR
0148 20E004 45 JB ACC.0,LINE1 ;判第0行的值
014B 7400 46 MOV A,#00H ;第0行
014D 2162 47 AJMP KCODE
014F 20E104 48 LINE1: JB ACC.1,LINE2
0152 7404 49 MOV A,#04H ;第1行
0154 2162 50 AJMP KCODE
0156 20E204 51 LINE2: JB ACC.2,LINE3
0159 7408 52 MOV A,#08H ;第2行
015B 2162 53 AJMP KCODE
015D 20E311 54 LINE3: JB ACC.3,NEXT
0160 740C 55 MOV A, #0CH ;第3行
0162 2C 56 KCODE: ADD A,R4 ;得到键值
0163 31DA 57 ACALL PUTBUF
0165 C0E0 58 PUSH ACC
A51 MACRO ASSEMBLER KEYSCAN 03/16/2006 09:08:59 PAGE 2
0167 3191 59 KON: ACALL DIS
0169 318A 60 ACALL CLEAR
016B 317C 61 ACALL CCSCAN
016D 70F8 62 JNZ KON
016F D0E0 63 POP ACC
0171 0C 64 NEXT: INC R4
0172 EA 65 MOV A,R2
0173 30E404 66 JNB ACC.4,KERR
0176 23 67 RL A
0177 FA 68 MOV R2,A
0178 213F 69 AJMP COLUM
017A 211A 70 KERR: AJMP BEGIN
017C 907F00 71 CCSCAN: MOV DPTR,#A_8255 ;按键扫描
017F 7400 72 MOV A,#00H
0181 F0 73 MOVX @DPTR,A
0182 907F02 74 MOV DPTR,#C_8255
0185 E0 75 MOVX A,@DPTR
0186 F4 76 CPL A ;取反
0187 540F 77 ANL A,#0FH
0189 22 78 RET
79
018A 907F01 80 CLEAR: MOV DPTR, #B_8255 ;清屏
018D 7400 81 MOV A,#00H
018F F0 82 MOVX @DPTR,A
0190 22 83 RET
84
0191 C0E0 85 DIS: PUSH ACC ;显示
0193 C000 86 PUSH 00H
0195 C003 87 PUSH 03H
88 ;MOV A,#0FFH
89 ;MOV DPTR,#A_8255
90 ;MOVX @DPTR,A
0197 7850 91 MOV R0,#50H
0199 7BDF 92 MOV R3,#0DFH
019B 74FF 93 AGAIN: MOV A,#0FFH
019D 907F00 94 MOV DPTR,#A_8255
01A0 F0 95 MOVX @DPTR,A
01A1 E6 96 MOV A,@R0
01A2 9001C1 97 MOV DPTR,#DSEGS
01A5 93 98 MOVC A,@A+DPTR
01A6 907F01 99 MOV DPTR,#B_8255
01A9 F0 100 MOVX @DPTR,A
01AA EB 101 MOV A,R3
01AB 907F00 102 MOV DPTR,#A_8255
01AE F0 103 MOVX @DPTR,A
01AF 31D1 104 ACALL DL1MS
01B1 08 105 INC R0
01B2 EB 106 MOV A,R3
01B3 30E004 107 JNB ACC.0,OUT
01B6 03 108 RR A
01B7 FB 109 MOV R3,A
01B8 219B 110 AJMP AGAIN
01BA D003 111 OUT: POP 03H
01BC D000 112 POP 00H
01BE D0E0 113 POP ACC
01C0 22 114 RET
115 ;数码管段显示值
01C1 3F065B4F 116 DSEGS: DB 03FH, 06H,05BH,04FH,066H,06DH,07DH, 07H
01C5 666D7D07
01C9 7F6F777C 117 DB 07FH,06FH,077H,07CH,039H,05EH,079H,071H
01CD 395E7971
118
01D1 7F01 119 DL1MS: MOV R7,#01H
01D3 7E80 120 DL0: MOV R6,#080H
01D5 DEFE 121 DL1: DJNZ R6,DL1
01D7 DFFA 122 DJNZ R7,DL0
A51 MACRO ASSEMBLER KEYSCAN 03/16/2006 09:08:59 PAGE 3
01D9 22 123 RET
124
01DA C000 125 PUTBUF: PUSH 00H ;保存键值到缓冲RAM中
01DC C0E0 126 PUSH ACC
01DE ED 127 MOV A,R5
01DF F8 128 MOV R0,A
01E0 D0E0 129 POP ACC
01E2 F6 130 MOV @R0,A
01E3 1D 131 DEC R5
01E4 BD4F02 132 CJNE R5,#04FH,GOBACK
01E7 7D55 133 MOV R5,#55H ;重置缓冲地址
01E9 D000 134 GOBACK: POP 00H
01EB 22 135 RET
136
137 END
A51 MACRO ASSEMBLER KEYSCAN 03/16/2006 09:08:59 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
AGAIN. . . . . . . C ADDR 019BH A
A_8255 . . . . . . N NUMB 7F00H A
BEGIN. . . . . . . C ADDR 011AH A
B_8255 . . . . . . N NUMB 7F01H A
CCSCAN . . . . . . C ADDR 017CH A
CLEAR. . . . . . . C ADDR 018AH A
COLUM. . . . . . . C ADDR 013FH A
CON_8255 . . . . . N NUMB 7F03H A
C_8255 . . . . . . N NUMB 7F02H A
DIS. . . . . . . . C ADDR 0191H A
DL0. . . . . . . . C ADDR 01D3H A
DL1. . . . . . . . C ADDR 01D5H A
DL1MS. . . . . . . C ADDR 01D1H A
DSEGS. . . . . . . C ADDR 01C1H A
GOBACK . . . . . . C ADDR 01E9H A
INK1 . . . . . . . C ADDR 0128H A
INK2 . . . . . . . C ADDR 013BH A
KCODE. . . . . . . C ADDR 0162H A
KERR . . . . . . . C ADDR 017AH A
KON. . . . . . . . C ADDR 0167H A
LINE1. . . . . . . C ADDR 014FH A
LINE2. . . . . . . C ADDR 0156H A
LINE3. . . . . . . C ADDR 015DH A
MAIN . . . . . . . C ADDR 0100H A
NEXT . . . . . . . C ADDR 0171H A
OUT. . . . . . . . C ADDR 01BAH A
PUTBUF . . . . . . C ADDR 01DAH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -