📄 tc_clock.lst
字号:
04D3 3180 CPI R24,0x10
04D4 F350 BCS 0x04BF
04D5 9563 INC R22
04D6 3064 CPI R22,4
04D7 F328 BCS 0x04BD
04D8 9543 INC R20
04D9 3048 CPI R20,0x8
04DA F2D8 BCS 0x04B6
04DB 940E0707 CALL pop_gset3
04DD 9508 RET
_LCD_CLS:
i --> R20
j --> R22
04DE 940E0713 CALL push_gset2
04E0 9721 SBIW R28,1
(0305)
(0306) }
(0307) }
(0308) }
(0309) /***************12864液晶清屏**********************/
(0310) void LCD_CLS()
(0311) {
(0312) uchar i,j;
(0313) LCDCS1H; //清左边屏幕
04E1 9A95 SBI 0x12,5
(0314) LCDCS2L;
04E2 9894 CBI 0x12,4
(0315) LCD_WRITE_COM(0x3F);
04E3 E30F LDI R16,0x3F
04E4 DEFF RCALL _LCD_WRITE_COM
(0316) LCD_WRITE_COM(0xC0);
04E5 EC00 LDI R16,0xC0
04E6 DEFD RCALL _LCD_WRITE_COM
(0317) for(i=0;i<4;i++)
04E7 2744 CLR R20
04E8 C00B RJMP 0x04F4
(0318) for(j=0;j<8;j++)
04E9 2766 CLR R22
04EA C006 RJMP 0x04F1
(0319) {
(0320) LCD_WRITE_ADD_CHAR(i,j,0x0C);
04EB E08C LDI R24,0xC
04EC 8388 STD Y+0,R24
04ED 2F26 MOV R18,R22
04EE 2F04 MOV R16,R20
04EF DF0B RCALL _LCD_WRITE_ADD_CHAR
04F0 9563 INC R22
04F1 3068 CPI R22,0x8
04F2 F3C0 BCS 0x04EB
04F3 9543 INC R20
04F4 3044 CPI R20,4
04F5 F398 BCS 0x04E9
(0321) }
(0322)
(0323) LCDCS1L; //清右边屏幕
04F6 9895 CBI 0x12,5
(0324) LCDCS2H;
04F7 9A94 SBI 0x12,4
(0325) LCD_WRITE_COM(0x3F);
04F8 E30F LDI R16,0x3F
04F9 DEEA RCALL _LCD_WRITE_COM
(0326) LCD_WRITE_COM(0xC0);
04FA EC00 LDI R16,0xC0
04FB DEE8 RCALL _LCD_WRITE_COM
(0327) for(i=0;i<4;i++)
04FC 2744 CLR R20
04FD C00B RJMP 0x0509
(0328) for(j=0;j<8;j++)
04FE 2766 CLR R22
04FF C006 RJMP 0x0506
(0329) {
(0330) LCD_WRITE_ADD_CHAR(i,j,0x0C);
0500 E08C LDI R24,0xC
0501 8388 STD Y+0,R24
0502 2F26 MOV R18,R22
0503 2F04 MOV R16,R20
0504 DEF6 RCALL _LCD_WRITE_ADD_CHAR
0505 9563 INC R22
0506 3068 CPI R22,0x8
0507 F3C0 BCS 0x0500
0508 9543 INC R20
0509 3044 CPI R20,4
050A F398 BCS 0x04FE
050B 9621 ADIW R28,1
050C 940E0704 CALL pop_gset2
050E 9508 RET
(0331) }
(0332) }
(0333)
(0334) //定时器0溢出中断函数
(0335)
(0336) /*****************************************/
(0337) void Timer1_INIT()
(0338) {
(0339) TCNT1H=0xB9; //在18.432MHz晶振下,取1024分频时钟设初值
_Timer1_INIT:
050F EB89 LDI R24,0xB9
0510 BD8D OUT 0x2D,R24
(0340) TCNT1L=0xAF;
0511 EA8F LDI R24,0xAF
0512 BD8C OUT 0x2C,R24
(0341) TCCR1A=0x00; //普通模式
0513 2422 CLR R2
0514 BC2F OUT 0x2F,R2
(0342) TCCR1B|=0x05; //时钟选择为1024分频模式
0515 B58E IN R24,0x2E
0516 6085 ORI R24,5
0517 BD8E OUT 0x2E,R24
(0343) SREG|=BIT(7); //使能全局中断
0518 9478 BSET 7
(0344) TIMSK|=0x04; //TIMSK的bit2为定时器1溢出中断使能
0519 B787 IN R24,0x37
051A 6084 ORI R24,4
051B BF87 OUT 0x37,R24
051C 9508 RET
_Timer1_int:
051D 922A ST R2,-Y
051E 938A ST R24,-Y
051F 939A ST R25,-Y
0520 B62F IN R2,0x3F
0521 922A ST R2,-Y
(0345) }
(0346) /****************************************
(0347) * 名称:Timer1_int() 定时器1中断函数
(0348) * 功能:实现秒计数
(0349) **************************************/
(0350) void Timer1_int()
(0351) {
(0352) TCNT1H=0xB9; //重装初值
0522 EB89 LDI R24,0xB9
0523 BD8D OUT 0x2D,R24
(0353) TCNT1L=0xAF;
0524 EA8F LDI R24,0xAF
0525 BD8C OUT 0x2C,R24
(0354) sec++;
0526 91800100 LDS R24,sec
0528 5F8F SUBI R24,0xFF
0529 93800100 STS sec,R24
(0355) if(sec==60)
052B 338C CPI R24,0x3C
052C F441 BNE 0x0535
(0356) {
(0357) sec=0;
052D 2422 CLR R2
052E 92200100 STS sec,R2
(0358) min++;
0530 91800101 LDS R24,min
0532 5F8F SUBI R24,0xFF
0533 93800101 STS min,R24
(0359) }
0535 9029 LD R2,Y+
0536 BE2F OUT 0x3F,R2
0537 9199 LD R25,Y+
0538 9189 LD R24,Y+
0539 9029 LD R2,Y+
053A 9518 RETI
_CLOCK:
053B 940E0713 CALL push_gset2
(0360) }
(0361) void CLOCK()
(0362) {
(0363) if(min==60)
053D 91800101 LDS R24,min
053F 338C CPI R24,0x3C
0540 F009 BEQ 0x0542
0541 C09B RJMP 0x05DD
(0364) {
(0365) min=0;
0542 2422 CLR R2
0543 92200101 STS min,R2
(0366) hour++;
0545 91800102 LDS R24,hour
0547 5F8F SUBI R24,0xFF
0548 93800102 STS hour,R24
(0367) if(hour==24)
054A 3188 CPI R24,0x18
054B F009 BEQ 0x054D
054C C080 RJMP 0x05CD
(0368) {
(0369) hour=0;
054D 92200102 STS hour,R2
(0370) date++;
054F 91800105 LDS R24,date
0551 5F8F SUBI R24,0xFF
0552 93800105 STS date,R24
(0371) day++;
0554 91800106 LDS R24,day
0556 5F8F SUBI R24,0xFF
0557 93800106 STS day,R24
(0372) if(day==8)
0559 3088 CPI R24,0x8
055A F419 BNE 0x055E
(0373) {day=1;}
055B E081 LDI R24,1
055C 93800106 STS day,R24
(0374) if(date==32&&((mon==1)|(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12)))
055E 91800105 LDS R24,date
0560 3280 CPI R24,0x20
0561 F569 BNE 0x058F
0562 91800104 LDS R24,mon
0564 3081 CPI R24,1
0565 F419 BNE 0x0569
0566 E061 LDI R22,1
0567 E070 LDI R23,0
0568 C002 RJMP 0x056B
0569 2766 CLR R22
056A 2777 CLR R23
056B 91800104 LDS R24,mon
056D 3083 CPI R24,3
056E F419 BNE 0x0572
056F E041 LDI R20,1
0570 E050 LDI R21,0
0571 C002 RJMP 0x0574
0572 2744 CLR R20
0573 2755 CLR R21
0574 011B MOVW R2,R22
0575 2A24 OR R2,R20
0576 2A35 OR R3,R21
0577 2022 TST R2
0578 F471 BNE 0x0587
0579 2033 TST R3
057A F461 BNE 0x0587
057B 91800104 LDS R24,mon
057D 3085 CPI R24,5
057E F041 BEQ 0x0587
057F 3087 CPI R24,7
0580 F031 BEQ 0x0587
0581 3088 CPI R24,0x8
0582 F021 BEQ 0x0587
0583 308A CPI R24,0xA
0584 F011 BEQ 0x0587
0585 308C CPI R24,0xC
0586 F441 BNE 0x058F
(0375) {
(0376) date=1;
0587 E081 LDI R24,1
0588 93800105 STS date,R24
(0377) mon++;
058A 91800104 LDS R24,mon
058C 5F8F SUBI R24,0xFF
058D 93800104 STS mon,R24
(0378) }
(0379) if(date==31&&mon!=2)
058F 91800105 LDS R24,date
0591 318F CPI R24,0x1F
0592 F461 BNE 0x059F
0593 91800104 LDS R24,mon
0595 3082 CPI R24,2
0596 F041 BEQ 0x059F
(0380) {
(0381) date=1;
0597 E081 LDI R24,1
0598 93800105 STS date,R24
(0382) mon++;
059A 91800104 LDS R24,mon
059C 5F8F SUBI R24,0xFF
059D 93800104 STS mon,R24
(0383) }
(0384) if(date==29&&mon==2&&year%4==0)
059F 91800105 LDS R24,date
05A1 318D CPI R24,0x1D
05A2 F499 BNE 0x05B6
05A3 91800104 LDS R24,mon
05A5 3082 CPI R24,2
05A6 F479 BNE 0x05B6
05A7 E014 LDI R17,4
05A8 91000103 LDS R16,year
05AA 940E06DC CALL mod8u
05AC 2300 TST R16
05AD F441 BNE 0x05B6
(0385) {
(0386) date=1;
05AE E081 LDI R24,1
05AF 93800105 STS date,R24
(0387) mon++;
05B1 91800104 LDS R24,mon
05B3 5F8F SUBI R24,0xFF
05B4 93800104 STS mon,R24
(0388) }
(0389) if(date==30&&mon==2&&year%4!=0)
05B6 91800105 LDS R24,date
05B8 318E CPI R24,0x1E
05B9 F499 BNE 0x05CD
05BA 91800104 LDS R24,mon
05BC 3082 CPI R24,2
05BD F479 BNE 0x05CD
05BE E014 LDI R17,4
05BF 91000103 LDS R16,year
05C1 940E06DC CALL mod8u
05C3 2300 TST R16
05C4 F041 BEQ 0x05CD
(0390) {
(0391) date=1;
05C5 E081 LDI R24,1
05C6 93800105 STS date,R24
(0392) mon++;
05C8 91800104 LDS R24,mon
05CA 5F8F SUBI R24,0xFF
05CB 93800104 STS mon,R24
(0393) }
(0394) }
(0395) if(mon==13)
05CD 91800104 LDS R24,mon
05CF 308D CPI R24,0xD
05D0 F461 BNE 0x05DD
(0396) {
(0397) mon=0;
05D1 2422 CLR R2
05D2 92200104 STS mon,R2
(0398) year++;
05D4 91800103 LDS R24,year
05D6 5F8F SUBI R24,0xFF
05D7 93800103 STS year,R24
(0399) if(year==100)
05D9 3684 CPI R24,0x64
05DA F411 BNE 0x05DD
(0400) {year=0;}
05DB 92200103 STS year,R2
(0401) }
(0402) }
05DD 940E0704 CALL pop_gset2
05DF 9508 RET
(0403) }
(0404)
(0405) /*********************************************
(0406) *函数名称:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -