📄 rtc.lst
字号:
135 E0E0 LDI R30,0
136 079E CPC R25,R30
137 F461 BNE 0x0144
(0080) {i=0;j=0;k=0;}
138 9230 0105 STS i+1,R3
13A 9220 0104 STS i,R2
13C 9230 0107 STS j+1,R3
13E 9220 0106 STS j,R2
140 9230 0109 STS k+1,R3
142 9220 0108 STS k,R2
(0081) }
(0082) }
144 9029 LD R2,Y+
145 BE2F OUT 0x3F,R2
146 91F9 LD R31,Y+
147 91E9 LD R30,Y+
148 9199 LD R25,Y+
149 9189 LD R24,Y+
14A 9039 LD R3,Y+
14B 9029 LD R2,Y+
14C 9518 RETI
_keyScan:
x --> R20
x --> R20
x --> R20
x --> R20
x --> R20
x --> R20
14D 934A ST R20,-Y
14E 935A ST R21,-Y
(0083) }
(0084) unsigned int adc_old;
(0085) void keyScan(void)
(0086) {
(0087) if(adc_old!=adc_rel) //是否有键按下
14F 9020 010C LDS R2,adc_rel
151 9030 010D LDS R3,adc_rel+1
153 9040 010A LDS R4,adc_old
155 9050 010B LDS R5,adc_old+1
157 1442 CP R4,R2
158 0453 CPC R5,R3
159 F021 BEQ 0x015E
(0088) adc_old=adc_rel; //有键按下,读取键值
15A 9230 010B STS adc_old+1,R3
15C 9220 010A STS adc_old,R2
(0089) display();
15E 940E 0073 CALL _display
160 C34B RJMP 0x04AC
(0090) while(s1) //是否为S1键
(0091) { display();
161 940E 0073 CALL _display
(0092) delay_ms(200); //按键消抖25MS
163 EC08 LDI R16,0xC8
164 E010 LDI R17,0
165 940E 0064 CALL _delay_ms
(0093) adc_old=adc_rel; //读取键值
167 9020 010C LDS R2,adc_rel
169 9030 010D LDS R3,adc_rel+1
16B 9230 010B STS adc_old+1,R3
16D 9220 010A STS adc_old,R2
16F C0FE RJMP 0x026E
(0094)
(0095) //**********个位处理
(0096) while(!s1) //是否为S1键,不是S1时进入等待状态,并选中个位
(0097) {
(0098) adc_old=adc_rel;
170 9020 010C LDS R2,adc_rel
172 9030 010D LDS R3,adc_rel+1
174 9230 010B STS adc_old+1,R3
176 9220 010A STS adc_old,R2
(0099) TIMSK2=0x00; //屏蔽定时器中断
178 2422 CLR R2
179 9220 0070 STS 0x0070,R2
(0100)
(0101) PORTE=seg_table[i]&0x7f; //点亮个位及其小数点
17B E58C LDI R24,0x5C
17C E090 LDI R25,0
17D 91E0 0104 LDS R30,i
17F 91F0 0105 LDS R31,i+1
181 0FE8 ADD R30,R24
182 1FF9 ADC R31,R25
183 9184 LPM R24,261(Z)
184 778F ANDI R24,0x7F
185 B98E OUT 0x0E,R24
(0102) PORTB=0xef; //点亮个位
186 EE8F LDI R24,0xEF
187 B985 OUT 0x05,R24
(0103) delay_ms(1);
188 E001 LDI R16,1
189 E010 LDI R17,0
18A 940E 0064 CALL _delay_ms
(0104) PORTE=seg_table[j]; //点亮十位
18C E58C LDI R24,0x5C
18D E090 LDI R25,0
18E 91E0 0106 LDS R30,j
190 91F0 0107 LDS R31,j+1
192 0FE8 ADD R30,R24
193 1FF9 ADC R31,R25
194 9024 LPM R2,263(Z)
195 B82E OUT 0x0E,R2
(0105) PORTB=0XDF; //点亮十位
196 ED8F LDI R24,0xDF
197 B985 OUT 0x05,R24
(0106) delay_ms(1);
198 E001 LDI R16,1
199 E010 LDI R17,0
19A 940E 0064 CALL _delay_ms
(0107) PORTE=seg_table[k]; //点亮百位
19C E58C LDI R24,0x5C
19D E090 LDI R25,0
19E 91E0 0108 LDS R30,k
1A0 91F0 0109 LDS R31,k+1
1A2 0FE8 ADD R30,R24
1A3 1FF9 ADC R31,R25
1A4 9024 LPM R2,265(Z)
1A5 B82E OUT 0x0E,R2
(0108) PORTB=0XBF; //点亮百位
1A6 EB8F LDI R24,0xBF
1A7 B985 OUT 0x05,R24
(0109) delay_ms(1);
1A8 E001 LDI R16,1
1A9 E010 LDI R17,0
1AA 940E 0064 CALL _delay_ms
(0110) adc_old=adc_rel; //读取键值
1AC 9020 010C LDS R2,adc_rel
1AE 9030 010D LDS R3,adc_rel+1
1B0 9230 010B STS adc_old+1,R3
1B2 9220 010A STS adc_old,R2
(0111) if(s2) //是否为S3 ,如果是S3,个位加1
1B4 9020 010A LDS R2,adc_old
1B6 9030 010B LDS R3,adc_old+1
1B8 E880 LDI R24,0x80
1B9 E091 LDI R25,1
1BA 1582 CP R24,R2
1BB 0593 CPC R25,R3
1BC F008 BCS 0x01BE
1BD C052 RJMP 0x0210
1BE 01C1 MOVW R24,R2
1BF 3280 CPI R24,0x20
1C0 E0E2 LDI R30,2
1C1 079E CPC R25,R30
1C2 F008 BCS 0x01C4
1C3 C04C RJMP 0x0210
(0112) {
(0113) int x;
(0114) for(x=50;x>0;x--) //消抖且保证LED显示正常
1C4 E342 LDI R20,0x32
1C5 E050 LDI R21,0
(0115) {
(0116) PORTE=seg_table[i]&0x7f;
1C6 E58C LDI R24,0x5C
1C7 E090 LDI R25,0
1C8 91E0 0104 LDS R30,i
1CA 91F0 0105 LDS R31,i+1
1CC 0FE8 ADD R30,R24
1CD 1FF9 ADC R31,R25
1CE 9184 LPM R24,261(Z)
1CF 778F ANDI R24,0x7F
1D0 B98E OUT 0x0E,R24
(0117) PORTB=0xef;
1D1 EE8F LDI R24,0xEF
1D2 B985 OUT 0x05,R24
(0118) delay_ms(1);
1D3 E001 LDI R16,1
1D4 E010 LDI R17,0
1D5 940E 0064 CALL _delay_ms
(0119) PORTE=seg_table[j];
1D7 E58C LDI R24,0x5C
1D8 E090 LDI R25,0
1D9 91E0 0106 LDS R30,j
1DB 91F0 0107 LDS R31,j+1
1DD 0FE8 ADD R30,R24
1DE 1FF9 ADC R31,R25
1DF 9024 LPM R2,263(Z)
1E0 B82E OUT 0x0E,R2
(0120) PORTB=0XDF;
1E1 ED8F LDI R24,0xDF
1E2 B985 OUT 0x05,R24
(0121) delay_ms(1);
1E3 E001 LDI R16,1
1E4 E010 LDI R17,0
1E5 940E 0064 CALL _delay_ms
(0122) PORTE=seg_table[k];
1E7 E58C LDI R24,0x5C
1E8 E090 LDI R25,0
1E9 91E0 0108 LDS R30,k
1EB 91F0 0109 LDS R31,k+1
1ED 0FE8 ADD R30,R24
1EE 1FF9 ADC R31,R25
1EF 9024 LPM R2,265(Z)
1F0 B82E OUT 0x0E,R2
(0123) PORTB=0XBF;
1F1 EB8F LDI R24,0xBF
1F2 B985 OUT 0x05,R24
(0124) delay_ms(1);
1F3 E001 LDI R16,1
1F4 E010 LDI R17,0
1F5 940E 0064 CALL _delay_ms
1F7 5041 SUBI R20,1
1F8 4050 SBCI R21,0
1F9 2422 CLR R2
1FA 2433 CLR R3
1FB 1624 CP R2,R20
1FC 0635 CPC R3,R21
1FD F40C BGE 0x01FF
1FE CFC7 RJMP 0x01C6
(0125) }
(0126) i++; //个位加1
1FF 9180 0104 LDS R24,i
201 9190 0105 LDS R25,i+1
203 9601 ADIW R24,1
204 9390 0105 STS i+1,R25
206 9380 0104 STS i,R24
(0127) if(i==10)
208 308A CPI R24,0xA
209 E0E0 LDI R30,0
20A 079E CPC R25,R30
20B F421 BNE 0x0210
(0128) {
(0129) i=0;
20C 9230 0105 STS i+1,R3
20E 9220 0104 STS i,R2
(0130) }
(0131) }
(0132) if(s4) //是否为S4 ,如果是S4,个位减1
210 9020 010A LDS R2,adc_old
212 9030 010B LDS R3,adc_old+1
214 ED80 LDI R24,0xD0
215 E092 LDI R25,2
216 1582 CP R24,R2
217 0593 CPC R25,R3
218 F008 BCS 0x021A
219 C054 RJMP 0x026E
21A 01C1 MOVW R24,R2
21B 3180 CPI R24,0x10
21C E0E3 LDI R30,3
21D 079E CPC R25,R30
21E F008 BCS 0x0220
21F C04E RJMP 0x026E
(0133) {int x;
(0134) for(x=50;x>0;x--) //消抖且保证LED显示正常
220 E342 LDI R20,0x32
221 E050 LDI R21,0
(0135) {
(0136) PORTE=seg_table[i]&0x7f; //点亮个位及其小数点
222 E58C LDI R24,0x5C
223 E090 LDI R25,0
224 91E0 0104 LDS R30,i
226 91F0 0105 LDS R31,i+1
228 0FE8 ADD R30,R24
229 1FF9 ADC R31,R25
22A 9184 LPM R24,261(Z)
22B 778F ANDI R24,0x7F
22C B98E OUT 0x0E,R24
(0137) PORTB=0xef; //点亮个位
22D EE8F LDI R24,0xEF
22E B985 OUT 0x05,R24
(0138) delay_ms(1);
22F E001 LDI R16,1
230 E010 LDI R17,0
231 940E 0064 CALL _delay_ms
(0139) PORTE=seg_table[j]; //点亮十位
233 E58C LDI R24,0x5C
234 E090 LDI R25,0
235 91E0 0106 LDS R30,j
237 91F0 0107 LDS R31,j+1
239 0FE8 ADD R30,R24
23A 1FF9 ADC R31,R25
23B 9024 LPM R2,263(Z)
23C B82E OUT 0x0E,R2
(0140) PORTB=0XDF; //点亮十位
23D ED8F LDI R24,0xDF
23E B985 OUT 0x05,R24
(0141) delay_ms(1);
23F E001 LDI R16,1
240 E010 LDI R17,0
241 940E 0064 CALL _delay_ms
(0142) PORTE=seg_table[k]; //点亮百位
243 E58C LDI R24,0x5C
244 E090 LDI R25,0
245 91E0 0108 LDS R30,k
247 91F0 0109 LDS R31,k+1
249 0FE8 ADD R30,R24
24A 1FF9 ADC R31,R25
24B 9024 LPM R2,265(Z)
24C B82E OUT 0x0E,R2
(0143) PORTB=0XBF; //点亮百位
24D EB8F LDI R24,0xBF
24E B985 OUT 0x05,R24
(0144) delay_ms(1);
24F E001 LDI R16,1
250 E010 LDI R17,0
251 940E 0064 CALL _delay_ms
253 5041 SUBI R20,1
254 4050 SBCI R21,0
255 2422 CLR R2
256 2433 CLR R3
257 1624 CP R2,R20
258 0635 CPC R3,R21
259 F40C BGE 0x025B
25A CFC7 RJMP 0x0222
(0145) }
(0146) i--; //减1
25B 9180 0104 LDS R24,i
25D 9190 0105 LDS R25,i+1
25F 9701 SBIW R24,1
260 9390 0105 STS i+1,R25
262 9380 0104 STS i,R24
(0147) if(i==-1)
264 3F8F CPI R24,0xFF
265 EFEF LDI R30,0xFF
266 079E CPC R25,R30
267 F431 BNE 0x026E
(0148) {
(0149) i=9;
268 E089 LDI R24,0x9
269 E090 LDI R25,0
26A 9390 0105 STS i+1,R25
26C 9380 0104 STS i,R24
26E 9180 010A LDS R24,adc_old
270 9190 010B LDS R25,adc_old+1
272 3083 CPI R24,3
273 E0E0 LDI R30,0
274 079E CPC R25,R30
275 F008 BCS 0x0277
276 CEF9 RJMP 0x0170
(0150) }
(0151) }
(0152) }
(0153) delay_ms(200);
277 EC08 LDI R16,0xC8
278 E010 LDI R17,0
279 940E 0064 CALL _delay_ms
(0154) adc_old=adc_rel;
27B 9020 010C LDS R2,adc_rel
27D 9030 010D LDS R3,adc_rel+1
27F 9230 010B STS adc_old+1,R3
281 9220 010A STS adc_old,R2
283 C0FC RJMP 0x0380
(0155) //********十位处理
(0156) while(!s1) //同上
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -