📄 wnl.lst
字号:
053B 2766 CLR R22
053C C011 RJMP 0x054E
(0256) {
(0257) PORTB=~(1<<j);
053D E001 LDI R16,1
053E 2F16 MOV R17,R22
053F 940E06C1 CALL lsl8
0541 2E20 MOV R2,R16
0542 9420 COM R2
0543 BA28 OUT 0x18,R2
(0258) delay(50);
0544 E302 LDI R16,0x32
0545 E010 LDI R17,0
0546 DB3F RCALL _delay
(0259) m=PINB&0xf0; //屏蔽低四位
0547 B346 IN R20,0x16
0548 7F40 ANDI R20,0xF0
(0260) if(m!=0xf0)
0549 3F40 CPI R20,0xF0
054A F011 BEQ 0x054D
(0261) return 0xff;
054B EF0F LDI R16,0xFF
054C C004 RJMP 0x0551
054D 9563 INC R22
054E 3064 CPI R22,4
054F F368 BCS 0x053D
(0262) }
(0263) return 0x00;
0550 2700 CLR R16
0551 940E066E CALL pop_gset2
0553 9508 RET
(0264) }
(0265) void main(void)
(0266) {
(0267) unsigned char key,b=0,a=0;
_main:
a --> R20
b --> R22
key --> R10
0554 2766 CLR R22
0555 2744 CLR R20
(0268) SREG=0x80;
0556 E880 LDI R24,0x80
0557 BF8F OUT 0x3F,R24
(0269) TIMSK=0x01;
0558 E081 LDI R24,1
0559 BF87 OUT 0x37,R24
(0270) DDRA=0xff;
055A EF8F LDI R24,0xFF
055B BB8A OUT 0x1A,R24
(0271) PORTA=0xff;
055C BB8B OUT 0x1B,R24
(0272) timer0_init();
055D DE40 RCALL _timer0_init
(0273) ocmj_init();//初始化
055E DB34 RCALL _ocmj_init
(0274) ocmj_write(0xf4);//清屏
055F EF04 LDI R16,0xF4
0560 DB45 RCALL _ocmj_write
0561 C0C0 RJMP 0x0622
(0275) while(1)
(0276) {
(0277) while((ks()==0xff)&&(scan_key()==10)) //置时间,当有键按下,且键为10时,小时,分钟都置0
(0278) {
(0279) for(;;)
(0280) {
(0281) lcd_buff[0]=0;//小时
0562 2422 CLR R2
0563 92200109 STS lcd_buff,R2
(0282)
(0283) lcd_buff[1]=0;
0565 9220010A STS lcd_buff+1,R2
(0284) lcd_buff[2]=0; //分钟
0567 9220010B STS lcd_buff+2,R2
(0285) lcd_buff[3]=0;
0569 9220010C STS lcd_buff+3,R2
(0286) lcd_time1();//显示小时,分钟
056B DF0B RCALL _lcd_time1
(0287) second=0;
056C 2422 CLR R2
056D 92200100 STS second,R2
(0288) TCCR0=0x00;
056F BE23 OUT 0x33,R2
(0289) //**************************************
(0290) delay(65000); //还不明白,有待继续考虑?????????
0570 EE08 LDI R16,0xE8
0571 EF1D LDI R17,0xFD
0572 DB13 RCALL _delay
(0291) if(ks()==0xff) break;
0573 DFC1 RCALL _ks
0574 3F0F CPI R16,0xFF
0575 F761 BNE 0x0562
0576 C02D RJMP 0x05A4
(0292) //*********************************
(0293) }
(0294) while(1)
(0295) {
(0296) if(ks()==0xff)
0577 DFBD RCALL _ks
0578 3F0F CPI R16,0xFF
0579 F551 BNE 0x05A4
(0297) {
(0298) key=scan_key();
057A DB5B RCALL _scan_key
057B 2EA0 MOV R10,R16
(0299) lcd_buff[b]=key;
057C E089 LDI R24,0x9
057D E091 LDI R25,1
057E 2FE6 MOV R30,R22
057F 27FF CLR R31
0580 0FE8 ADD R30,R24
0581 1FF9 ADC R31,R25
0582 82A0 STD Z+0,R10
(0300) lcd_time();
0583 DE7D RCALL _lcd_time
(0301) delay(65000);
0584 EE08 LDI R16,0xE8
0585 EF1D LDI R17,0xFD
0586 DAFF RCALL _delay
(0302) b++;
0587 9563 INC R22
(0303) if(b>3)//再怎么按也无效
0588 E083 LDI R24,3
0589 1786 CP R24,R22
058A F4C8 BCC 0x05A4
(0304) {
(0305) hour=lcd_buff[0]*10+lcd_buff[1];
058B 90200109 LDS R2,lcd_buff
058D E08A LDI R24,0xA
058E 9D82 MUL R24,R2
058F 9020010A LDS R2,lcd_buff+1
0591 2C30 MOV R3,R0
0592 0C32 ADD R3,R2
0593 92300102 STS hour,R3
(0306) minute=lcd_buff[2]*10+lcd_buff[3];
0595 9020010B LDS R2,lcd_buff+2
0597 9D82 MUL R24,R2
0598 9020010C LDS R2,lcd_buff+3
059A 2C30 MOV R3,R0
059B 0C32 ADD R3,R2
059C 92300101 STS minute,R3
(0307) TCCR0=0x05;//128分频
059E E085 LDI R24,5
059F BF83 OUT 0x33,R24
(0308) TCNT0=0x00;
05A0 2422 CLR R2
05A1 BE22 OUT 0x32,R2
(0309) b=0;
05A2 2766 CLR R22
(0310) break;
05A3 C001 RJMP 0x05A5
05A4 CFD2 RJMP 0x0577
05A5 DF8F RCALL _ks
05A6 3F0F CPI R16,0xFF
05A7 F421 BNE 0x05AC
05A8 DB2D RCALL _scan_key
05A9 300A CPI R16,0xA
05AA F409 BNE 0x05AC
05AB CFB6 RJMP 0x0562
05AC C06E RJMP 0x061B
(0311) }
(0312) }
(0313) }
(0314) }
(0315) while((ks()==0xff)&&(scan_key()==11)) //置日历和星期//按下后,其显年,月,日,置0,星期置1
(0316) {
(0317) flag=1;
05AD E081 LDI R24,1
05AE 93800108 STS flag,R24
(0318) for(;;)
(0319) {
(0320) lcd_buff1[0]=0;
05B0 2422 CLR R2
05B1 9220010D STS lcd_buff1,R2
(0321) lcd_buff1[1]=0;
05B3 9220010E STS lcd_buff1+1,R2
(0322) lcd_buff1[2]=0;
05B5 9220010F STS lcd_buff1+2,R2
(0323) lcd_buff1[3]=0;
05B7 92200110 STS lcd_buff1+3,R2
(0324) lcd_buff1[4]=0;
05B9 92200111 STS 0x111,R2
(0325) lcd_buff1[5]=0;
05BB 92200112 STS 0x112,R2
(0326) lcd_buff1[6]=0;
05BD 92200113 STS 0x113,R2
(0327) lcd_buff1[7]=0;
05BF 92200114 STS 0x114,R2
(0328) lcd_buff1[8]=1;
05C1 E081 LDI R24,1
05C2 93800115 STS 0x115,R24
(0329) lcd_time1(); //显示年月,日,星期
05C4 DEB2 RCALL _lcd_time1
(0330) delay(65000);
05C5 EE08 LDI R16,0xE8
05C6 EF1D LDI R17,0xFD
05C7 DABE RCALL _delay
(0331) if(ks()==0xff)//同上,有待考虑
05C8 DF6C RCALL _ks
05C9 3F0F CPI R16,0xFF
05CA F729 BNE 0x05B0
05CB C04E RJMP 0x061A
(0332) break;
(0333) }
(0334) while(1)
(0335) {
(0336) if(ks()==0xff) //有键按下
05CC DF68 RCALL _ks
05CD 3F0F CPI R16,0xFF
05CE F009 BEQ 0x05D0
05CF C04A RJMP 0x061A
(0337) {
(0338) key=scan_key();
05D0 DB05 RCALL _scan_key
05D1 2EA0 MOV R10,R16
(0339) lcd_buff1[a]=key;
05D2 E08D LDI R24,0xD
05D3 E091 LDI R25,1
05D4 2FE4 MOV R30,R20
05D5 27FF CLR R31
05D6 0FE8 ADD R30,R24
05D7 1FF9 ADC R31,R25
05D8 82A0 STD Z+0,R10
(0340) lcd_time1();
05D9 DE9D RCALL _lcd_time1
(0341) delay(65000);
05DA EE08 LDI R16,0xE8
05DB EF1D LDI R17,0xFD
05DC DAA9 RCALL _delay
(0342) a++;
05DD 9543 INC R20
(0343) if(a>8)
05DE E088 LDI R24,0x8
05DF 1784 CP R24,R20
05E0 F5C8 BCC 0x061A
(0344) {
(0345) year=lcd_buff1[0]*1000+lcd_buff1[1]*100+lcd_buff1[2]*10+lcd_buff1[3];
05E1 9020010E LDS R2,lcd_buff1+1
05E3 E684 LDI R24,0x64
05E4 9D82 MUL R24,R2
05E5 0110 MOVW R2,R0
05E6 9120010D LDS R18,lcd_buff1
05E8 2733 CLR R19
05E9 EE08 LDI R16,0xE8
05EA E013 LDI R17,3
05EB 940E065E CALL empy16s
05ED 0128 MOVW R4,R16
05EE 0C42 ADD R4,R2
05EF 1C53 ADC R5,R3
05F0 9020010F LDS R2,lcd_buff1+2
05F2 E08A LDI R24,0xA
05F3 9D82 MUL R24,R2
05F4 0C40 ADD R4,R0
05F5 1C51 ADC R5,R1
05F6 90200110 LDS R2,lcd_buff1+3
05F8 2433 CLR R3
05F9 0C42 ADD R4,R2
05FA 1C53 ADC R5,R3
05FB 92500107 STS year+1,R5
05FD 92400106 STS year,R4
(0346) month=lcd_buff1[4]*10+lcd_buff1[5];
05FF 90200111 LDS R2,0x111
0601 9D82 MUL R24,R2
0602 90200112 LDS R2,0x112
0604 2C30 MOV R3,R0
0605 0C32 ADD R3,R2
0606 92300105 STS month,R3
(0347) days=lcd_buff1[6]*10+lcd_buff1[7];
0608 90200113 LDS R2,0x113
060A 9D82 MUL R24,R2
060B 90200114 LDS R2,0x114
060D 2C30 MOV R3,R0
060E 0C32 ADD R3,R2
060F 92300104 STS days,R3
(0348) day=lcd_buff1[8];
0611 90200115 LDS R2,0x115
0613 92200103 STS day,R2
(0349) a=0;
0615 2744 CLR R20
(0350) flag=0; //见显示部分
0616 2422 CLR R2
0617 92200108 STS flag,R2
(0351) break;
FILE: <library>
0619 C001 RJMP 0x061B
061A CFB1 RJMP 0x05CC
061B DF19 RCALL _ks
061C 3F0F CPI R16,0xFF
061D F421 BNE 0x0622
061E DAB7 RCALL _scan_key
061F 300B CPI R16,0xB
0620 F409 BNE 0x0622
0621 CF8B RJMP 0x05AD
0622 CF82 RJMP 0x05A5
0623 9508 RET
mod16s:
0624 9468 BSET 6
0625 92DA ST R13,-Y
0626 2ED1 MOV R13,R17
0627 C004 RJMP 0x062C
div16s:
0628 94E8 BCLR 6
0629 92DA ST R13,-Y
062A 2ED1 MOV R13,R17
062B 26D3 EOR R13,R19
062C FF17 SBRS R17,7
062D C004 RJMP 0x0632
062E 9510 COM R17
062F 9500 COM R16
0630 5F0F SUBI R16,0xFF
0631 4F1F SBCI R17,0xFF
0632 FF37 SBRS R19,7
0633 C004 RJMP 0x0638
0634 9530 COM R19
0635 9520 COM R18
0636 5F2F SUBI R18,0xFF
0637 4F3F SBCI R19,0xFF
0638 940E0645 CALL xdiv16u
063A FED7 SBRS R13,7
063B C004 RJMP 0x0640
063C 9510 COM R17
063D 9500 COM R16
063E 5F0F SUBI R16,0xFF
063F 4F1F SBCI R17,0xFF
0640 90D9 LD R13,Y+
0641 9508 RET
mod16u:
0642 9468 BSET 6
0643 C001 RJMP xdiv16u
div16u:
0644 94E8 BCLR 6
xdiv16u:
0645 92EA ST R14,-Y
0646 92FA ST R15,-Y
0647 938A ST R24,-Y
0648 24EE CLR R14
0649 24FF CLR R15
064A E180 LDI R24,0x10
064B 0F00 LSL R16
064C 1F11 ROL R17
064D 1CEE ROL R14
064E 1CFF ROL R15
064F 16E2 CP R14,R18
0650 06F3 CPC R15,R19
0651 F018 BCS 0x0655
0652 1AE2 SUB R14,R18
0653 0AF3 SBC R15,R19
0654 9503 INC R16
0655 958A DEC R24
0656 F7A1 BNE 0x064B
0657 F416 BRTC 0x065A
0658 2D0E MOV R16,R14
0659 2D1F MOV R17,R15
065A 9189 LD R24,Y+
065B 90F9 LD R15,Y+
065C 90E9 LD R14,Y+
065D 9508 RET
empy16s:
065E 920A ST R0,-Y
065F 921A ST R1,-Y
0660 938A ST R24,-Y
0661 939A ST R25,-Y
0662 9F02 MUL R16,R18
0663 01C0 MOVW R24,R0
0664 9F12 MUL R17,R18
0665 0D90 ADD R25,R0
0666 9F03 MUL R16,R19
0667 0D90 ADD R25,R0
0668 018C MOVW R16,R24
0669 9199 LD R25,Y+
066A 9189 LD R24,Y+
066B 9019 LD R1,Y+
066C 9009 LD R0,Y+
066D 9508 RET
pop_gset2:
066E E0E2 LDI R30,2
066F 940C0680 JMP pop
pop_gset3:
0671 E0E4 LDI R30,4
0672 940C0680 JMP pop
push_gset5:
0674 92FA ST R15,-Y
0675 92EA ST R14,-Y
push_gset4:
0676 92DA ST R13,-Y
0677 92CA ST R12,-Y
push_gset3:
0678 92BA ST R11,-Y
0679 92AA ST R10,-Y
push_gset2:
067A 937A ST R23,-Y
067B 936A ST R22,-Y
push_gset1:
067C 935A ST R21,-Y
067D 934A ST R20,-Y
067E 9508 RET
pop_gset1:
067F E0E1 LDI R30,1
pop:
0680 9149 LD R20,Y+
0681 9159 LD R21,Y+
0682 FDE0 SBRC R30,0
0683 9508 RET
0684 9169 LD R22,Y+
0685 9179 LD R23,Y+
0686 FDE1 SBRC R30,1
0687 9508 RET
0688 90A9 LD R10,Y+
0689 90B9 LD R11,Y+
068A FDE2 SBRC R30,2
068B 9508 RET
068C 90C9 LD R12,Y+
068D 90D9 LD R13,Y+
068E FDE3 SBRC R30,3
068F 9508 RET
0690 90E9 LD R14,Y+
0691 90F9 LD R15,Y+
0692 9508 RET
push_lset:
0693 93FA ST R31,-Y
0694 93EA ST R30,-Y
0695 93BA ST R27,-Y
0696 93AA ST R26,-Y
0697 939A ST R25,-Y
0698 938A ST R24,-Y
0699 933A ST R19,-Y
069A 932A ST R18,-Y
069B 931A ST R17,-Y
069C 930A ST R16,-Y
069D 929A ST R9,-Y
069E 928A ST R8,-Y
069F 927A ST R7,-Y
06A0 926A ST R6,-Y
06A1 925A ST R5,-Y
06A2 924A ST R4,-Y
06A3 923A ST R3,-Y
06A4 922A ST R2,-Y
06A5 921A ST R1,-Y
06A6 920A ST R0,-Y
06A7 B60F IN R0,0x3F
06A8 920A ST R0,-Y
06A9 9508 RET
pop_lset:
06AA 9009 LD R0,Y+
06AB BE0F OUT 0x3F,R0
06AC 9009 LD R0,Y+
06AD 9019 LD R1,Y+
06AE 9029 LD R2,Y+
06AF 9039 LD R3,Y+
06B0 9049 LD R4,Y+
06B1 9059 LD R5,Y+
06B2 9069 LD R6,Y+
06B3 9079 LD R7,Y+
06B4 9089 LD R8,Y+
06B5 9099 LD R9,Y+
06B6 9109 LD R16,Y+
06B7 9119 LD R17,Y+
06B8 9129 LD R18,Y+
06B9 9139 LD R19,Y+
06BA 9189 LD R24,Y+
06BB 9199 LD R25,Y+
06BC 91A9 LD R26,Y+
06BD 91B9 LD R27,Y+
06BE 91E9 LD R30,Y+
06BF 91F9 LD R31,Y+
06C0 9508 RET
lsl8:
06C1 2311 TST R17
06C2 F019 BEQ 0x06C6
06C3 0F00 LSL R16
06C4 951A DEC R17
06C5 CFFB RJMP lsl8
06C6 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -