📄 lcd_icc.lst
字号:
02A7 F471 BNE 0x02B6
(0192) {
(0193) if((flash_flag)%2==0)
02A8 E012 LDI R17,2
02A9 91000067 LDS R16,flash_flag
02AB 940E05BC CALL mod8u
02AD 2300 TST R16
02AE F421 BNE 0x02B3
(0194) {
(0195) Print(&Month[0]);
02AF E80E LDI R16,0x8E
02B0 E010 LDI R17,0
02B1 DE4D RCALL _Print
(0196) }
02B2 C003 RJMP 0x02B6
(0197) else
(0198) {
(0199) Print(" ");
02B3 E700 LDI R16,0x70
02B4 E010 LDI R17,0
02B5 DE49 RCALL _Print
(0200) }
(0201) }
(0202) //********************************************************
(0203) IntToStr1(year,&Year[0]);//转换年位,显示
02B6 E920 LDI R18,0x90
02B7 E030 LDI R19,0
02B8 91000063 LDS R16,year
02BA 91100064 LDS R17,year+1
02BC DEC5 RCALL _IntToStr1
(0204) GotoXY(6,0);
02BD 2722 CLR R18
02BE E006 LDI R16,6
02BF DE50 RCALL _GotoXY
(0205) if(time_set!=6)//按下时间设定键,第6下为年设置
02C0 91800068 LDS R24,time_set
02C2 3086 CPI R24,6
02C3 F021 BEQ 0x02C8
(0206) {
(0207) Print(&Year[0]);
02C4 E900 LDI R16,0x90
02C5 E010 LDI R17,0
02C6 DE38 RCALL _Print
(0208) }
02C7 C012 RJMP 0x02DA
(0209) else if(time_set==6)
02C8 91800068 LDS R24,time_set
02CA 3086 CPI R24,6
02CB F471 BNE 0x02DA
(0210) {
(0211) if((flash_flag)%2==0)
02CC E012 LDI R17,2
02CD 91000067 LDS R16,flash_flag
02CF 940E05BC CALL mod8u
02D1 2300 TST R16
02D2 F421 BNE 0x02D7
(0212) {
(0213) Print(&Year[0]);
02D3 E900 LDI R16,0x90
02D4 E010 LDI R17,0
02D5 DE29 RCALL _Print
(0214) }
02D6 C003 RJMP 0x02DA
(0215) else
(0216) {
(0217) Print(" ");
02D7 E609 LDI R16,0x69
02D8 E010 LDI R17,0
02D9 DE25 RCALL _Print
(0218) }
(0219) }
(0220) WDR();
02DA 95A8 WDR
02DB CF0F RJMP 0x01EB
02DC 9508 RET
_timer1_ovf_isr:
02DD 922A ST R2,-Y
02DE 930A ST R16,-Y
02DF 931A ST R17,-Y
02E0 932A ST R18,-Y
02E1 933A ST R19,-Y
02E2 938A ST R24,-Y
02E3 939A ST R25,-Y
02E4 B62F IN R2,0x3F
02E5 922A ST R2,-Y
(0221) }
(0222) }
(0223)
(0224) //******************************************************************
(0225) //每次延时500MS,经过两次延时后,秒位加1;
(0226) #pragma interrupt_handler timer1_ovf_isr:9
(0227) void timer1_ovf_isr(void)
(0228) {
(0229) //TIMER1 has overflowed
(0230) WDR();
02E6 95A8 WDR
(0231) flash_flag++;
02E7 91800067 LDS R24,flash_flag
02E9 5F8F SUBI R24,0xFF
02EA 93800067 STS flash_flag,R24
(0232) if((flash_flag%2)==0)//判断是否是一秒
02EC E012 LDI R17,2
02ED 2F08 MOV R16,R24
02EE 940E05BC CALL mod8u
02F0 2300 TST R16
02F1 F009 BEQ 0x02F3
02F2 C13B RJMP 0x042E
(0233) {
(0234)
(0235) sec++;
02F3 91800060 LDS R24,sec
02F5 5F8F SUBI R24,0xFF
02F6 93800060 STS sec,R24
(0236) if(sec==60) //超过60秒,分加1;秒清0
02F8 338C CPI R24,0x3C
02F9 F441 BNE 0x0302
(0237) {
(0238) min++;
02FA 91800061 LDS R24,min
02FC 5F8F SUBI R24,0xFF
02FD 93800061 STS min,R24
(0239) sec=0;
02FF 2422 CLR R2
0300 92200060 STS sec,R2
(0240) }
(0241) if(min==60) //超过60分,小时位进1,
0302 91800061 LDS R24,min
0304 338C CPI R24,0x3C
0305 F441 BNE 0x030E
(0242) {
(0243) hou++;
0306 91800062 LDS R24,hou
0308 5F8F SUBI R24,0xFF
0309 93800062 STS hou,R24
(0244) min=0;
030B 2422 CLR R2
030C 92200061 STS min,R2
(0245) }
(0246) if(hou==24) //小时位超过24,则清0
030E 91800062 LDS R24,hou
0310 3188 CPI R24,0x18
0311 F441 BNE 0x031A
(0247) {
(0248) hou=0;
0312 2422 CLR R2
0313 92200062 STS hou,R2
(0249) day++;
0315 91800066 LDS R24,day
0317 5F8F SUBI R24,0xFF
0318 93800066 STS day,R24
(0250) }
(0251) if(((year%4==0)&&(year%100!=0))||(year%400==0)) //判断是否为闰年 1为闰年
031A 91800063 LDS R24,year
031C 91900064 LDS R25,year+1
031E 7083 ANDI R24,3
031F 7090 ANDI R25,0
0320 3080 CPI R24,0
0321 0789 CPC R24,R25
0322 F459 BNE 0x032E
0323 E624 LDI R18,0x64
0324 E030 LDI R19,0
0325 91000063 LDS R16,year
0327 91100064 LDS R17,year+1
0329 940E05A0 CALL mod16u
032B 3000 CPI R16,0
032C 0701 CPC R16,R17
032D F461 BNE 0x033A
032E E920 LDI R18,0x90
032F E031 LDI R19,1
0330 91000063 LDS R16,year
0332 91100064 LDS R17,year+1
0334 940E05A0 CALL mod16u
0336 3000 CPI R16,0
0337 0701 CPC R16,R17
0338 F009 BEQ 0x033A
0339 C074 RJMP 0x03AE
(0252) {
(0253) if((month==2)&&(day==30))//闰年2月份是29天
033A 91800065 LDS R24,month
033C 3082 CPI R24,2
033D F469 BNE 0x034B
033E 91800066 LDS R24,day
0340 318E CPI R24,0x1E
0341 F449 BNE 0x034B
(0254) {
(0255) month++;
0342 91800065 LDS R24,month
0344 5F8F SUBI R24,0xFF
0345 93800065 STS month,R24
(0256) day=0;
0347 2422 CLR R2
0348 92200066 STS day,R2
(0257) }
034A C0D3 RJMP 0x041E
(0258) else if((month<=7)&&(month%2==0)&&(day==31))//其他月份小于等于7月份的偶数月份是30天
034B E087 LDI R24,7
034C 90200065 LDS R2,month
034E 1582 CP R24,R2
034F F098 BCS 0x0363
0350 E012 LDI R17,2
0351 2D02 MOV R16,R2
0352 940E05BC CALL mod8u
0354 2300 TST R16
0355 F469 BNE 0x0363
0356 91800066 LDS R24,day
0358 318F CPI R24,0x1F
0359 F449 BNE 0x0363
(0259) {
(0260) month++;
035A 91800065 LDS R24,month
035C 5F8F SUBI R24,0xFF
035D 93800065 STS month,R24
(0261) day=0;
035F 2422 CLR R2
0360 92200066 STS day,R2
(0262) }
0362 C0BB RJMP 0x041E
(0263) else if((month<=7)&&(month%2!=0)&&(day==32))//奇数是31天;
0363 E087 LDI R24,7
0364 90200065 LDS R2,month
0366 1582 CP R24,R2
0367 F098 BCS 0x037B
0368 E012 LDI R17,2
0369 2D02 MOV R16,R2
036A 940E05BC CALL mod8u
036C 2300 TST R16
036D F069 BEQ 0x037B
036E 91800066 LDS R24,day
0370 3280 CPI R24,0x20
0371 F449 BNE 0x037B
(0264) {
(0265) month++;
0372 91800065 LDS R24,month
0374 5F8F SUBI R24,0xFF
0375 93800065 STS month,R24
(0266) day=0;
0377 2422 CLR R2
0378 92200066 STS day,R2
(0267) }
037A C0A3 RJMP 0x041E
(0268) else if((month>7)&&(month%2==0)&&(day==32))//大于7月份的偶数月份是31天
037B E087 LDI R24,7
037C 90200065 LDS R2,month
037E 1582 CP R24,R2
037F F498 BCC 0x0393
0380 E012 LDI R17,2
0381 2D02 MOV R16,R2
0382 940E05BC CALL mod8u
0384 2300 TST R16
0385 F469 BNE 0x0393
0386 91800066 LDS R24,day
0388 3280 CPI R24,0x20
0389 F449 BNE 0x0393
(0269) {
(0270) month++;
038A 91800065 LDS R24,month
038C 5F8F SUBI R24,0xFF
038D 93800065 STS month,R24
(0271) day=0;
038F 2422 CLR R2
0390 92200066 STS day,R2
(0272) }
0392 C08B RJMP 0x041E
(0273) else if((month>7)&&(month%2!=0)&&(day==31))//奇数是30天;
0393 E087 LDI R24,7
0394 90200065 LDS R2,month
0396 1582 CP R24,R2
0397 F008 BCS 0x0399
0398 C085 RJMP 0x041E
0399 E012 LDI R17,2
039A 2D02 MOV R16,R2
039B 940E05BC CALL mod8u
039D 2300 TST R16
039E F409 BNE 0x03A0
039F C07E RJMP 0x041E
03A0 91800066 LDS R24,day
03A2 318F CPI R24,0x1F
03A3 F009 BEQ 0x03A5
03A4 C079 RJMP 0x041E
(0274) {
(0275) month++;
03A5 91800065 LDS R24,month
03A7 5F8F SUBI R24,0xFF
03A8 93800065 STS month,R24
(0276) day=0;
03AA 2422 CLR R2
03AB 92200066 STS day,R2
(0277) }
(0278) }
03AD C070 RJMP 0x041E
(0279) else if((month==2)&&(day==29))//不是闰年二月份是28天;
03AE 91800065 LDS R24,month
03B0 3082 CPI R24,2
03B1 F469 BNE 0x03BF
03B2 91800066 LDS R24,day
03B4 318D CPI R24,0x1D
03B5 F449 BNE 0x03BF
(0280) {
(0281) month++;
03B6 91800065 LDS R24,month
03B8 5F8F SUBI R24,0xFF
03B9 93800065 STS month,R24
(0282) day=0;
03BB 2422 CLR R2
03BC 92200066 STS day,R2
(0283) }
03BE C05F RJMP 0x041E
(0284) else if((month<=7)&&(month%2==0)&&(day==31))//其他月份小于等于7月份的偶数月份是30天
03BF E087 LDI R24,7
03C0 90200065 LDS R2,month
03C2 1582 CP R24,R2
03C3 F098 BCS 0x03D7
03C4 E012 LDI R17,2
03C5 2D02 MOV R16,R2
03C6 940E05BC CALL mod8u
03C8 2300 TST R16
03C9 F469 BNE 0x03D7
03CA 91800066 LDS R24,day
03CC 318F CPI R24,0x1F
03CD F449 BNE 0x03D7
(0285) {
(0286) month++;
03CE 91800065 LDS R24,month
03D0 5F8F SUBI R24,0xFF
03D1 93800065 STS month,R24
(0287) day=0;
03D3 2422 CLR R2
03D4 92200066 STS day,R2
(0288) }
03D6 C047 RJMP 0x041E
(0289) else if((month<=7)&&(month%2!=0)&&(day==32))//奇数是31天;
03D7 E087 LDI R24,7
03D8 90200065 LDS R2,month
03DA 1582 CP R24,R2
03DB F098 BCS 0x03EF
03DC E012 LDI R17,2
03DD 2D02 MOV R16,R2
03DE 940E05BC CALL mod8u
03E0 2300 TST R16
03E1 F069 BEQ 0x03EF
03E2 91800066 LDS R24,day
03E4 3280 CPI R24,0x20
03E5 F449 BNE 0x03EF
(0290) {
(0291) month++;
03E6 91800065 LDS R24,month
03E8 5F8F SUBI R24,0xFF
03E9 93800065 STS month,R24
(0292) day=0;
03EB 2422 CLR R2
03EC 92200066 STS day,R2
(0293) }
03EE C02F RJMP 0x041E
(0294) else if((month>7)&&(month%2==0)&&(day==32))//大于7月份的偶数月份是31天
03EF E087 LDI R24,7
03F0 90200065 LDS R2,month
03F2 1582 CP R24,R2
03F3 F498 BCC 0x0407
03F4 E012 LDI R17,2
03F5 2D02 MOV R16,R2
03F6 940E05BC CALL mod8u
03F8 2300 TST R16
03F9 F469 BNE 0x0407
03FA 91800066 LDS R24,day
03FC 3280 CPI R24,0x20
03FD F449 BNE 0x0407
(0295) {
(0296) month++;
03FE 91800065 LDS R24,month
0400 5F8F SUBI R24,0xFF
0401 93800065 STS month,R24
(0297) day=0;
0403 2422 CLR R2
0404 92200066 STS day,R2
(0298) }
0406 C017 RJMP 0x041E
(0299) else if((month>7)&&(month%2!=0)&&(day==31))//奇数是30天;
0407 E087 LDI R24,7
0408 90200065 LDS R2,month
040A 1582 CP R24,R2
040B F490 BCC 0x041E
040C E012 LDI R17,2
040D 2D02 MOV R16,R2
040E 940E05BC CALL mod8u
0410 2300 TST R16
0411 F061 BEQ 0x041E
0412 91800066 LDS R24,day
0414 318F CPI R24,0x1F
0415 F441 BNE 0x041E
(0300) {
(0301) month++;
0416 91800065 LDS R24,month
0418 5F8F SUBI R24,0xFF
0419 93800065 STS month,R24
(0302) day=0;
041B 2422 CLR R2
041C 92200066 STS day,R2
(0303) }
(0304) if(month==13)
041E 91800065 LDS R24,month
0420 308D CPI R24,0xD
0421 F461 BNE 0x042E
(0305) {
(0306) year++;
0422 91800063 LDS R24,year
0424 91900064 LDS R25,year+1
0426 9601 ADIW R24,1
0427 93900064 STS year+1,R25
0429 93800063 STS year,R24
(0307) month=0;
042B 2422 CLR R2
042C 92200065 STS month,R2
(0308) }
(0309)
(0310) }
(0311)
(0312)
(0313) TCNT1H = 0xC2; //reload counter high value
042E EC82 LDI R24,0xC2
042F BD8D OUT 0x2D,R24
(0314) TCNT1L = 0xF7; //reload counter low value
0430 EF87 LDI R24,0xF7
0431 BD8C OUT 0x2C,R24
(0315) WDR();
0432 95A8 WDR
0433 9029 LD R2,Y+
0434 BE2F OUT 0x3F,R2
0435 9199 LD R25,Y+
0436 9189 LD R24,Y+
0437 9139 LD R19,Y+
0438 9129 LD R18,Y+
0439 9119 LD R17,Y+
043A 9109 LD R16,Y+
043B 9029 LD R2,Y+
043C 9518 RETI
_int0_isr:
043D 940E05F6 CALL push_lset
(0316) }
(0317) //******************************************************************
(0318) //每按一次时间设定键,其值加1,在正常情况下为0,每加1代表要修改的位置变化一次;
(0319) #pragma interrupt_handler int0_isr:2
(0320) void int0_isr(void)
(0321) {
(0322) //external interupt on INT0
(0323) WDR();
043F 95A8 WDR
(0324) GICR=0X40; //清除INT0中断,延时20MS判断是否为干扰;
0440 E480 LDI R24,0x40
0441 BF8B OUT 0x3B,R24
(0325) delay_ms(20);
0442 E104 LDI R16,0x14
0443 E010 LDI R17,0
0444 DC54 RCALL _delay_ms
(0326) if((PIND&0x04)==0x00)
0445 9982 SBIC 0x10,2
0446 C00C RJMP 0x0453
(0327) {
(0328) time_set++; //不是干扰,加1
0447 91800068 LDS R24,time_set
0449 5F8F SUBI R24,0xFF
044A 93800068 STS time_set,R24
(0329) if(time_set==7)//超过6次就返回正常状态;
044C 3087 CPI R24,7
044D F429 BNE 0x0453
(0330) {
(0331) time_set=0;
044E 2422 CLR R2
044F 92200068 STS time_set,R2
(0332) }
(0333) }
0451 C001 RJMP 0x0453
(0334) while((PIND&0x04)==0x00)//判断按键是否释放;
(0335) {
(0336) WDR(); //一定要在判断按键释放循环中喂狗;
0452 95A8 WDR
0453 9B82 SBIS 0x10,2
0454 CFFD RJMP 0x0452
(0337) }
(0338) GICR=0XC0;//恢复中断INT0
0455 EC80 LDI R24,0xC0
0456 BF8B OUT 0x3B,R24
0457 940E060D CALL pop_lset
0459 9518 RETI
_int1_isr:
045A 940E05F6 CALL push_lset
045C 940E05DF CALL push_gset1
(0339) }
(0340) //******************************************************************
(0341) //当time_set在某位时,单击此按键加一;
(0342) #pragma interrupt_handler int1_isr:3
(0343) void int1_isr(void)
(0344) {
(0345) //external interupt on INT1
(0346) WDR();
045E 95A8 WDR
(0347) GICR=0X80;
045F E880 LDI R24,0x80
0460 BF8B OUT 0x3B,R24
(0348) delay_ms(20);
0461 E104 LDI R16,0x14
0462 E010 LDI R17,0
0463 DC35 RCALL _delay_ms
(0349) if((PIND&0x08)==0x00)
0464 9983 SBIC 0x10,3
0465 C131 RJMP 0x0597
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -