📄 keyled.lst
字号:
(0129)
(0130) if(work_state==0x01&&clock_start==0) //跑表
1D1 9180 010A LDS R24,work_state
1D3 3081 CPI R24,1
1D4 F5C1 BNE 0x020D
1D5 9020 0108 LDS R2,clock_start
1D7 2022 TST R2
1D8 F5A1 BNE 0x020D
(0131) {
(0132) timer2++;
1D9 9180 010D LDS R24,timer2
1DB 5F8F SUBI R24,0xFF
1DC 9380 010D STS timer2,R24
(0133) if(timer2==0x02)
1DE 3082 CPI R24,2
1DF F569 BNE 0x020D
(0134) {timer2=0;
1E0 2422 CLR R2
1E1 9220 010D STS timer2,R2
(0135) clock[0]++;
1E3 9180 0100 LDS R24,clock
1E5 5F8F SUBI R24,0xFF
1E6 9380 0100 STS clock,R24
(0136) if(clock[0]==10)
1E8 308A CPI R24,0xA
1E9 F519 BNE 0x020D
(0137) {
(0138) clock[0]=0;
1EA 9220 0100 STS clock,R2
(0139) clock[1]++;
1EC 9180 0101 LDS R24,clock+1
1EE 5F8F SUBI R24,0xFF
1EF 9380 0101 STS clock+1,R24
(0140) if(clock[1]==10)
1F1 308A CPI R24,0xA
1F2 F4D1 BNE 0x020D
(0141) {
(0142) clock[1]=0;
1F3 9220 0101 STS clock+1,R2
(0143) clock[2]++;
1F5 9180 0102 LDS R24,clock+2
1F7 5F8F SUBI R24,0xFF
1F8 9380 0102 STS clock+2,R24
(0144) if(clock[2]==10)
1FA 308A CPI R24,0xA
1FB F489 BNE 0x020D
(0145) {
(0146) clock[2]=0;
1FC 9220 0102 STS clock+2,R2
(0147) clock[3]++;
1FE 9180 0103 LDS R24,clock+3
200 5F8F SUBI R24,0xFF
201 9380 0103 STS clock+3,R24
(0148) if(clock[3]==10)
203 308A CPI R24,0xA
204 F441 BNE 0x020D
(0149) {
(0150) clock[3]=0;
205 9220 0103 STS clock+3,R2
(0151) clock[0]=0;
207 9220 0100 STS clock,R2
(0152) clock[1]=0;
209 9220 0101 STS clock+1,R2
(0153) clock[2]=0;
20B 9220 0102 STS clock+2,R2
(0154) }
(0155) }
(0156) }
(0157) }
(0158) }
(0159) }
(0160)
(0161) display();
20D DE7A RCALL _display
20E 9009 LD R0,Y+
20F BE0F OUT 0x3F,R0
210 91F9 LD R31,Y+
211 91E9 LD R30,Y+
212 91B9 LD R27,Y+
213 91A9 LD R26,Y+
214 9199 LD R25,Y+
215 9189 LD R24,Y+
216 9139 LD R19,Y+
217 9129 LD R18,Y+
218 9119 LD R17,Y+
219 9109 LD R16,Y+
21A 9099 LD R9,Y+
21B 9089 LD R8,Y+
21C 9079 LD R7,Y+
21D 9069 LD R6,Y+
21E 9059 LD R5,Y+
21F 9049 LD R4,Y+
220 9039 LD R3,Y+
221 9029 LD R2,Y+
222 9019 LD R1,Y+
223 9009 LD R0,Y+
224 9518 RETI
(0162) } //timer0_com_isr
(0163)
(0164) void wait()
(0165) {
_wait:
225 C007 RJMP 0x022D
(0166) while((PINB&0xf0)!=0xf0)
(0167) {
(0168) delay(20);
226 E104 LDI R16,0x14
227 E010 LDI R17,0
228 DE51 RCALL _delay
(0169) while((PINB&0xf0)!=0xf0)
229 B386 IN R24,0x16
22A 7F80 ANDI R24,0xF0
22B 3F80 CPI R24,0xF0
22C F7E1 BNE 0x0229
22D B386 IN R24,0x16
22E 7F80 ANDI R24,0xF0
22F 3F80 CPI R24,0xF0
230 F7A9 BNE 0x0226
231 9508 RET
(0170) ;
(0171) }
(0172) }
(0173) void main()
(0174) {
(0175) unsigned char i;
(0176) timer2=0;
_main:
i --> R20
232 2422 CLR R2
233 9220 010D STS timer2,R2
(0177) timer200=0;
235 2433 CLR R3
236 9230 010C STS timer200+1,R3
238 9220 010B STS timer200,R2
(0178) work_state=0;
23A 9220 010A STS work_state,R2
(0179) time_change=0x00;
23C 9220 0109 STS time_change,R2
(0180) clock_start=1; //停止跑表
23E E081 LDI R24,1
23F 9380 0108 STS clock_start,R24
(0181) /* 定时器0 定时 5 ms,general mode ,溢出 interrupt */
(0182) TCCR0=0x07; //general mode
241 E087 LDI R24,7
242 BF83 OUT 0x33,R24
(0183) //TCNT0=0x05;
(0184) TCNT0=0xd7;
243 ED87 LDI R24,0xD7
244 BF82 OUT 0x32,R24
(0185) TIMSK=0x01;
245 E081 LDI R24,1
246 BF87 OUT 0x37,R24
(0186)
(0187) DDRB=0x0f; //set PB7~PB4 PULL-UP resistor
247 E08F LDI R24,0xF
248 BB87 OUT 0x17,R24
(0188) PORTB=0xfe;
249 EF8E LDI R24,0xFE
24A BB88 OUT 0x18,R24
(0189) for(i=0;i<4;i++)
24B 2744 CLR R20
24C C010 RJMP 0x025D
(0190) {
(0191) time[i]=0;
24D E084 LDI R24,4
24E E091 LDI R25,1
24F 2FE4 MOV R30,R20
250 27FF CLR R31
251 0FE8 ADD R30,R24
252 1FF9 ADC R31,R25
253 2422 CLR R2
254 8220 STD Z+0,R2
(0192) clock[i]=0;
255 E080 LDI R24,0
256 E091 LDI R25,1
257 2FE4 MOV R30,R20
258 27FF CLR R31
259 0FE8 ADD R30,R24
25A 1FF9 ADC R31,R25
25B 8220 STD Z+0,R2
25C 9543 INC R20
25D 3044 CPI R20,4
25E F370 BCS 0x024D
(0193) }
(0194) SEI();
25F 9478 BSET 7
260 C0F7 RJMP 0x0358
(0195) while(1)
(0196) {
(0197)
(0198) while((PINB&0xf0)==0xf0)
(0199) {
(0200) delay(20);
261 E104 LDI R16,0x14
262 E010 LDI R17,0
263 DE16 RCALL _delay
(0201) while((PINB&0xf0)==0xf0)
264 B386 IN R24,0x16
265 7F80 ANDI R24,0xF0
266 3F80 CPI R24,0xF0
267 F3E1 BEQ 0x0264
268 B386 IN R24,0x16
269 7F80 ANDI R24,0xF0
26A 3F80 CPI R24,0xF0
26B F3A9 BEQ 0x0261
(0202) ;
(0203) }
(0204) temp=PINB&0xf0;
26C B386 IN R24,0x16
26D 7F80 ANDI R24,0xF0
26E 9380 010E STS temp,R24
(0205) switch(temp)
270 2F68 MOV R22,R24
271 2777 CLR R23
272 3B60 CPI R22,0xB0
273 E0E0 LDI R30,0
274 077E CPC R23,R30
275 F409 BNE 0x0277
276 C06A RJMP 0x02E1
277 EB80 LDI R24,0xB0
278 E090 LDI R25,0
279 1786 CP R24,R22
27A 0797 CPC R25,R23
27B F034 BLT 0x0282
27C 3760 CPI R22,0x70
27D E0E0 LDI R30,0
27E 077E CPC R23,R30
27F F409 BNE 0x0281
280 C0A1 RJMP 0x0322
281 C0D6 RJMP 0x0358
282 3D60 CPI R22,0xD0
283 E0E0 LDI R30,0
284 077E CPC R23,R30
285 F149 BEQ 0x02AF
286 3D60 CPI R22,0xD0
287 E0E0 LDI R30,0
288 077E CPC R23,R30
289 F40C BGE 0x028B
28A C0CD RJMP 0x0358
28B 3E60 CPI R22,0xE0
28C E0E0 LDI R30,0
28D 077E CPC R23,R30
28E F009 BEQ 0x0290
28F C0C8 RJMP 0x0358
(0206) {
(0207) case 0xe0: //key 0
(0208) if(work_state==0)
290 9020 010A LDS R2,work_state
292 2022 TST R2
293 F499 BNE 0x02A7
(0209) {
(0210) work_state=1; //跑表模式
294 E081 LDI R24,1
295 9380 010A STS work_state,R24
(0211) clock_start=1; //跑表启动
297 9380 0108 STS clock_start,R24
(0212) for(i=0;i<4;i++)
299 2744 CLR R20
29A C009 RJMP 0x02A4
(0213) clock[i]=0;
29B E080 LDI R24,0
29C E091 LDI R25,1
29D 2FE4 MOV R30,R20
29E 27FF CLR R31
29F 0FE8 ADD R30,R24
2A0 1FF9 ADC R31,R25
2A1 2422 CLR R2
2A2 8220 STD Z+0,R2
2A3 9543 INC R20
2A4 3044 CPI R20,4
2A5 F3A8 BCS 0x029B
(0214) }
2A6 C003 RJMP 0x02AA
(0215) else
(0216) work_state=0x00;
2A7 2422 CLR R2
2A8 9220 010A STS work_state,R2
(0217) clock_start=0;
2AA 2422 CLR R2
2AB 9220 0108 STS clock_start,R2
(0218) wait();
2AD DF77 RCALL _wait
(0219) break;
2AE C0A9 RJMP 0x0358
(0220) case 0xd0: //key 1
(0221) if(work_state==0x00)
2AF 9020 010A LDS R2,work_state
2B1 2022 TST R2
2B2 F4B9 BNE 0x02CA
(0222) {
(0223) if(time_change==0x00)
2B3 9020 0109 LDS R2,time_change
2B5 2022 TST R2
2B6 F421 BNE 0x02BB
(0224) time_change=0x01;
2B7 E081 LDI R24,1
2B8 9380 0109 STS time_change,R24
2BA C00F RJMP 0x02CA
(0225) else if(time_change==0x01)
2BB 9180 0109 LDS R24,time_change
2BD 3081 CPI R24,1
2BE F421 BNE 0x02C3
(0226) time_change=0x02;
2BF E082 LDI R24,2
2C0 9380 0109 STS time_change,R24
2C2 C007 RJMP 0x02CA
(0227) else if(time_change==0x02)
2C3 9180 0109 LDS R24,time_change
2C5 3082 CPI R24,2
2C6 F419 BNE 0x02CA
(0228) time_change=0x00;
2C7 2422 CLR R2
2C8 9220 0109 STS time_change,R2
(0229) }
(0230)
(0231) if(work_state==0x01) //跑表
2CA 9180 010A LDS R24,work_state
2CC 3081 CPI R24,1
2CD F489 BNE 0x02DF
(0232) {if(clock_start==0x0) //跑表已启动
2CE 9020 0108 LDS R2,clock_start
2D0 2022 TST R2
2D1 F469 BNE 0x02DF
(0233) {
(0234) for(i=0;i<4;i++)
2D2 2744 CLR R20
2D3 C009 RJMP 0x02DD
(0235) clock[i]=0;
2D4 E080 LDI R24,0
2D5 E091 LDI R25,1
2D6 2FE4 MOV R30,R20
2D7 27FF CLR R31
2D8 0FE8 ADD R30,R24
2D9 1FF9 ADC R31,R25
2DA 2422 CLR R2
2DB 8220 STD Z+0,R2
2DC 9543 INC R20
2DD 3044 CPI R20,4
2DE F3A8 BCS 0x02D4
(0236) }
(0237) }
(0238)
(0239) wait();
2DF DF45 RCALL _wait
(0240) break;
2E0 C077 RJMP 0x0358
(0241) case 0xb0: //key 2
(0242) if(work_state==0x0) // 计时模式
2E1 9020 010A LDS R2,work_state
2E3 2022 TST R2
2E4 F581 BNE 0x0315
(0243) {if(time_change==0x1) //change second
2E5 9180 0109 LDS R24,time_change
2E7 3081 CPI R24,1
2E8 F4A1 BNE 0x02FD
(0244) {time[0]++;
2E9 9180 0104 LDS R24,time
2EB 5F8F SUBI R24,0xFF
2EC 9380 0104 STS time,R24
(0245) if(time[0]==0xa)
2EE 308A CPI R24,0xA
2EF F581 BNE 0x0320
(0246) {time[0]=0;
2F0 2422 CLR R2
2F1 9220 0104 STS time,R2
(0247) time[1]++;
2F3 9180 0105 LDS R24,time+1
2F5 5F8F SUBI R24,0xFF
2F6 9380 0105 STS time+1,R24
(0248) if(time[1]==0x6)
2F8 3086 CPI R24,6
2F9 F531 BNE 0x0320
(0249) time[1]=0;
2FA 9220 0105 STS time+1,R2
(0250) }
(0251) }
2FC C023 RJMP 0x0320
(0252) else if(time_change==0x02) //change minute
2FD 9180 0109 LDS R24,time_change
2FF 3082 CPI R24,2
300 F4F9 BNE 0x0320
(0253) {
(0254) time[2]++;
301 9180 0106 LDS R24,time+2
303 5F8F SUBI R24,0xFF
304 9380 0106 STS time+2,R24
(0255) if(time[2]==0xa)
306 308A CPI R24,0xA
307 F4C1 BNE 0x0320
(0256) {time[2]=0;
308 2422 CLR R2
309 9220 0106 STS time+2,R2
(0257) time[3]++;
30B 9180 0107 LDS R24,time+3
30D 5F8F SUBI R24,0xFF
30E 9380 0107 STS time+3,R24
(0258) if(time[3]==0x6)
310 3086 CPI R24,6
311 F471 BNE 0x0320
(0259) time[3]=0;
312 9220 0107 STS time+3,R2
(0260) }
(0261) }
(0262) }
314 C00B RJMP 0x0320
(0263) else if(clock_start==0x00) //跑表模式,已经启动
315 9020 0108 LDS R2,clock_start
317 2022 TST R2
318 F421 BNE 0x031D
(0264) clock_start=1; //暂停
319 E081 LDI R24,1
31A 9380 0108 STS clock_start,R24
31C C003 RJMP 0x0320
(0265) else
(0266) clock_start=0;
31D 2422 CLR R2
31E 9220 0108 STS clock_start,R2
(0267) wait();
320 DF04 RCALL _wait
(0268) break;
321 C036 RJMP 0x0358
(0269) case 0x70: //key 3
(0270) if(work_state==0x00) // 计时模式
322 9020 010A LDS R2,work_state
324 2022 TST R2
325 F589 BNE 0x0357
(0271) {
(0272) if(time_change==0x01) // 秒
326 9180 0109 LDS R24,time_change
328 3081 CPI R24,1
329 F4A9 BNE 0x033F
(0273) {
(0274) time[0]--;
32A 9180 0104 LDS R24,time
32C 5081 SUBI R24,1
32D 9380 0104 STS time,R24
(0275) if(time[0]==0xff)
32F 3F8F CPI R24,0xFF
330 F531 BNE 0x0357
(0276) {
(0277) time[0]=9;
331 E089 LDI R24,0x9
332 9380 0104 STS time,R24
(0278) time[1]--;
334 9180 0105 LDS R24,time+1
336 5081 SUBI R24,1
337 9380 0105 STS time+1,R24
(0279) if(time[1]==0xff)
339 3F8F CPI R24,0xFF
33A F4E1 BNE 0x0357
(0280) time[1]=5;
33B E085 LDI R24,5
33C 9380 0105 STS time+1,R24
(0281) }
(0282) }
33E C018 RJMP 0x0357
(0283) else if(time_change==0x02) //decrease minute
33F 9180 0109 LDS R24,time_change
341 3082 CPI R24,2
342 F4A1 BNE 0x0357
(0284) {
(0285) time[2]--;
343 9180 0106 LDS R24,time+2
345 5081 SUBI R24,1
346 9380 0106 STS time+2,R24
(0286) if(time[2]==0xff)
348 3F8F CPI R24,0xFF
349 F469 BNE 0x0357
(0287) {
(0288) time[2]=9;
34A E089 LDI R24,0x9
34B 9380 0106 STS time+2,R24
(0289) time[3]--;
34D 9180 0107 LDS R24,time+3
34F 5081 SUBI R24,1
350 9380 0107 STS time+3,R24
(0290) if(time[3]==0xff)
352 3F8F CPI R24,0xFF
353 F419 BNE 0x0357
(0291) time[3]=5;
354 E085 LDI R24,5
355 9380 0107 STS time+3,R24
(0292) }
(0293) }
(0294) }
(0295) wait();
FILE: <library>
357 DECD RCALL _wait
358 CF0F RJMP 0x0268
359 9508 RET
push_xgset300C:
35A 935A ST R21,-Y
35B 934A ST R20,-Y
35C 92BA ST R11,-Y
35D 92AA ST R10,-Y
35E 9508 RET
pop_xgset300C:
35F 90A9 LD R10,Y+
360 90B9 LD R11,Y+
361 9149 LD R20,Y+
362 9159 LD R21,Y+
363 9508 RET
lsl8:
364 2311 TST R17
365 F019 BEQ 0x0369
366 0F00 LSL R16
367 951A DEC R17
368 CFFB RJMP lsl8
369 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -