📄 ex9-7.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: EX9-7.ASM
Object File: EX9-7.HEX
List File: EX9-7.LST
Line I Addr Code Source
1: N 0040 KD EQU 40H ;键值单元
2: N 0041 ST EQU 41H ;状态单元
3: N 0000 ORG 0000H ;复位入口
4: 0000 02 00 30 LJMP MAIN
5: N 0030 ORG 0030H
6: 0030 75 81 50 MAIN: MOV SP, #50H
7: 0033 75 7A 11 MOV 7AH,#11H
8: 0036 75 7B 10 MOV 7BH,#10H
9: 0039 75 7C 10 MOV 7CH,#10H
10: 003C 75 7D 12 MOV 7DH,#12H
11: 003F 75 7E 10 MOV 7EH,#10H
12: 0042 75 7F 10 MOV 7FH,#10H
13: 0045 75 41 00 MOV ST, #00H
14: 0048 75 40 00 MOV KD, #00H
15: 004B 90 7F 00 MOV DPTR,#7F00H ;8155命令口地址
16: 004E 74 03 MOV A,#03H ;置8155PA、PB口为输出,PC口为输入
17: 0050 F0 MOVX @DPTR,A
18: 0051 00 ML0: NOP
19: 0052 12 01 C9 LCALL DISP
20: 0055 12 00 5A LCALL READKEY ;调读键值程序
21: 0058 80 F7 SJMP ML0 ;无键按下,循环等待
22: 005A 12 01 68 READKEY:LCALL KEY ;调按键识别程序
23: 005D EC MOV A, R4 ;得到键值在A中
24: 005E B4 88 01 CJNE A,#88H,KLD ;有键按下,转到键值分析
25: 0061 22 RET
26: 0062 F5 40 KLD: MOV KD, A ;将键值存于KD单元
27: 0064 E5 41 KDD0: MOV A, ST ;读状态子表入口地址→DPTR
28: 0066 23 RL A
29: 0067 C0 E0 PUSH ACC
30: 0069 90 00 C6 MOV DPTR, #TBB1
31: 006C 93 MOVC A, @A+DPTR
32: 006D F5 F0 MOV B, A
33: 006F D0 E0 POP ACC
34: 0071 04 INC A
35: 0072 93 MOVC A, @A+DPTR
36: 0073 F5 82 MOV DPL, A
37: 0075 85 F0 83 MOV DPH, B
38: 0078 E4 CTT: CLR A
39: 0079 93 MOVC A, @A+DPTR ;读判定码
40: 007A B5 40 02 CJNE A, KD, NEE ;功能键判定
41: 007D 80 12 SJMP QEE ;是功能键
42: 007F B4 FF 02 NEE: CJNE A, #0FFH, NCC ;未用键判定
43: 0082 80 0D SJMP QEE ;是未用键
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 0084 B4 09 05 NCC: CJNE A, #09H, NNN ;数字键判定
45: 0087 B5 40 00 CJNE A, KD, NPP
46: 008A 50 05 NPP: JNC QEE ;是数字键
47: 008C A3 NNN: INC DPTR ;条目不符
48: 008D A3 INC DPTR
49: 008E A3 INC DPTR
50: 008F 80 E7 SJMP CTT ;返回,继续读键值并判定
51: 0091 E4 QEE: CLR A ;判定符合
52: 0092 A3 INC DPTR
53: 0093 93 MOVC A, @A+DPTR ;读次态码→ST
54: 0094 F5 41 MOV ST, A
55: 0096 60 CC JZ KDD0 ;若为0态,返回KDD0重新进行
56: 0098 E4 CLR A
57: 0099 A3 INC DPTR
58: 009A 93 MOVC A, @A+DPTR ;读子程序号
59: 009B 90 00 A2 MOV DPTR, #SUBJ
60: 009E F8 MOV R0,A
61: 009F 23 RL A
62: 00A0 28 ADD A,R0
63: 00A1 73 JMP @A+DPTR ;散转到子程序入口
64: 00A2 02 01 14 SUBJ: LJMP SUB0 ;转移到不同的子程序
65: 00A5 02 01 1B LJMP SUB1
66: 00A8 02 01 22 LJMP SUB2
67: 00AB 02 01 29 LJMP SUB3
68: 00AE 02 01 30 LJMP SUB4
69: 00B1 02 01 37 LJMP SUB5
70: 00B4 02 01 3E LJMP SUB6
71: 00B7 02 01 45 LJMP SUB7
72: 00BA 02 01 4C LJMP SUB8
73: 00BD 02 01 53 LJMP SUB9
74: 00C0 02 01 5A LJMP SUB10
75: 00C3 02 01 61 LJMP SUB11
76: 00C6 00 D2 TBB1: DW TB20 ;状态子表入口地址索引表
77: 00C8 00 EA DW TB21
78: 00CA 00 F9 DW TB22
79: 00CC 01 02 DW TB23
80: 00CE 01 0B DW TB24
81: 00D0 01 11 DW TB25
82: 00D2 0B 05 01 TB20: DB 0BH,5,1 ;0状态子表
83: 00D5 0C 05 02 DB 0CH,5,2
84: 00D8 0D 05 03 DB 0DH,5,3
85: 00DB 0E 05 04 DB 0EH,5,4
86: 00DE 0F 01 00 DB 0FH,1,0
87: 00E1 10 02 00 DB 10H,2,0
88: 00E4 11 05 05 DB 11H,5,5
89: 00E7 FF 05 00 DB 0FFH,5,0
90: 00EA 09 01 07 TB21: DB 09,1,7 ;1状态子表
91: 00ED 12 01 08 DB 12H,1,8
92: 00F0 0F 03 00 DB 0FH,3,0
93: 00F3 13 05 06 DB 13H,5,6
94: 00F6 FF 00 00 DB 0FFH,0,0
95: 00F9 09 05 09 TB22: DB 09,5,9 ;2状态子表
96: 00FC 13 05 06 DB 13H,5,6
97: 00FF FF 00 00 DB 0FFH,0,0
98: 0102 09 03 0A TB23: DB 09,3,10 ;3状态子表
99: 0105 13 04 00 DB 13H,4,0
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 0108 FF 00 00 DB 0FFH,0,0
101: 010B 13 05 06 TB24: DB 13H,5,6 ;4状态子表
102: 010E FF 04 0B DB 0FFH,4,11
103: 0111 FF 00 00 TB25: DB 0FFH,0,0 ;5状态子表
104: 0114 75 7E 00 SUB0: MOV 7EH,#0
105: 0117 85 41 7B MOV 7BH,ST
106: 011A 22 RET ;功能子程序,略
107: 011B 75 7E 01 SUB1: MOV 7EH,#1
108: 011E 85 41 7B MOV 7BH,ST
109: 0121 22 RET
110: 0122 75 7E 02 SUB2: MOV 7EH,#2
111: 0125 85 41 7B MOV 7BH,ST
112: 0128 22 RET
113: 0129 75 7E 03 SUB3: MOV 7EH,#3
114: 012C 85 41 7B MOV 7BH,ST
115: 012F 22 RET
116: 0130 75 7E 04 SUB4: MOV 7EH,#4
117: 0133 85 41 7B MOV 7BH,ST
118: 0136 22 RET
119: 0137 75 7E 05 SUB5: MOV 7EH,#5
120: 013A 85 41 7B MOV 7BH,ST
121: 013D 22 RET
122: 013E 75 7E 06 SUB6: MOV 7EH,#6
123: 0141 85 41 7B MOV 7BH,ST
124: 0144 22 RET
125: 0145 75 7E 07 SUB7: MOV 7EH,#7
126: 0148 85 41 7B MOV 7BH,ST
127: 014B 22 RET
128: 014C 75 7E 08 SUB8: MOV 7EH,#8
129: 014F 85 41 7B MOV 7BH,ST
130: 0152 22 RET
131: 0153 75 7E 09 SUB9: MOV 7EH,#9
132: 0156 85 41 7B MOV 7BH,ST
133: 0159 22 RET
134: 015A 75 7E 0A SUB10: MOV 7EH,#10
135: 015D 85 41 7B MOV 7BH,ST
136: 0160 22 RET
137: 0161 75 7E 0B SUB11: MOV 7EH,#11
138: 0164 85 41 7B MOV 7BH,ST
139: 0167 22 RET
140:
141: ;按键识别子程序
142: 0168 7C 00 KEY: MOV R4,#00H ;0→键号寄存器R4
143: 016A 7A 01 MOV R2,#01H ;扫描模式01H→R2
144: 016C 90 7F 02 KEY1: MOV DPTR,#7F02H
145: 016F EA MOV A,R2
146: 0170 F0 MOVX @DPTR,A ;扫描模式→8155PB口
147: 0171 A3 INC DPTR
148: 0172 E0 MOVX A,@DPTR ;读8155 PC口
149: 0173 20 E0 0B JB ACC.0,KEY2 ;0列无键闭合,转判1列
150: 0176 12 02 06 LCALL DELAY1 ;延时,反弹跳
151: 0179 E0 MOVX A,@DPTR
152: 017A 20 E0 04 JB ACC.0,KEY2 ;0列无键闭合,转判1列
153: 017D 74 00 MOV A,#00H ;0列有键闭合,0→A
154: 017F 21 B7 AJMP KEY55
155: 0181 20 E1 0B KEY2: JB ACC.1,KEY3 ;1列无键闭合,转判2列
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
156: 0184 12 02 06 LCALL DELAY1 ;延时,反弹跳
157: 0187 E0 MOVX A,@DPTR
158: 0188 20 E1 04 JB ACC.1,KEY3 ;0列无键闭合,转判1列
159: 018B 74 01 MOV A,#01H ;1列有键闭合,列线号01H→A
160: 018D 21 B7 AJMP KEY55
161: 018F 20 E2 0B KEY3: JB ACC.2,KEY4 ;2列无键闭合,转判3列
162: 0192 12 02 06 LCALL DELAY1 ;延时,反弹跳
163: 0195 E0 MOVX A,@DPTR
164: 0196 20 E2 04 JB ACC.2,KEY4 ;0列无键闭合,转判1列
165: 0199 74 02 MOV A,#02H ;2列有键闭合,02H→A
166: 019B 21 B7 AJMP KEY55
167: 019D 20 E3 0B KEY4: JB ACC.3,KEY5 ;3列无键闭合,转判下一行
168: 01A0 12 02 06 LCALL DELAY1 ;延时,反弹跳
169: 01A3 E0 MOVX A,@DPTR
170: 01A4 20 E3 04 JB ACC.3,KEY5 ;0列无键闭合,转判1列
171: 01A7 74 03 MOV A,#03H ;3列有键闭合,03H→A
172: 01A9 21 B7 AJMP KEY55
173: 01AB 20 E4 0C KEY5: JB ACC.4,NEXT ;4列无键闭合,转判下一行
174: 01AE 12 02 06 LCALL DELAY1 ;延时,反弹跳
175: 01B1 E0 MOVX A,@DPTR
176: 01B2 20 E4 05 JB ACC.4,NEXT ;0列无键闭合,转判1列
177: 01B5 74 04 MOV A,#04H ;4列有键闭合,04H→A
178: 01B7 2C KEY55: ADD A,R4 ;列线号+(R4)作为键值→A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -