📄 1602_8563_timer.lst
字号:
02E5 E011 LDI R17,1
02E6 DD9E RCALL _delay_ms
(0211) tonghe();
02E7 DE61 RCALL _tonghe
(0212) delay_ms(2000);
02E8 ED00 LDI R16,0xD0
02E9 E017 LDI R17,7
02EA DD9A RCALL _delay_ms
(0213)
(0214) Twi_Init();
02EB DE6B RCALL _Twi_Init
(0215) delay_ms(100);
02EC E604 LDI R16,0x64
02ED E010 LDI R17,0
02EE DD96 RCALL _delay_ms
(0216) CLI(); //关总中断
02EF 94F8 BCLR 7
(0217) timer1_init(); //定时器1初始化
02F0 DFAB RCALL _timer1_init
(0218) MCUCR = 0x00;
02F1 2422 CLR R2
02F2 BE25 OUT 0x35,R2
(0219) GICR = 0x00;
02F3 BE2B OUT 0x3B,R2
(0220) TIMSK = 0x04; //开放定时器0中断和比较中断
02F4 E084 LDI R24,4
02F5 BF89 OUT 0x39,R24
(0221) SEI(); //开总中断
02F6 9478 BSET 7
(0222)
(0223) cls();
02F7 DE1B RCALL _cls
(0224) delay_ms(50);
02F8 E302 LDI R16,0x32
02F9 E010 LDI R17,0
02FA DD8A RCALL _delay_ms
02FB C21E RJMP 0x051A
(0225)
(0226) while(1)
(0227) {
(0228) a=KEY_RD;
02FC B383 IN R24,0x13
02FD 9586 LSR R24
02FE 6F81 ORI R24,0xF1
02FF B340 IN R20,0x10
0300 9546 LSR R20
0301 9546 LSR R20
0302 6F4E ORI R20,0xFE
0303 2348 AND R20,R24
0304 9540 COM R20
(0229) if(a!=0)
0305 F409 BNE 0x0307
0306 C213 RJMP 0x051A
(0230) {
(0231) delay_ms(20);
0307 E104 LDI R16,0x14
0308 E010 LDI R17,0
0309 DD7B RCALL _delay_ms
(0232) a1=KEY_RD;
030A B383 IN R24,0x13
030B 9586 LSR R24
030C 6F81 ORI R24,0xF1
030D B390 IN R25,0x10
030E 9596 LSR R25
030F 9596 LSR R25
0310 6F9E ORI R25,0xFE
0311 2398 AND R25,R24
0312 9590 COM R25
0313 8398 STD Y+0,R25
(0233) if(a1==a)
0314 2E09 MOV R0,R25
0315 1794 CP R25,R20
0316 F009 BEQ 0x0318
0317 C200 RJMP 0x0518
(0234) {
(0235) switch(a)
0318 2EE4 MOV R14,R20
0319 24FF CLR R15
031A 01C7 MOVW R24,R14
031B 3081 CPI R24,1
031C E0E0 LDI R30,0
031D 079E CPC R25,R30
031E F079 BEQ 0x032E
031F 3082 CPI R24,2
0320 E0E0 LDI R30,0
0321 079E CPC R25,R30
0322 F159 BEQ 0x034E
0323 3084 CPI R24,4
0324 E0E0 LDI R30,0
0325 079E CPC R25,R30
0326 F409 BNE 0x0328
0327 C075 RJMP 0x039D
0328 3088 CPI R24,0x8
0329 E0E0 LDI R30,0
032A 079E CPC R25,R30
032B F409 BNE 0x032D
032C C124 RJMP 0x0451
032D C1EA RJMP 0x0518
(0236) {
(0237) case 0x01:
(0238) spk(10,1);
032E E021 LDI R18,1
032F E00A LDI R16,0xA
0330 DE46 RCALL _spk
(0239) if(set_flag==0)
0331 8009 LDD R0,Y+1
0332 2000 TST R0
0333 F471 BNE 0x0342
(0240) {
(0241) TCCR1B=0x00;
0334 2422 CLR R2
0335 BC2E OUT 0x2E,R2
(0242) LED_ON;
0336 9AC3 SBI 0x18,3
(0243) set_flag=1;
0337 2400 CLR R0
0338 9403 INC R0
0339 8209 STD Y+1,R0
(0244) cls();
033A DDD8 RCALL _cls
(0245) locate(1,4); //显示“时间调整”
033B E024 LDI R18,4
033C E001 LDI R16,1
033D DDDB RCALL _locate
(0246) xs_lcd("SET:");
033E E804 LDI R16,0x84
033F E010 LDI R17,0
0340 DDF8 RCALL _xs_lcd
(0247) }
0341 C1D6 RJMP 0x0518
(0248) else
(0249) {
(0250) TCCR1B=0x04; //开启时钟
0342 E084 LDI R24,4
0343 BD8E OUT 0x2E,R24
(0251) set_flag=0;
0344 2400 CLR R0
0345 8209 STD Y+1,R0
(0252) if(set_bh==1)
0346 818A LDD R24,Y+2
0347 3081 CPI R24,1
0348 F009 BEQ 0x034A
0349 C1CE RJMP 0x0518
(0253) {
(0254) write_timer(); //写入新时间
034A DEA6 RCALL _write_timer
(0255) set_bh=0;
034B 2400 CLR R0
034C 820A STD Y+2,R0
(0256) }
(0257) }
(0258) break;
034D C1CA RJMP 0x0518
(0259) case 0x02:
(0260) if(set_flag==1)
034E 8189 LDD R24,Y+1
034F 3081 CPI R24,1
0350 F009 BEQ 0x0352
0351 C1C6 RJMP 0x0518
(0261) {
(0262) spk(10,1);
0352 E021 LDI R18,1
0353 E00A LDI R16,0xA
0354 DE22 RCALL _spk
(0263) set_time++;
0355 9563 INC R22
(0264) locate(2,2); //显示待调整的数据
0356 E022 LDI R18,2
0357 E002 LDI R16,2
0358 DDC0 RCALL _locate
(0265) switch(set_time)
0359 2E26 MOV R2,R22
035A 2433 CLR R3
035B 823C STD Y+4,R3
035C 822B STD Y+3,R2
035D 01C1 MOVW R24,R2
035E 3081 CPI R24,1
035F E0E0 LDI R30,0
0360 079E CPC R25,R30
0361 F0A9 BEQ 0x0377
0362 3082 CPI R24,2
0363 E0E0 LDI R30,0
0364 079E CPC R25,R30
0365 F0B9 BEQ 0x037D
0366 3083 CPI R24,3
0367 E0E0 LDI R30,0
0368 079E CPC R25,R30
0369 F0C9 BEQ 0x0383
036A 3084 CPI R24,4
036B E0E0 LDI R30,0
036C 079E CPC R25,R30
036D F0D9 BEQ 0x0389
036E 3085 CPI R24,5
036F E0E0 LDI R30,0
0370 079E CPC R25,R30
0371 F0E9 BEQ 0x038F
0372 3086 CPI R24,6
0373 E0E0 LDI R30,0
0374 079E CPC R25,R30
0375 F0F9 BEQ 0x0395
0376 C024 RJMP 0x039B
(0266) {
(0267) case 1:
(0268) xs_lcd("year:");
0377 E70E LDI R16,0x7E
0378 E010 LDI R17,0
0379 DDBF RCALL _xs_lcd
(0269) set_xs1(6); //显示年
037A E006 LDI R16,6
037B DF35 RCALL _set_xs1
(0270) break;
037C C19B RJMP 0x0518
(0271) case 2:
(0272) xs_lcd("muth:");
037D E708 LDI R16,0x78
037E E010 LDI R17,0
037F DDB9 RCALL _xs_lcd
(0273) set_xs1(5); //显示月
0380 E005 LDI R16,5
0381 DF2F RCALL _set_xs1
(0274) break;
0382 C195 RJMP 0x0518
(0275) case 3:
(0276) xs_lcd(" day:");
0383 E702 LDI R16,0x72
0384 E010 LDI R17,0
0385 DDB3 RCALL _xs_lcd
(0277) set_xs1(3); //显示日
0386 E003 LDI R16,3
0387 DF29 RCALL _set_xs1
(0278) break;
0388 C18F RJMP 0x0518
(0279) case 4:
(0280) xs_lcd("hour:");
0389 E60C LDI R16,0x6C
038A E010 LDI R17,0
038B DDAD RCALL _xs_lcd
(0281) set_xs1(2); //显示时
038C E002 LDI R16,2
038D DF23 RCALL _set_xs1
(0282) break;
038E C189 RJMP 0x0518
(0283) case 5:
(0284) xs_lcd("mine:");
038F E606 LDI R16,0x66
0390 E010 LDI R17,0
0391 DDA7 RCALL _xs_lcd
(0285) set_xs1(1); //显示分
0392 E001 LDI R16,1
0393 DF1D RCALL _set_xs1
(0286) break;
0394 C183 RJMP 0x0518
(0287) case 6:
(0288) xs_lcd("week:");
0395 E600 LDI R16,0x60
0396 E010 LDI R17,0
0397 DDA1 RCALL _xs_lcd
(0289) set_xs1(4); //显示周
0398 E004 LDI R16,4
0399 DF17 RCALL _set_xs1
(0290) break;
039A C17D RJMP 0x0518
(0291) default:set_time=0;break;
039B 2766 CLR R22
(0292) }
(0293) }
(0294) break;
039C C17B RJMP 0x0518
(0295) case 0x04:
(0296) if(set_flag==1)
039D 8189 LDD R24,Y+1
039E 3081 CPI R24,1
039F F009 BEQ 0x03A1
03A0 C0AE RJMP 0x044F
(0297) {
(0298) spk(10,1);
03A1 E021 LDI R18,1
03A2 E00A LDI R16,0xA
03A3 DDD3 RCALL _spk
(0299) set_bh=1;
03A4 2400 CLR R0
03A5 9403 INC R0
03A6 820A STD Y+2,R0
(0300) locate(2,7); //显示“时间调整”
03A7 E027 LDI R18,7
03A8 E002 LDI R16,2
03A9 DD6F RCALL _locate
(0301) switch(set_time)
03AA 2EC6 MOV R12,R22
03AB 24DD CLR R13
03AC 01C6 MOVW R24,R12
03AD 3081 CPI R24,1
03AE E0E0 LDI R30,0
03AF 079E CPC R25,R30
03B0 F0C9 BEQ 0x03CA
03B1 3082 CPI R24,2
03B2 E0E0 LDI R30,0
03B3 079E CPC R25,R30
03B4 F161 BEQ 0x03E1
03B5 3083 CPI R24,3
03B6 E0E0 LDI R30,0
03B7 079E CPC R25,R30
03B8 F409 BNE 0x03BA
03B9 C03E RJMP 0x03F8
03BA 3084 CPI R24,4
03BB E0E0 LDI R30,0
03BC 079E CPC R25,R30
03BD F409 BNE 0x03BF
03BE C050 RJMP 0x040F
03BF 3085 CPI R24,5
03C0 E0E0 LDI R30,0
03C1 079E CPC R25,R30
03C2 F409 BNE 0x03C4
03C3 C063 RJMP 0x0427
03C4 3086 CPI R24,6
03C5 E0E0 LDI R30,0
03C6 079E CPC R25,R30
03C7 F409 BNE 0x03C9
03C8 C075 RJMP 0x043E
03C9 C083 RJMP 0x044D
(0302) {
(0303) case 1:
(0304) timer[6]-=0x01;
03CA 918000A7 LDS R24,0xA7
03CC 5081 SUBI R24,1
03CD 938000A7 STS 0xA7,R24
(0305) if((timer[6]&0x0F)==0x0F)timer[6]&=0xF9;
03CF 708F ANDI R24,0xF
03D0 308F CPI R24,0xF
03D1 F429 BNE 0x03D7
03D2 918000A7 LDS R24,0xA7
03D4 7F89 ANDI R24,0xF9
03D5 938000A7 STS 0xA7,R24
(0306) if(timer[6]>0x99)timer[6]=0x99;
03D7 E989 LDI R24,0x99
03D8 902000A7 LDS R2,0xA7
03DA 1582 CP R24,R2
03DB F410 BCC 0x03DE
03DC 938000A7 STS 0xA7,R24
(0307) set_xs1(6); //显示年
03DE E006 LDI R16,6
03DF DED1 RCALL _set_xs1
(0308) break;
03E0 C137 RJMP 0x0518
(0309) case 2:
(0310) timer[5]-=0x01;
03E1 918000A6 LDS R24,0xA6
03E3 5081 SUBI R24,1
03E4 938000A6 STS 0xA6,R24
(0311) if((timer[5]&0x0F)==0x0F)timer[5]&=0xF9;
03E6 708F ANDI R24,0xF
03E7 308F CPI R24,0xF
03E8 F429 BNE 0x03EE
03E9 918000A6 LDS R24,0xA6
03EB 7F89 ANDI R24,0xF9
03EC 938000A6 STS 0xA6,R24
(0312) if(timer[5]==0x00)timer[5]=0x12;
03EE 902000A6 LDS R2,0xA6
03F0 2022 TST R2
03F1 F419 BNE 0x03F5
03F2 E182 LDI R24,0x12
03F3 938000A6 STS 0xA6,R24
(0313) set_xs1(5); //显示月
03F5 E005 LDI R16,5
03F6 DEBA RCALL _set_xs1
(0314) break;
03F7 C120 RJMP 0x0518
(0315) case 3:
(0316) timer[3]-=0x01;
03F8 918000A4 LDS R24,timer+3
03FA 5081 SUBI R24,1
03FB 938000A4 STS timer+3,R24
(0317) if((timer[3]&0x0F)==0x0F)timer[3]&=0xF9;
03FD 708F ANDI R24,0xF
03FE 308F CPI R24,0xF
03FF F429 BNE 0x0405
0400 918000A4 LDS R24,timer+3
0402 7F89 ANDI R24,0xF9
0403 938000A4 STS timer+3,R24
(0318) if(timer[3]==0x00)timer[3]=0x30;
0405 902000A4 LDS R2,timer+3
0407 2022 TST R2
0408 F419 BNE 0x040C
0409 E380 LDI R24,0x30
040A 938000A4 STS timer+3,R24
(0319) set_xs1(3); //显示日
040C E003 LDI R16,3
040D DEA3 RCALL _set_xs1
(0320) break;
040E C109 RJMP 0x0518
(0321) case 4:
(0322) timer[2]-=0x01;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -