📄 18lcd.lst
字号:
0670 4F5F SBCI R21,0xFF
(0263) x ++;
0671 94A3 INC R10
(0264) i ++;
0672 9563 INC R22
(0265) if (x > 63) { /*判断地址是否越界*/
0673 E38F LDI R24,0x3F
0674 158A CP R24,R10
0675 F408 BCC 0x0677
(0266) break;
0676 C002 RJMP 0x0679
0677 3160 CPI R22,0x10
0678 F398 BCS 0x066C
(0267) }
(0268) }
(0269) }
(0270) if (i < 16) { /*地址进入左半屏范围*/
0679 3160 CPI R22,0x10
067A F488 BCC 0x068C
(0271) LCD1_write_com((y+1) | 0xB8);
067B 2D0C MOV R16,R12
067C 5F0F SUBI R16,0xFF
067D 6B08 ORI R16,0xB8
067E DEC1 RCALL _LCD1_write_com
(0272) LCD1_write_com(x | 0x40);
067F 2D0A MOV R16,R10
0680 6400 ORI R16,0x40
0681 DEBE RCALL _LCD1_write_com
0682 C007 RJMP 0x068A
(0273) while (i < 16) {
(0274) LCD1_write_data(*q);
0683 01FA MOVW R30,R20
0684 9104 LPM R16,0(Z)
0685 DEDA RCALL _LCD1_write_data
(0275) q ++;
0686 5F4F SUBI R20,0xFF
0687 4F5F SBCI R21,0xFF
(0276) x ++;
0688 94A3 INC R10
(0277) i ++;
0689 9563 INC R22
068A 3160 CPI R22,0x10
068B F3B8 BCS 0x0683
(0278) }
(0279) }
(0280) CSA_CLR;
068C 98AF CBI 0x15,7
(0281) CSB_CLR;
068D 98AE CBI 0x15,6
068E 940E07C2 CALL pop_gset4
0690 9508 RET
_disp_char_str:
str --> R20
y --> R22
x --> R10
0691 940E07CC CALL push_gset3
0693 2F62 MOV R22,R18
0694 2EA0 MOV R10,R16
0695 9721 SBIW R28,1
0696 814F LDD R20,Y+7
0697 8558 LDD R21,Y+8
(0282) }
(0283)
(0284) /*显示一串字符*/
(0285) void disp_char_str(unsigned char x, unsigned char y, unsigned char *str) {
0698 C00B RJMP 0x06A4
(0286)
(0287) while (*str != 0) {
(0288) disp_char(x, y, *str);
0699 01FA MOVW R30,R20
069A 8020 LDD R2,Z+0
069B 8228 STD Y+0,R2
069C 2F26 MOV R18,R22
069D 2D0A MOV R16,R10
069E DF1D RCALL _disp_char
(0289) x += 8;
069F 2D8A MOV R24,R10
06A0 5F88 SUBI R24,0xF8
06A1 2EA8 MOV R10,R24
(0290) str ++;
06A2 5F4F SUBI R20,0xFF
06A3 4F5F SBCI R21,0xFF
06A4 01FA MOVW R30,R20
06A5 8020 LDD R2,Z+0
06A6 2022 TST R2
06A7 F789 BNE 0x0699
06A8 9621 ADIW R28,1
06A9 940E07BF CALL pop_gset3
06AB 9508 RET
(0291) }
(0292) }
(0293)
(0294) /*显示屏初始化函数*/
(0295) void disp_init(void) {
(0296)
(0297) DDRA = 0xFF; /*I/O口方向设置*/
_disp_init:
06AC EF8F LDI R24,0xFF
06AD BB8A OUT 0x1A,R24
(0298) DDRC = 0xFF;
06AE BB84 OUT 0x14,R24
(0299)
(0300) RST_CLR;
06AF 98AD CBI 0x15,5
(0301) delay_ms(10);
06B0 E00A LDI R16,0xA
06B1 DE6F RCALL _delay_ms
(0302) RST_SET;
06B2 9AAD SBI 0x15,5
(0303)
(0304) LCD0_write_com(0xC0); /*显示起行设置*/
06B3 EC00 LDI R16,0xC0
06B4 DE7B RCALL _LCD0_write_com
(0305) LCD1_write_com(0xC0);
06B5 EC00 LDI R16,0xC0
06B6 DE89 RCALL _LCD1_write_com
(0306)
(0307) LCD0_write_com(0x3F); /*开显示设置*/
06B7 E30F LDI R16,0x3F
06B8 DE77 RCALL _LCD0_write_com
(0308) LCD1_write_com(0x3F);
06B9 E30F LDI R16,0x3F
06BA DE85 RCALL _LCD1_write_com
06BB 9508 RET
_disp_myself:
q --> R20
i --> R22
ascii --> Y+8
y --> R12
x --> R10
06BC 940E07CA CALL push_gset4
06BE 2EC2 MOV R12,R18
06BF 2EA0 MOV R10,R16
(0309) }
(0310)
(0311) /*在指定位置显示一个8*8的 字符*/
(0312) void disp_myself(unsigned char x, unsigned char y, unsigned char ascii) {
(0313)
(0314) unsigned char i = 0x00;
06C0 2766 CLR R22
(0315) const unsigned char *q; /*取字库指针*/
(0316)
(0317)
(0318) ascii -= 0x20;
06C1 8588 LDD R24,Y+8
06C2 5280 SUBI R24,0x20
06C3 8788 STD Y+8,R24
(0319) q = &ENGLISH_FONT[ascii *16]; /*定位指针地址*/
06C4 E180 LDI R24,0x10
06C5 8408 LDD R0,Y+8
06C6 9D80 MUL R24,R0
06C7 01A0 MOVW R20,R0
06C8 E780 LDI R24,0x70
06C9 E090 LDI R25,0
06CA 0F48 ADD R20,R24
06CB 1F59 ADC R21,R25
(0320)
(0321) /*显示高8位*/
(0322) i = 0x00;
(0323) if (x < 64) { /*地址在左半屏范围内*/
06CC 2D8A MOV R24,R10
06CD 3480 CPI R24,0x40
06CE F4A0 BCC 0x06E3
(0324) LCD0_write_com(y | 0xB8);
06CF 2D0C MOV R16,R12
06D0 6B08 ORI R16,0xB8
06D1 DE5E RCALL _LCD0_write_com
(0325) LCD0_write_com(x | 0x40);
06D2 2D0A MOV R16,R10
06D3 6400 ORI R16,0x40
06D4 DE5B RCALL _LCD0_write_com
06D5 C00B RJMP 0x06E1
(0326) while (i < 8) {
(0327) LCD0_write_data(*q);
06D6 01FA MOVW R30,R20
06D7 9104 LPM R16,0(Z)
06D8 DE77 RCALL _LCD0_write_data
(0328) q ++;
06D9 5F4F SUBI R20,0xFF
06DA 4F5F SBCI R21,0xFF
(0329) x ++;
06DB 94A3 INC R10
(0330) i ++;
06DC 9563 INC R22
(0331) if (x > 63) { /*判断地址是否越界*/
06DD E38F LDI R24,0x3F
06DE 158A CP R24,R10
06DF F408 BCC 0x06E1
(0332) break;
06E0 C002 RJMP 0x06E3
06E1 3068 CPI R22,0x8
06E2 F398 BCS 0x06D6
(0333) }
(0334) }
(0335) }
(0336) if (i < 8) { /*地址进入左半屏范围*/
06E3 3068 CPI R22,0x8
06E4 F480 BCC 0x06F5
(0337) LCD1_write_com(y | 0xB8);
06E5 2D0C MOV R16,R12
06E6 6B08 ORI R16,0xB8
06E7 DE58 RCALL _LCD1_write_com
(0338) LCD1_write_com(x | 0x40);
06E8 2D0A MOV R16,R10
06E9 6400 ORI R16,0x40
06EA DE55 RCALL _LCD1_write_com
06EB C007 RJMP 0x06F3
(0339) while (i < 8) {
(0340) LCD1_write_data(*q);
06EC 01FA MOVW R30,R20
06ED 9104 LPM R16,0(Z)
06EE DE71 RCALL _LCD1_write_data
(0341) q ++;
06EF 5F4F SUBI R20,0xFF
06F0 4F5F SBCI R21,0xFF
(0342) x ++;
06F1 94A3 INC R10
(0343) i ++;
06F2 9563 INC R22
06F3 3068 CPI R22,0x8
06F4 F3B8 BCS 0x06EC
(0344) }
(0345) }
06F5 940E07C2 CALL pop_gset4
06F7 9508 RET
_disp_to_bcd:
f --> R14
e --> R12
b --> R10
c --> R22
a --> R20
d --> R10
x --> R22
06F8 940E07C8 CALL push_gset5
06FA 01B8 MOVW R22,R16
06FB 9722 SBIW R28,2
(0346) }
(0347)
(0348)
(0349) void disp_to_bcd(int x){
(0350) unsigned int a=x%10,b=x/10,c=b%10,d=b/10,e=d%10,f=d/10;
06FC E02A LDI R18,0xA
06FD E030 LDI R19,0
06FE 018B MOVW R16,R22
06FF 940E0782 CALL mod16s
0701 01A8 MOVW R20,R16
0702 E02A LDI R18,0xA
0703 E030 LDI R19,0
0704 018B MOVW R16,R22
0705 940E0786 CALL div16s
0707 0158 MOVW R10,R16
0708 E02A LDI R18,0xA
0709 E030 LDI R19,0
070A 940E07A0 CALL mod16u
070C 01B8 MOVW R22,R16
070D E02A LDI R18,0xA
070E E030 LDI R19,0
070F 0185 MOVW R16,R10
0710 940E07A2 CALL div16u
0712 0158 MOVW R10,R16
0713 E02A LDI R18,0xA
0714 E030 LDI R19,0
0715 940E07A0 CALL mod16u
0717 0168 MOVW R12,R16
0718 E02A LDI R18,0xA
0719 E030 LDI R19,0
071A 0185 MOVW R16,R10
071B 940E07A2 CALL div16u
071D 0178 MOVW R14,R16
(0351) a+=48,c+=48,e+=48,f+=48;
071E 5D40 SUBI R20,0xD0
071F 4F5F SBCI R21,0xFF
0720 5D60 SUBI R22,0xD0
0721 4F7F SBCI R23,0xFF
0722 01C6 MOVW R24,R12
0723 96C0 ADIW R24,0x30
0724 016C MOVW R12,R24
0725 01C7 MOVW R24,R14
0726 96C0 ADIW R24,0x30
0727 017C MOVW R14,R24
(0352) disp_char(40, 2, f);
0728 82E8 STD Y+0,R14
0729 E022 LDI R18,2
072A E208 LDI R16,0x28
072B DE90 RCALL _disp_char
(0353) disp_char(48, 2, e);
072C 82C8 STD Y+0,R12
072D E022 LDI R18,2
072E E300 LDI R16,0x30
072F DE8C RCALL _disp_char
(0354) disp_char_str(56, 2, ".");
0730 E084 LDI R24,4
0731 E091 LDI R25,1
0732 8399 STD Y+1,R25
0733 8388 STD Y+0,R24
0734 E022 LDI R18,2
0735 E308 LDI R16,0x38
0736 DF5A RCALL _disp_char_str
(0355) disp_char(64, 2, c);
0737 8368 STD Y+0,R22
0738 E022 LDI R18,2
0739 E400 LDI R16,0x40
073A DE81 RCALL _disp_char
(0356) disp_char(72, 2, a);
073B 8348 STD Y+0,R20
073C E022 LDI R18,2
073D E408 LDI R16,0x48
073E DE7D RCALL _disp_char
(0357) disp_char_str(80, 2, "V");
073F E082 LDI R24,2
0740 E091 LDI R25,1
0741 8399 STD Y+1,R25
0742 8388 STD Y+0,R24
0743 E022 LDI R18,2
0744 E500 LDI R16,0x50
0745 DF4B RCALL _disp_char_str
(0358) if(d<11||d==11&&c==0&&a==0){
0746 01C5 MOVW R24,R10
0747 308B CPI R24,0xB
0748 E0E0 LDI R30,0
0749 079E CPC R25,R30
074A F050 BCS 0x0755
074B 308B CPI R24,0xB
074C E0E0 LDI R30,0
074D 079E CPC R25,R30
074E F4D9 BNE 0x076A
074F 3060 CPI R22,0
0750 0767 CPC R22,R23
0751 F4C1 BNE 0x076A
0752 3040 CPI R20,0
0753 0745 CPC R20,R21
0754 F4A9 BNE 0x076A
(0359) disp_word(32, 4, CB5E7); /*写入“电压偏低”四个汉字*/
0755 E086 LDI R24,6
0756 8388 STD Y+0,R24
0757 E024 LDI R18,4
0758 E200 LDI R16,0x20
0759 DECE RCALL _disp_word
(0360) disp_word(48, 4, CD1B9);
075A E087 LDI R24,7
075B 8388 STD Y+0,R24
075C E024 LDI R18,4
075D E300 LDI R16,0x30
075E DEC9 RCALL _disp_word
(0361) disp_word(64, 4, CC6AB);
075F E08A LDI R24,0xA
0760 8388 STD Y+0,R24
0761 E024 LDI R18,4
0762 E400 LDI R16,0x40
0763 DEC4 RCALL _disp_word
(0362) disp_word(80, 4, CB5CD);}
0764 E08B LDI R24,0xB
0765 8388 STD Y+0,R24
0766 E024 LDI R18,4
0767 E500 LDI R16,0x50
0768 DEBF RCALL _disp_word
0769 C014 RJMP 0x077E
(0363) else {
(0364) disp_word(32, 4, CB5E7); /*写入“电压正常”四个汉字*/
076A E086 LDI R24,6
076B 8388 STD Y+0,R24
076C E024 LDI R18,4
076D E200 LDI R16,0x20
076E DEB9 RCALL _disp_word
(0365) disp_word(48, 4, CD1B9);
076F E087 LDI R24,7
0770 8388 STD Y+0,R24
0771 E024 LDI R18,4
0772 E300 LDI R16,0x30
0773 DEB4 RCALL _disp_word
(0366) disp_word(64, 4, CD5ED);
0774 E088 LDI R24,0x8
0775 8388 STD Y+0,R24
0776 E024 LDI R18,4
0777 E400 LDI R16,0x40
0778 DEAF RCALL _disp_word
(0367) disp_word(80, 4, CB3A3); }
FILE: <library>
0779 E089 LDI R24,0x9
077A 8388 STD Y+0,R24
077B E024 LDI R18,4
077C E500 LDI R16,0x50
077D DEAA RCALL _disp_word
077E 9622 ADIW R28,2
077F 940E07C5 CALL pop_gset5
0781 9508 RET
mod16s:
0782 9468 BSET 6
0783 92DA ST R13,-Y
0784 2ED1 MOV R13,R17
0785 C004 RJMP 0x078A
div16s:
0786 94E8 BCLR 6
0787 92DA ST R13,-Y
0788 2ED1 MOV R13,R17
0789 26D3 EOR R13,R19
078A FF17 SBRS R17,7
078B C004 RJMP 0x0790
078C 9510 COM R17
078D 9500 COM R16
078E 5F0F SUBI R16,0xFF
078F 4F1F SBCI R17,0xFF
0790 FF37 SBRS R19,7
0791 C004 RJMP 0x0796
0792 9530 COM R19
0793 9520 COM R18
0794 5F2F SUBI R18,0xFF
0795 4F3F SBCI R19,0xFF
0796 940E07A3 CALL xdiv16u
0798 FED7 SBRS R13,7
0799 C004 RJMP 0x079E
079A 9510 COM R17
079B 9500 COM R16
079C 5F0F SUBI R16,0xFF
079D 4F1F SBCI R17,0xFF
079E 90D9 LD R13,Y+
079F 9508 RET
mod16u:
07A0 9468 BSET 6
07A1 C001 RJMP xdiv16u
div16u:
07A2 94E8 BCLR 6
xdiv16u:
07A3 92EA ST R14,-Y
07A4 92FA ST R15,-Y
07A5 938A ST R24,-Y
07A6 24EE CLR R14
07A7 24FF CLR R15
07A8 E180 LDI R24,0x10
07A9 0F00 LSL R16
07AA 1F11 ROL R17
07AB 1CEE ROL R14
07AC 1CFF ROL R15
07AD 16E2 CP R14,R18
07AE 06F3 CPC R15,R19
07AF F018 BCS 0x07B3
07B0 1AE2 SUB R14,R18
07B1 0AF3 SBC R15,R19
07B2 9503 INC R16
07B3 958A DEC R24
07B4 F7A1 BNE 0x07A9
07B5 F416 BRTC 0x07B8
07B6 2D0E MOV R16,R14
07B7 2D1F MOV R17,R15
07B8 9189 LD R24,Y+
07B9 90F9 LD R15,Y+
07BA 90E9 LD R14,Y+
07BB 9508 RET
pop_gset2:
07BC E0E2 LDI R30,2
07BD 940C07D4 JMP pop
pop_gset3:
07BF E0E4 LDI R30,4
07C0 940C07D4 JMP pop
pop_gset4:
07C2 E0E8 LDI R30,0x8
07C3 940C07D4 JMP pop
pop_gset5:
07C5 27EE CLR R30
07C6 940C07D4 JMP pop
push_gset5:
07C8 92FA ST R15,-Y
07C9 92EA ST R14,-Y
push_gset4:
07CA 92DA ST R13,-Y
07CB 92CA ST R12,-Y
push_gset3:
07CC 92BA ST R11,-Y
07CD 92AA ST R10,-Y
push_gset2:
07CE 937A ST R23,-Y
07CF 936A ST R22,-Y
push_gset1:
07D0 935A ST R21,-Y
07D1 934A ST R20,-Y
07D2 9508 RET
pop_gset1:
07D3 E0E1 LDI R30,1
pop:
07D4 9149 LD R20,Y+
07D5 9159 LD R21,Y+
07D6 FDE0 SBRC R30,0
07D7 9508 RET
07D8 9169 LD R22,Y+
07D9 9179 LD R23,Y+
07DA FDE1 SBRC R30,1
07DB 9508 RET
07DC 90A9 LD R10,Y+
07DD 90B9 LD R11,Y+
07DE FDE2 SBRC R30,2
07DF 9508 RET
07E0 90C9 LD R12,Y+
07E1 90D9 LD R13,Y+
07E2 FDE3 SBRC R30,3
07E3 9508 RET
07E4 90E9 LD R14,Y+
07E5 90F9 LD R15,Y+
07E6 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -