📄 qingxi.lst
字号:
(0626) {
(0627) lcd_wd(lcd_data);/* Write display data */
0E11 2F06 MOV R16,R22
0E12 DEBA RCALL _lcd_wd
0E13 94A3 INC R10
0E14 2D8A MOV R24,R10
0E15 318E CPI R24,0x1E
0E16 F3D0 BCS 0x0E11
0E17 9543 INC R20
0E18 3840 CPI R20,0x80
0E19 F3A8 BCS 0x0E0F
(0628) }
(0629) }
(0630) lcd_wc(0xb2); /* Awroff (auto reset) */
0E1A EB02 LDI R16,0xB2
0E1B DEC7 RCALL _lcd_wc
0E1C 9621 ADIW R28,1
0E1D 940E1366 CALL pop_gset3
0E1F 9508 RET
_lcd_print:
lcd_data --> Y+5
y --> R22
x --> R20
0E20 940E1375 CALL push_gset2
0E22 2F62 MOV R22,R18
0E23 2F40 MOV R20,R16
0E24 9721 SBIW R28,1
(0631) }
(0632) /***********************************************************************************/
(0633) void lcd_print(uchar x,uchar y,uchar lcd_data)
(0634) {
(0635) lcd_wc(0x98);
0E25 E908 LDI R16,0x98
0E26 DEBC RCALL _lcd_wc
(0636) lcd_wc3(0x24,x,y);
0E27 8368 STD Y+0,R22
0E28 2F24 MOV R18,R20
0E29 E204 LDI R16,0x24
0E2A DECA RCALL _lcd_wc3
(0637) lcd_wc(0xb0);
0E2B EB00 LDI R16,0xB0
0E2C DEB6 RCALL _lcd_wc
(0638) lcd_wd(lcd_data);
0E2D 810D LDD R16,Y+5
0E2E DE9E RCALL _lcd_wd
(0639) lcd_wc(0xb2);
0E2F EB02 LDI R16,0xB2
0E30 DEB2 RCALL _lcd_wc
0E31 9621 ADIW R28,1
0E32 940E1363 CALL pop_gset2
0E34 9508 RET
_lcd_print240128:
i --> R20
j --> R10
str --> R22
0E35 940E1373 CALL push_gset3
0E37 01B8 MOVW R22,R16
0E38 9721 SBIW R28,1
(0640) }
(0641) /******************************************************************************/
(0642) void lcd_print240128(cchar *str)
(0643) {
(0644) uchar i,j;
(0645) lcd_wc(0x98);
0E39 E908 LDI R16,0x98
0E3A DEA8 RCALL _lcd_wc
(0646) lcd_wc3(0x24,0,0);
0E3B 2422 CLR R2
0E3C 8228 STD Y+0,R2
0E3D 2722 CLR R18
0E3E E204 LDI R16,0x24
0E3F DEB5 RCALL _lcd_wc3
(0647) lcd_wc(0xb0);
0E40 EB00 LDI R16,0xB0
0E41 DEA1 RCALL _lcd_wc
(0648) for(i=0;i<128;i++)
0E42 2744 CLR R20
0E43 C00D RJMP 0x0E51
(0649) {
(0650) for(j=0;j<30;j++)
0E44 24AA CLR R10
0E45 C007 RJMP 0x0E4D
(0651) {
(0652) lcd_wd(*str++);
0E46 011B MOVW R2,R22
0E47 5F6F SUBI R22,0xFF
0E48 4F7F SBCI R23,0xFF
0E49 01F1 MOVW R30,R2
0E4A 9104 LPM R16,0(Z)
0E4B DE81 RCALL _lcd_wd
0E4C 94A3 INC R10
0E4D 2D8A MOV R24,R10
0E4E 318E CPI R24,0x1E
0E4F F3B0 BCS 0x0E46
0E50 9543 INC R20
0E51 3840 CPI R20,0x80
0E52 F388 BCS 0x0E44
(0653) }
(0654) }
(0655) lcd_wc(0xb2);
0E53 EB02 LDI R16,0xB2
0E54 DE8E RCALL _lcd_wc
0E55 9621 ADIW R28,1
0E56 940E1366 CALL pop_gset3
0E58 9508 RET
_lcd_digtal:
i --> R20
j --> R10
str --> R22
0E59 940E1373 CALL push_gset3
0E5B 01B8 MOVW R22,R16
(0656) }
(0657)
(0658)
(0659) void lcd_digtal(cchar *str)
(0660) {
(0661) uchar i,j;
(0662) cursor(6,0);
0E5C 2722 CLR R18
0E5D E006 LDI R16,6
0E5E DED7 RCALL _cursor
(0663) // lcd_wc(0x98);
(0664) // lcd_wc3(0x24,0,0);
(0665) lcd_wc(0xb0);
0E5F EB00 LDI R16,0xB0
0E60 DE82 RCALL _lcd_wc
(0666) for(i=0;i<32;i++)
0E61 2744 CLR R20
0E62 C00D RJMP 0x0E70
(0667) {
(0668) for(j=0;j<30;j++)
0E63 24AA CLR R10
0E64 C007 RJMP 0x0E6C
(0669) {
(0670) lcd_wd(*str++);
0E65 011B MOVW R2,R22
0E66 5F6F SUBI R22,0xFF
0E67 4F7F SBCI R23,0xFF
0E68 01F1 MOVW R30,R2
0E69 9104 LPM R16,0(Z)
0E6A DE62 RCALL _lcd_wd
0E6B 94A3 INC R10
0E6C 2D8A MOV R24,R10
0E6D 318E CPI R24,0x1E
0E6E F3B0 BCS 0x0E65
0E6F 9543 INC R20
0E70 3240 CPI R20,0x20
0E71 F388 BCS 0x0E63
(0671) }
(0672) }
(0673) lcd_wc(0xb2);
0E72 EB02 LDI R16,0xB2
0E73 DE6F RCALL _lcd_wc
0E74 940E1366 CALL pop_gset3
0E76 9508 RET
_dprintf:
arg_ptr --> R20
uLen --> Y+71
tmpBuf --> Y+2
cData --> R14
i --> Y+70
c2 --> R20
uRow --> Y+69
uCol --> Y+68
c1 --> R12
k --> R10
j --> R22
fmt --> Y+82
0E77 940E12A3 CALL push_arg4
0E79 940E136F CALL push_gset5
0E7B 97EF SBIW R28,0x3F
0E7C 9729 SBIW R28,0x9
(0674) }
(0675)
(0676)
(0677)
(0678) // ASCII(8*16) 及 汉字(16*16) 显示函数
(0679) uchar dprintf(uchar *fmt, ...)
(0680) {
(0681) va_list arg_ptr;
(0682) uchar c1,c2,cData;
(0683) uchar tmpBuf[64]; // LCD显示数据缓冲区
(0684) uchar i=0,j,uLen,uRow,uCol;
0E7D 2400 CLR R0
0E7E 01FE MOVW R30,R28
0E7F 5BEA SUBI R30,0xBA
0E80 4FFF SBCI R31,0xFF
0E81 8200 STD Z+0,R0
(0685) uint k;
(0686)
(0687) va_start(arg_ptr, fmt);
0E82 E022 LDI R18,2
0E83 E030 LDI R19,0
0E84 018E MOVW R16,R28
0E85 5A0E SUBI R16,0xAE
0E86 4F1F SBCI R17,0xFF
0E87 940E1397 CALL __va_start
0E89 01A8 MOVW R20,R16
(0688) uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
0E8A 8359 STD Y+1,R21
0E8B 8348 STD Y+0,R20
0E8C 01FE MOVW R30,R28
0E8D 5AEE SUBI R30,0xAE
0E8E 4FFF SBCI R31,0xFF
0E8F 8120 LDD R18,Z+0
0E90 8131 LDD R19,Z+1
0E91 018E MOVW R16,R28
0E92 5F0E SUBI R16,0xFE
0E93 4F1F SBCI R17,0xFF
0E94 940E1464 CALL _vsprintf
0E96 01FE MOVW R30,R28
0E97 5BE9 SUBI R30,0xB9
0E98 4FFF SBCI R31,0xFF
0E99 8300 STD Z+0,R16
(0689) va_end(arg_ptr);
0E9A C158 RJMP 0x0FF3
(0690)
(0691) while(i<uLen)
(0692) {
(0693) c1 = tmpBuf[i];
0E9B 01CE MOVW R24,R28
0E9C 9602 ADIW R24,2
0E9D 01DE MOVW R26,R28
0E9E 5BAA SUBI R26,0xBA
0E9F 4FBF SBCI R27,0xFF
0EA0 91EC LD R30,0(X)
0EA1 27FF CLR R31
0EA2 0FE8 ADD R30,R24
0EA3 1FF9 ADC R31,R25
0EA4 80C0 LDD R12,Z+0
(0694) c2 = tmpBuf[i+1];
0EA5 01CE MOVW R24,R28
0EA6 9603 ADIW R24,3
0EA7 01DE MOVW R26,R28
0EA8 5BAA SUBI R26,0xBA
0EA9 4FBF SBCI R27,0xFF
0EAA 91EC LD R30,0(X)
0EAB 27FF CLR R31
0EAC 0FE8 ADD R30,R24
0EAD 1FF9 ADC R31,R25
0EAE 8140 LDD R20,Z+0
(0695) uRow = fnGetRow();
0EAF DE64 RCALL _fnGetRow
0EB0 01FE MOVW R30,R28
0EB1 5BEB SUBI R30,0xBB
0EB2 4FFF SBCI R31,0xFF
0EB3 8300 STD Z+0,R16
(0696) uCol = fnGetCol();
0EB4 DE62 RCALL _fnGetCol
0EB5 01FE MOVW R30,R28
0EB6 5BEC SUBI R30,0xBC
0EB7 4FFF SBCI R31,0xFF
0EB8 8300 STD Z+0,R16
(0697) if(c1 <128) //if(c1 >= 0) 此处与Keli不同处理,C1,C2,Cdata必须改为uchar
0EB9 2D8C MOV R24,R12
0EBA 3880 CPI R24,0x80
0EBB F008 BCS 0x0EBD
0EBC C085 RJMP 0x0F42
(0698) { // ASCII
(0699) if(c1 < 0x20)
0EBD 3280 CPI R24,0x20
0EBE F008 BCS 0x0EC0
0EBF C046 RJMP 0x0F06
(0700) {
(0701) switch(c1)
0EC0 2E28 MOV R2,R24
0EC1 2433 CLR R3
0EC2 01FE MOVW R30,R28
0EC3 5BEE SUBI R30,0xBE
0EC4 4FFF SBCI R31,0xFF
0EC5 8231 STD Z+1,R3
0EC6 8220 STD Z+0,R2
0EC7 01C1 MOVW R24,R2
0EC8 3088 CPI R24,0x8
0EC9 E0E0 LDI R30,0
0ECA 079E CPC R25,R30
0ECB F109 BEQ 0x0EED
0ECC 308A CPI R24,0xA
0ECD E0E0 LDI R30,0
0ECE 079E CPC R25,R30
0ECF F029 BEQ 0x0ED5
0ED0 308D CPI R24,0xD
0ED1 E0E0 LDI R30,0
0ED2 079E CPC R25,R30
0ED3 F009 BEQ 0x0ED5
0ED4 C02F RJMP 0x0F04
(0702) {
(0703) case CR:
(0704) case LF: // 回车或换行
(0705) i++;
0ED5 01FE MOVW R30,R28
0ED6 5BEA SUBI R30,0xBA
0ED7 4FFF SBCI R31,0xFF
0ED8 8000 LDD R0,Z+0
0ED9 9403 INC R0
0EDA 01FE MOVW R30,R28
0EDB 5BEA SUBI R30,0xBA
0EDC 4FFF SBCI R31,0xFF
0EDD 8200 STD Z+0,R0
(0706) if(uRow < 112)
0EDE 01FE MOVW R30,R28
0EDF 5BEB SUBI R30,0xBB
0EE0 4FFF SBCI R31,0xFF
0EE1 8180 LDD R24,Z+0
0EE2 3780 CPI R24,0x70
0EE3 F428 BCC 0x0EE9
(0707) fnSetPos(uRow+16,0);
0EE4 2722 CLR R18
0EE5 2F08 MOV R16,R24
0EE6 5F00 SUBI R16,0xF0
0EE7 DE32 RCALL _fnSetPos
0EE8 C10A RJMP 0x0FF3
(0708) else
(0709) fnSetPos(0,0);
0EE9 2722 CLR R18
0EEA 2700 CLR R16
0EEB DE2E RCALL _fnSetPos
(0710) continue;
0EEC C106 RJMP 0x0FF3
(0711) case BS: // 退格
(0712) if(uCol > 0)
0EED 2422 CLR R2
0EEE 01FE MOVW R30,R28
0EEF 5BEC SUBI R30,0xBC
0EF0 4FFF SBCI R31,0xFF
0EF1 8000 LDD R0,Z+0
0EF2 1420 CP R2,R0
0EF3 F428 BCC 0x0EF9
(0713) uCol--;
0EF4 940A DEC R0
0EF5 01FE MOVW R30,R28
0EF6 5BEC SUBI R30,0xBC
0EF7 4FFF SBCI R31,0xFF
0EF8 8200 STD Z+0,R0
(0714) fnSetPos(uRow,uCol);
0EF9 01FE MOVW R30,R28
0EFA 5BEC SUBI R30,0xBC
0EFB 4FFF SBCI R31,0xFF
0EFC 8120 LDD R18,Z+0
0EFD 01FE MOVW R30,R28
0EFE 5BEB SUBI R30,0xBB
0EFF 4FFF SBCI R31,0xFF
0F00 8100 LDD R16,Z+0
0F01 DE18 RCALL _fnSetPos
(0715) cData = 0x00;
0F02 24EE CLR R14
(0716) break;
0F03 C002 RJMP 0x0F06
(0717) default: // 其他
(0718) c1 = 0x1f;
0F04 E18F LDI R24,0x1F
0F05 2EC8 MOV R12,R24
(0719) }
(0720) }
(0721) for(j=0;j<16;j++)
0F06 2766 CLR R22
0F07 C02A RJMP 0x0F32
(0722) {
(0723) lcd_wc(LC_AUT_WR); // 写数据
0F08 EB00 LDI R16,0xB0
0F09 DDD9 RCALL _lcd_wc
(0724) if(c1 >= 0x1f)
0F0A 2D8C MOV R24,R12
0F0B 318F CPI R24,0x1F
0F0C F0A8 BCS 0x0F22
(0725) {
(0726) if(j < (16-ASC_CHR_HEIGHT))
0F0D 3064 CPI R22,4
0F0E F418 BCC 0x0F12
(0727) lcd_wd(0x00);
0F0F 2700 CLR R16
0F10 DDBC RCALL _lcd_wd
0F11 C012 RJMP 0x0F24
(0728) else
(0729) lcd_wd(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)]);
0F12 E08C LDI R24,0xC
0F13 9D8C MUL R24,R12
0F14 01F0 MOVW R30,R0
0F15 57E4 SUBI R30,0x74
0F16 40F1 SBCI R31,1
0F17 2E26 MOV R2,R22
0F18 2433 CLR R3
0F19 0DE2 ADD R30,R2
0F1A 1DF3 ADC R31,R3
0F1B E582 LDI R24,0x52
0F1C E09F LDI R25,0xF
0F1D 0FE8 ADD R30,R24
0F1E 1FF9 ADC R31,R25
0F1F 9104 LPM R16,0(Z)
0F20 DDAC RCALL _lcd_wd
(0730) }
0F21 C002 RJMP 0x0F24
(0731) else
(0732) lcd_wd(cData);
0F22 2D0E MOV R16,R14
0F23 DDA9 RCALL _lcd_wd
(0733) lcd_wc(LC_AUT_OVR);
0F24 EB02 LDI R16,0xB2
0F25 DDBD RCALL _lcd_wc
(0734) fnSetPos(uRow+j+1,uCol);
0F26 01FE MOVW R30,R28
0F27 5BEC SUBI R30,0xBC
0F28 4FFF SBCI R31,0xFF
0F29 8120 LDD R18,Z+0
0F2A 01FE MOVW R30,R28
0F2B 5BEB SUBI R30,0xBB
0F2C 4FFF SBCI R31,0xFF
0F2D 8100 LDD R16,Z+0
0F2E 0F06 ADD R16,R22
0F2F 5F0F SUBI R16,0xFF
0F30 DDE9 RCALL _fnSetPos
0F31 9563 INC R22
0F32 3160 CPI R22,0x10
0F33 F2A0 BCS 0x0F08
(0735) }
(0736) if(c1 != BS) // 非退格
0F34 2D8C MOV R24,R12
0F35 3088 CPI R24,0x8
0F36 F409 BNE 0x0F38
0F37 C085 RJMP 0x0FBD
(0737) uCol++;
0F38 01FE MOVW R30,R28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -