📄 pxsjpgb.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: PXSJPGB.ASM
Object File: PXSJPGB.HEX
List File: PXSJPGB.LST
Line I Addr Code Source
1: N 0000 org 0000h
2: 0000 02 00 30 ljmp main
3: N 000B org 000bh
4: 000B 02 03 0C ljmp it00 ;定时中断0
5: ;***************************;
6: ; 主程序 ;
7: ;***************************;
8: N 0030 org 0030h
9: 0030 main:
10: 0030 75 28 00 mov 28h,#00h ;标记位总清零
11: 0033 75 41 23 mov 41h,#23h ;显视数字的首地址指针(即23单元)
12: 0036 75 50 22 mov 50h,#22h ;显视横杠的首地址指针(即22单元)
13: 0039 75 44 08 mov 44h,#08h ;定时器高位(TH0)初值
14: 003C 75 43 88 mov 43h,#88h ;定时器低位(TL0)初值
15: 003F 75 5B 00 mov 5bh,#00h
16: 0042 75 5C 00 mov 5ch,#00h
17: 0045 C2 50 clr 50h
18: 0047 C2 6E clr 6eh ;清闪动开关标志位
19: 0049 75 89 01 mov tmod,#01h ;定时方式1 (16位计数器)
20: 004C 85 44 8C mov th0,44h ;定时器高位(TH0)送初值
21: 004F 85 43 8A mov tl0,43h ;定时器低位(TL0)送初值
22: 0052 D2 A9 setb et0 ;定时中断0 允许中断
23: 0054 D2 8C setb tr0 ;启动定时器
24: 0056 D2 AF setb ea ;开中断
25: 0058 75 42 2E mov 42h,#2eh
26: 005B 75 20 2E mov 20h,#2eh
27: 005E 75 21 2E mov 21h,#2eh
28: 0061 75 22 2E mov 22h,#2eh
29: 0064 75 23 2F mov 23h,#2fh ;让23单元显视P
30: 0067 12 03 5F key: lcall dirv
31: ;-------------------------;
32: ; 读键 ;
33: ;-------------------------;
34: 006A kl0:
35: 006A D2 A9 setb et0 ;定时中断0 允许中断
36: 006C D2 8C setb tr0 ;启动定时器
37: 006E D2 AF setb ea ;开中断
38: 0070 74 0F mov a,#0fh
39: 0072 F5 A0 mov p2,a
40: 0074 E5 A0 mov a,p2 ;p2口低四位为键扫描输入,高四位数出
41: 0076 30 E0 0F jnb acc.0,kl1 ;判断有无键按下
42: 0079 30 E1 0C jnb acc.1,kl1 ;判断有无键按下
43: 007C 30 E2 09 jnb acc.2,kl1 ;判断有无键按下
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 007F 30 E3 06 jnb acc.3,kl1 ;判断有无键按下
45: 0082 12 03 5F lcall dirv
46: 0085 02 00 6A ljmp kl0 ;无键按下继续
47: 0088 12 03 5F kl1: lcall dirv ;20h单元位0为1处于最高位带小数点显示
48: 008B 74 0F kl12: mov a,#0fh
49: 008D F5 A0 mov p2,a
50: 008F E5 A0 mov a,p2 ;p2口低四位为键扫描输入,高四位数出
51: 0091 30 E0 11 jnb acc.0,kl2
52: 0094 30 E1 0E jnb acc.1,kl2
53: 0097 30 E2 0B jnb acc.2,kl2
54: 009A 30 E3 08 jnb acc.3,kl2 ;判断有无键按下
55: 009D C2 51 clr 51h ;清除键按下标记:28h单元位1为1则键按下
56: 009F 12 03 5F lcall dirv
57: 00A2 02 00 6A ljmp kl0 ;为抖动没键按下继续
58: 00A5 30 51 03 kl2: jnb 51h,ke1y ;28h单元位1为1则键按下已经处理过反回
59: 00A8 02 00 6A ljmp kl0
60: 00AB D2 51 ke1y: setb 51h ;打上键按下标记:28h单元位1为1则键按下
61: 00AD 7A EF mov r2,#0efh ;确实有键开始扫描键值
62: 00AF 7C 00 mov r4,#00h
63: 00B1 pk1: ; mov a,p2 ;p2口低四位为键扫描输入,高四位数出
64: 00B1 EA mov a,r2
65: 00B2 F5 A0 mov p2,a
66: 00B4 E5 A0 mov a,p2 ;p2口低四位为键扫描输入,高四位数出
67: 00B6 79 00 mov r1,#00h ;r1中为键行数
68: 00B8 30 E0 15 jnb acc.0,pk20 ;判有无键按下
69: 00BB 12 00 E2 lcall kll2
70: 00BE 30 E1 0F jnb acc.1,pk20 ;判有无键按下
71: 00C1 12 00 E2 lcall kll2
72: 00C4 30 E2 09 jnb acc.2,pk20 ;判有无键按下
73: 00C7 12 00 E2 lcall kll2
74: 00CA 30 E3 03 jnb acc.3,pk20 ;判有无键按下
75: 00CD 02 00 D7 ljmp pk2
76: 00D0 74 00 pk20: mov a,#00h
77: 00D2 2C add a,r4
78: 00D3 29 add a,r1
79: 00D4 02 00 E9 ljmp pk5 ;扫到键值去散转处理
80: 00D7 0C pk2: inc r4
81: 00D8 EA mov a,r2
82: 00D9 30 E7 04 jnb acc.7,pk3 ;判断4个键是否扫描完
83: 00DC 23 rl a
84: 00DD FA mov r2,a
85: 00DE 01 B1 ajmp pk1 ;16个键没扫完继续
86: 00E0 01 6A pk3: ajmp kl0 ;16个键全扫完为误动作反回
87:
88: 00E2 F8 kll2: mov r0,a
89: 00E3 E9 mov a,r1
90: 00E4 24 04 add a,#04h ;加一行四个键
91: 00E6 F9 mov r1,a
92: 00E7 E8 mov a,r0
93: 00E8 22 ret
94:
95: ;------------------------------;
96: ; 键状态判断子程序 ;
97: ;------------------------------;
98: 00E9 90 00 F3 pk5: mov dptr,#tb0 ;散转处理
99: 00EC FA mov r2,a
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 00ED 2A add a,r2
101: 00EE 50 02 jnc pk6
102: 00F0 05 83 inc dph
103: 00F2 73 pk6: jmp @a+dptr
104: 00F3 21 16 tb0: ajmp k11 ;键7
105: 00F5 21 29 ajmp k12 ;键8
106: 00F7 21 3C ajmp k13 ;键9
107: 00F9 21 4F ajmp k14 ;键/
108:
109: 00FB 21 52 ajmp k21 ;键4
110: 00FD 21 65 ajmp k22 ;键5
111: 00FF 21 78 ajmp k23 ;键6
112: 0101 21 8B ajmp k24 ;键x
113:
114: 0103 21 8E ajmp k31 ;键1
115: 0105 21 A1 ajmp k32 ;键2
116: 0107 21 B4 ajmp k33 ;键3
117: 0109 21 C7 ajmp k34 ;键-
118:
119: 010B 41 46 ajmp k41 ;键c
120: 010D 41 9B ajmp k42 ;键0
121: 010F 41 AE ajmp k43 ;键=
122: 0111 41 B1 ajmp k44 ;键+
123:
124: 0113 02 00 6A ljmp kl0
125:
126: 0116 k11: ;键7
127: 0116 12 03 22 lcall xshg
128: 0119 A8 41 mov r0,41h
129: 011B 76 07 mov @r0,#07h
130: 011D 12 03 4A lcall xs
131: 0120 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
132: 0123 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
133: 0126 02 00 6A ljmp kl0
134: 0129 k12: ;键8
135: 0129 12 03 22 lcall xshg
136: 012C A8 41 mov r0,41h
137: 012E 76 08 mov @r0,#08h
138: 0130 12 03 4A lcall xs
139: 0133 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
140: 0136 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
141: 0139 02 00 6A ljmp kl0
142: 013C k13: ;键9
143: 013C 12 03 22 lcall xshg
144: 013F A8 41 mov r0,41h
145: 0141 76 09 mov @r0,#09h
146: 0143 12 03 4A lcall xs
147: 0146 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
148: 0149 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
149: 014C 02 00 6A ljmp kl0
150: 014F k14: ;键/
151: 014F 02 00 6A ljmp kl0
152:
153: 0152 k21: ;键4
154: 0152 12 03 22 lcall xshg
155: 0155 A8 41 mov r0,41h
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
156: 0157 76 04 mov @r0,#04h
157: 0159 12 03 4A lcall xs
158: 015C 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
159: 015F 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
160: 0162 02 00 6A ljmp kl0
161: 0165 k22: ;键5
162: 0165 12 03 22 lcall xshg
163: 0168 A8 41 mov r0,41h
164: 016A 76 05 mov @r0,#05h
165: 016C 12 03 4A lcall xs
166: 016F 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
167: 0172 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
168: 0175 02 00 6A ljmp kl0
169: 0178 k23: ;键6
170: 0178 12 03 22 lcall xshg
171: 017B A8 41 mov r0,41h
172: 017D 76 06 mov @r0,#06h
173: 017F 12 03 4A lcall xs
174: 0182 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
175: 0185 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
176: 0188 02 00 6A ljmp kl0
177: 018B k24: ;键x
178: 018B 02 00 6A ljmp kl0
179:
180: 018E k31: ;键1
181: 018E 12 03 22 lcall xshg
182: 0191 A8 41 mov r0,41h
183: 0193 76 01 mov @r0,#01h
184: 0195 12 03 4A lcall xs
185: 0198 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
186: 019B 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
187: 019E 02 00 6A ljmp kl0
188: 01A1 k32: ;键2
189: 01A1 12 03 22 lcall xshg
190: 01A4 A8 41 mov r0,41h
191: 01A6 76 02 mov @r0,#02h
192: 01A8 12 03 4A lcall xs
193: 01AB 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
194: 01AE 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
195: 01B1 02 00 6A ljmp kl0
196: 01B4 k33: ;键3
197: 01B4 12 03 22 lcall xshg
198: 01B7 A8 41 mov r0,41h
199: 01B9 76 03 mov @r0,#03h
200: 01BB 12 03 4A lcall xs
201: 01BE 75 6B 00 mov 6bh,#00h ;清除键"-"记忆
202: 01C1 75 5B 00 mov 5bh,#00h ;显示数据末位指针清零
203: 01C4 02 00 6A ljmp kl0
204: 01C7 k34: ;键-
205: 01C7 85 41 4A mov 4ah,41h ;保存当前显示指针到4ah
206: 01CA 05 6B inc 6bh ;
207: 01CC E5 6B mov a,6bh
208: 01CE 64 01 xrl a,#01h ;是否第一次按k34
209: 01D0 70 2C jnz kw2
210: 01D2 A8 41 mov r0,41h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -