📄 3310lcd_prj.lst
字号:
(0080) c -= 32;
0343 5260 SUBI R22,0x20
(0081)
(0082) for (line=0; line<6; line++)
0344 2744 CLR R20
0345 C00F RJMP 0x0355
(0083) LCD_write_byte(font6x8[c][line], 1);
0346 E021 LDI R18,1
0347 E086 LDI R24,6
0348 9F86 MUL R24,R22
0349 0110 MOVW R2,R0
034A E584 LDI R24,0x54
034B E090 LDI R25,0
034C 0E28 ADD R2,R24
034D 1E39 ADC R3,R25
034E 2FE4 MOV R30,R20
034F 27FF CLR R31
0350 0DE2 ADD R30,R2
0351 1DF3 ADC R31,R3
0352 9104 LPM R16,0(Z)
0353 D15A RCALL _LCD_write_byte
0354 9543 INC R20
0355 3046 CPI R20,6
0356 F378 BCS 0x0346
0357 940E04E6 CALL pop_gset2
0359 9508 RET
_LCD_write_english_string:
s --> R20
Y --> R10
X --> R22
035A 940E04F3 CALL push_gset3
035C 2EA2 MOV R10,R18
035D 2F60 MOV R22,R16
035E 814E LDD R20,Y+6
035F 815F LDD R21,Y+7
(0084) }
(0085)
(0086) /*-----------------------------------------------------------------------
(0087) LCD_write_english_String : 英文字符串显示函数
(0088)
(0089) 输入参数:*s :英文字符串指针;
(0090) X、Y : 显示字符串的位置,x 0-83 ,y 0-5
(0091)
(0092) 编写日期 :2004-8-10
(0093) 最后修改日期 :2004-8-10
(0094) -----------------------------------------------------------------------*/
(0095) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0096) {
(0097) LCD_set_XY(X,Y);
0360 2D2A MOV R18,R10
0361 2F06 MOV R16,R22
0362 DFCE RCALL _LCD_set_XY
0363 C005 RJMP 0x0369
(0098) while (*s)
(0099) {
(0100) LCD_write_char(*s);
0364 01FA MOVW R30,R20
0365 8100 LDD R16,Z+0
0366 DFD9 RCALL _LCD_write_char
(0101) s++;
0367 5F4F SUBI R20,0xFF
0368 4F5F SBCI R21,0xFF
0369 01FA MOVW R30,R20
036A 8020 LDD R2,Z+0
036B 2022 TST R2
036C F7B9 BNE 0x0364
036D 940E04E9 CALL pop_gset3
036F 9508 RET
_LCD_write_chinese_string:
i --> R20
n --> R14
row --> R10
line --> R12
num --> R22
ch_with --> Y+14
Y --> Y+12
X --> Y+10
0370 940E04B9 CALL push_arg4
0372 940E04EF CALL push_gset5
0374 8968 LDD R22,Y+16
0375 88CA LDD R12,Y+18
0376 88AC LDD R10,Y+20
(0102) }
(0103) }
(0104) /*-----------------------------------------------------------------------
(0105) LCD_write_chinese_string: 在LCD上显示汉字
(0106)
(0107) 输入参数:X、Y :显示汉字的起始X、Y坐标;
(0108) ch_with :汉字点阵的宽度
(0109) num :显示汉字的个数;
(0110) line :汉字点阵数组中的起始行数
(0111) row :汉字显示的行间距
(0112) 编写日期 :2004-8-11
(0113) 最后修改日期 :2004-8-12
(0114) 测试:
(0115) LCD_write_chi(0,0,12,7,0,0);
(0116) LCD_write_chi(0,2,12,7,0,0);
(0117) LCD_write_chi(0,4,12,7,0,0);
(0118) -----------------------------------------------------------------------*/
(0119) void LCD_write_chinese_string(unsigned char X, unsigned char Y,
(0120) unsigned char ch_with,unsigned char num,
(0121) unsigned char line,unsigned char row)
(0122) {
(0123) unsigned char i,n;
(0124)
(0125) LCD_set_XY(X,Y); //设置初始位置
0377 852C LDD R18,Y+12
0378 850A LDD R16,Y+10
0379 DFB7 RCALL _LCD_set_XY
(0126)
(0127) for (i=0;i<num;)
037A 2744 CLR R20
037B C032 RJMP 0x03AE
(0128) {
(0129) for (n=0; n<ch_with*2; n++) //写一个汉字
037C 24EE CLR R14
037D C023 RJMP 0x03A1
(0130) {
(0131) if (n==ch_with) //写汉字的下半部分
037E 840E LDD R0,Y+14
037F 14E0 CP R14,R0
0380 F479 BNE 0x0390
(0132) {
(0133) if (i==0) LCD_set_XY(X,Y+1);
0381 2344 TST R20
0382 F429 BNE 0x0388
0383 852C LDD R18,Y+12
0384 5F2F SUBI R18,0xFF
0385 850A LDD R16,Y+10
0386 DFAA RCALL _LCD_set_XY
0387 C008 RJMP 0x0390
(0134) else
(0135) LCD_set_XY((X+(ch_with+row)*i),Y+1);
0388 852C LDD R18,Y+12
0389 5F2F SUBI R18,0xFF
038A 842E LDD R2,Y+14
038B 0C2A ADD R2,R10
038C 9E24 MUL R2,R20
038D 850A LDD R16,Y+10
038E 0D00 ADD R16,R0
038F DFA1 RCALL _LCD_set_XY
(0136) }
(0137) LCD_write_byte(write_chinese_string[line+i][n],1);
0390 E021 LDI R18,1
0391 2C2C MOV R2,R12
0392 0E24 ADD R2,R20
0393 E188 LDI R24,0x18
0394 9D82 MUL R24,R2
0395 0110 MOVW R2,R0
0396 E78C LDI R24,0x7C
0397 E092 LDI R25,2
0398 0E28 ADD R2,R24
0399 1E39 ADC R3,R25
039A 2DEE MOV R30,R14
039B 27FF CLR R31
039C 0DE2 ADD R30,R2
039D 1DF3 ADC R31,R3
039E 9104 LPM R16,0(Z)
039F D10E RCALL _LCD_write_byte
03A0 94E3 INC R14
03A1 E082 LDI R24,2
03A2 840E LDD R0,Y+14
03A3 9D80 MUL R24,R0
03A4 14E0 CP R14,R0
03A5 F2C0 BCS 0x037E
(0138) }
(0139) i++;
03A6 9543 INC R20
(0140) LCD_set_XY((X+(ch_with+row)*i),Y);
03A7 852C LDD R18,Y+12
03A8 842E LDD R2,Y+14
03A9 0C2A ADD R2,R10
03AA 9E24 MUL R2,R20
03AB 850A LDD R16,Y+10
03AC 0D00 ADD R16,R0
03AD DF83 RCALL _LCD_set_XY
03AE 1746 CP R20,R22
03AF F408 BCC 0x03B1
03B0 CFCB RJMP 0x037C
03B1 940E04EC CALL pop_gset5
03B3 9624 ADIW R28,4
03B4 9508 RET
_LCD_move_chinese_string:
i --> R20
j --> R22
buffer_l --> Y+84
buffer_h --> Y+0
n --> R10
T --> R12
Y --> R14
X --> Y+178
03B5 940E04B9 CALL push_arg4
03B7 940E04EF CALL push_gset5
03B9 2EE2 MOV R14,R18
03BA 97EF SBIW R28,0x3F
03BB 97EF SBIW R28,0x3F
03BC 97AA SBIW R28,0x2A
03BD 01FE MOVW R30,R28
03BE 54EA SUBI R30,0x4A
03BF 4FFF SBCI R31,0xFF
03C0 80C0 LDD R12,Z+0
(0141) }
(0142) }
(0143)
(0144) /*-----------------------------------------------------------------------
(0145) LCD_move_chinese_string: 汉字移动
(0146)
(0147) 输入参数:X、Y :显示汉字的起始X、Y坐标;
(0148) T :移动速度;
(0149)
(0150) 编写日期 :2004-8-13
(0151) 最后修改日期 :2004-8-13
(0152) -----------------------------------------------------------------------*/
(0153) void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T)
(0154) {
(0155) unsigned char i,n,j=0;
03C1 2766 CLR R22
(0156) unsigned char buffer_h[84]={0};
03C2 EB84 LDI R24,0xB4
03C3 E093 LDI R25,3
03C4 01FE MOVW R30,R28
03C5 E504 LDI R16,0x54
03C6 E010 LDI R17,0
03C7 93FA ST R31,-Y
03C8 93EA ST R30,-Y
03C9 939A ST R25,-Y
03CA 938A ST R24,-Y
03CB 940E050E CALL asgncblk
(0157) unsigned char buffer_l[84]={0};
03CD E088 LDI R24,0x8
03CE E094 LDI R25,4
03CF 01FE MOVW R30,R28
03D0 5AEC SUBI R30,0xAC
03D1 4FFF SBCI R31,0xFF
03D2 E504 LDI R16,0x54
03D3 E010 LDI R17,0
03D4 93FA ST R31,-Y
03D5 93EA ST R30,-Y
03D6 939A ST R25,-Y
03D7 938A ST R24,-Y
03D8 940E050E CALL asgncblk
(0158)
(0159) for (i=0; i<156; i++)
03DA 2744 CLR R20
03DB C080 RJMP 0x045C
(0160) {
(0161) buffer_h[83] = move_chinese_string[i/12][j];
03DC E01C LDI R17,0xC
03DD 2F04 MOV R16,R20
03DE 940E04C0 CALL div8u
03E0 E188 LDI R24,0x18
03E1 9F80 MUL R24,R16
03E2 0110 MOVW R2,R0
03E3 EF84 LDI R24,0xF4
03E4 E092 LDI R25,2
03E5 0E28 ADD R2,R24
03E6 1E39 ADC R3,R25
03E7 2FE6 MOV R30,R22
03E8 27FF CLR R31
03E9 0DE2 ADD R30,R2
03EA 1DF3 ADC R31,R3
03EB 91E4 LPM R30,0(Z)
03EC 01DE MOVW R26,R28
03ED 5AAD SUBI R26,0xAD
03EE 4FBF SBCI R27,0xFF
03EF 93EC ST R30,0(X)
(0162) buffer_l[83] = move_chinese_string[i/12][j+12];
03F0 E01C LDI R17,0xC
03F1 2F04 MOV R16,R20
03F2 940E04C0 CALL div8u
03F4 E188 LDI R24,0x18
03F5 9F80 MUL R24,R16
03F6 0110 MOVW R2,R0
03F7 EF84 LDI R24,0xF4
03F8 E092 LDI R25,2
03F9 0E28 ADD R2,R24
03FA 1E39 ADC R3,R25
03FB 2FE6 MOV R30,R22
03FC 27FF CLR R31
03FD 963C ADIW R30,0xC
03FE 0DE2 ADD R30,R2
03FF 1DF3 ADC R31,R3
0400 91E4 LPM R30,0(Z)
0401 01DE MOVW R26,R28
0402 55A9 SUBI R26,0x59
0403 4FBF SBCI R27,0xFF
0404 93EC ST R30,0(X)
(0163) j++;
0405 9563 INC R22
(0164) if (j==12) j=0;
0406 306C CPI R22,0xC
0407 F409 BNE 0x0409
0408 2766 CLR R22
(0165)
(0166) for (n=0; n<83; n++)
0409 24AA CLR R10
040A C01E RJMP 0x0429
(0167) {
(0168) buffer_h[n]=buffer_h[n+1];
040B 01CE MOVW R24,R28
040C 9601 ADIW R24,1
040D 2DEA MOV R30,R10
040E 27FF CLR R31
040F 0FE8 ADD R30,R24
0410 1FF9 ADC R31,R25
0411 8020 LDD R2,Z+0
0412 01CE MOVW R24,R28
0413 2DEA MOV R30,R10
0414 27FF CLR R31
0415 0FE8 ADD R30,R24
0416 1FF9 ADC R31,R25
0417 8220 STD Z+0,R2
(0169) buffer_l[n]=buffer_l[n+1];
0418 01CE MOVW R24,R28
0419 5A8B SUBI R24,0xAB
041A 4F9F SBCI R25,0xFF
041B 2DEA MOV R30,R10
041C 27FF CLR R31
041D 0FE8 ADD R30,R24
041E 1FF9 ADC R31,R25
041F 8020 LDD R2,Z+0
0420 01CE MOVW R24,R28
0421 5A8C SUBI R24,0xAC
0422 4F9F SBCI R25,0xFF
0423 2DEA MOV R30,R10
0424 27FF CLR R31
0425 0FE8 ADD R30,R24
0426 1FF9 ADC R31,R25
0427 8220 STD Z+0,R2
0428 94A3 INC R10
0429 2D8A MOV R24,R10
042A 3583 CPI R24,0x53
042B F2F8 BCS 0x040B
(0170) }
(0171)
(0172) LCD_set_XY(X,Y);
042C 2D2E MOV R18,R14
042D 01FE MOVW R30,R28
042E 54EE SUBI R30,0x4E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -