📄 5110.lst
字号:
(0112) while (*s)
(0113) {
(0114) LCD_write_char(*s);
0354 01FA MOVW R30,R20
0355 8100 LDD R16,Z+0
0356 DFD9 RCALL _LCD_write_char
(0115) s++;
0357 5F4F SUBI R20,0xFF
0358 4F5F SBCI R21,0xFF
0359 01FA MOVW R30,R20
035A 8020 LDD R2,Z+0
035B 2022 TST R2
035C F7B9 BNE 0x0354
035D 940E0509 CALL pop_gset3
035F 9508 RET
_LCD_write_chinese_string:
p --> R20
i --> R22
n --> R10
s --> Y+22
row --> R12
line --> R14
num --> Y+16
ch_with --> Y+14
Y --> Y+12
X --> Y+10
0360 940E04D9 CALL push_arg4
0362 940E050F CALL push_gset5
0364 88EA LDD R14,Y+18
0365 88CC LDD R12,Y+20
(0116) }
(0117) }
(0118) /*************************************************************************
(0119) ** 函数名称: LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row,unsigned char (*s)[24])
(0120) ** 功能描述: 英文字符串显示函数
(0121) ** 输 入: X、Y :显示汉字的起始X、Y坐标;
(0122) ch_with :汉字点阵的宽度
(0123) num :显示汉字的个数;
(0124) line :汉字点阵数组中的起始行数
(0125) row :汉字显示的行间距
(0126) s : 要显示的汉字
(0127) ** 输出 :
(0128) ** 全局变量: 无
(0129) ** 调用模块:
(0130) ** 说明:LCD_write_chinese_string(0,0,12,7,0,0,write_chinese_string);
(0131) ** 注意:
(0132) **************************************************************************/
(0133) void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row,unsigned char (*s)[24])
(0134) {
(0135) unsigned char i,n,(*p)[24];
(0136) p=s;
0366 894E LDD R20,Y+22
0367 895F LDD R21,Y+23
(0137) LCD_set_XY(X,Y); //设置初始位置
0368 852C LDD R18,Y+12
0369 850A LDD R16,Y+10
036A DFB6 RCALL _LCD_set_XY
(0138)
(0139) for (i=0;i<num;)
036B 2766 CLR R22
036C C030 RJMP 0x039D
(0140) {
(0141) for (n=0; n<ch_with*2; n++) //写一个汉字
036D 24AA CLR R10
036E C021 RJMP 0x0390
(0142) {
(0143) if (n==ch_with) //写汉字的下半部分
036F 840E LDD R0,Y+14
0370 14A0 CP R10,R0
0371 F479 BNE 0x0381
(0144) {
(0145) if (i==0) LCD_set_XY(X,Y+1);
0372 2366 TST R22
0373 F429 BNE 0x0379
0374 852C LDD R18,Y+12
0375 5F2F SUBI R18,0xFF
0376 850A LDD R16,Y+10
0377 DFA9 RCALL _LCD_set_XY
0378 C008 RJMP 0x0381
(0146) else
(0147) LCD_set_XY((X+(ch_with+row)*i),Y+1);
0379 852C LDD R18,Y+12
037A 5F2F SUBI R18,0xFF
037B 842E LDD R2,Y+14
037C 0C2C ADD R2,R12
037D 9E26 MUL R2,R22
037E 850A LDD R16,Y+10
037F 0D00 ADD R16,R0
0380 DFA0 RCALL _LCD_set_XY
(0148) }
(0149) LCD_write_byte(*(*(p+(line+i))+n),1);
0381 E021 LDI R18,1
0382 2C2E MOV R2,R14
0383 0E26 ADD R2,R22
0384 E188 LDI R24,0x18
0385 9D82 MUL R24,R2
0386 0110 MOVW R2,R0
0387 0E24 ADD R2,R20
0388 1E35 ADC R3,R21
0389 2DEA MOV R30,R10
038A 27FF CLR R31
038B 0DE2 ADD R30,R2
038C 1DF3 ADC R31,R3
038D 8100 LDD R16,Z+0
038E D115 RCALL _LCD_write_byte
038F 94A3 INC R10
0390 E082 LDI R24,2
0391 840E LDD R0,Y+14
0392 9D80 MUL R24,R0
0393 14A0 CP R10,R0
0394 F2D0 BCS 0x036F
(0150) }
(0151) i++;
0395 9563 INC R22
(0152) LCD_set_XY((X+(ch_with+row)*i),Y);
0396 852C LDD R18,Y+12
0397 842E LDD R2,Y+14
0398 0C2C ADD R2,R12
0399 9E26 MUL R2,R22
039A 850A LDD R16,Y+10
039B 0D00 ADD R16,R0
039C DF84 RCALL _LCD_set_XY
039D 8808 LDD R0,Y+16
039E 1560 CP R22,R0
039F F268 BCS 0x036D
03A0 940E050C CALL pop_gset5
03A2 9624 ADIW R28,4
03A3 9508 RET
_LCD_move_chinese_string:
p --> R20
i --> R22
j --> R10
buffer_l --> Y+84
buffer_h --> Y+0
n --> R12
s --> Y+184
T --> R14
Y --> Y+180
X --> Y+178
03A4 940E04D9 CALL push_arg4
03A6 940E050F CALL push_gset5
03A8 97EF SBIW R28,0x3F
03A9 97EF SBIW R28,0x3F
03AA 97AA SBIW R28,0x2A
03AB 01FE MOVW R30,R28
03AC 54EA SUBI R30,0x4A
03AD 4FFF SBCI R31,0xFF
03AE 80E0 LDD R14,Z+0
(0153) }
(0154) }
(0155) /*************************************************************************
(0156) ** 函数名称: LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T,unsigned char (*s)[24])
(0157) ** 功能描述: 汉字移动
(0158) ** 输 入: X、Y :显示汉字的起始X、Y坐标;
(0159) T :移动速度;
(0160) ** 输出 :
(0161) ** 全局变量: 无
(0162) ** 调用模块:
(0163) ** 说明:
(0164) ** 注意:
(0165) **************************************************************************/
(0166) void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T,unsigned char (*s)[24])
(0167) {
(0168) unsigned char i,n,j=0,(*p)[24];
03AF 24AA CLR R10
(0169) unsigned char buffer_h[84]={0};
03B0 E78C LDI R24,0x7C
03B1 E092 LDI R25,2
03B2 01FE MOVW R30,R28
03B3 E504 LDI R16,0x54
03B4 E010 LDI R17,0
03B5 93FA ST R31,-Y
03B6 93EA ST R30,-Y
03B7 939A ST R25,-Y
03B8 938A ST R24,-Y
03B9 940E052E CALL asgncblk
(0170) unsigned char buffer_l[84]={0};
03BB ED80 LDI R24,0xD0
03BC E092 LDI R25,2
03BD 01FE MOVW R30,R28
03BE 5AEC SUBI R30,0xAC
03BF 4FFF SBCI R31,0xFF
03C0 E504 LDI R16,0x54
03C1 E010 LDI R17,0
03C2 93FA ST R31,-Y
03C3 93EA ST R30,-Y
03C4 939A ST R25,-Y
03C5 938A ST R24,-Y
03C6 940E052E CALL asgncblk
(0171) p=s;
03C8 01FE MOVW R30,R28
03C9 54E8 SUBI R30,0x48
03CA 4FFF SBCI R31,0xFF
03CB 8140 LDD R20,Z+0
03CC 8151 LDD R21,Z+1
(0172) for (i=0; i<156; i++)
03CD 2766 CLR R22
03CE C083 RJMP 0x0452
(0173) {
(0174) buffer_h[83] = *(*(p+(i/12))+j);
03CF E01C LDI R17,0xC
03D0 2F06 MOV R16,R22
03D1 940E04E0 CALL div8u
03D3 E188 LDI R24,0x18
03D4 9F80 MUL R24,R16
03D5 0110 MOVW R2,R0
03D6 0E24 ADD R2,R20
03D7 1E35 ADC R3,R21
03D8 2DEA MOV R30,R10
03D9 27FF CLR R31
03DA 0DE2 ADD R30,R2
03DB 1DF3 ADC R31,R3
03DC 8020 LDD R2,Z+0
03DD 01FE MOVW R30,R28
03DE 5AED SUBI R30,0xAD
03DF 4FFF SBCI R31,0xFF
03E0 8220 STD Z+0,R2
(0175) buffer_l[83] = *(*(p+(i/12))+(j+12));
03E1 E01C LDI R17,0xC
03E2 2F06 MOV R16,R22
03E3 940E04E0 CALL div8u
03E5 E188 LDI R24,0x18
03E6 9F80 MUL R24,R16
03E7 0110 MOVW R2,R0
03E8 0E24 ADD R2,R20
03E9 1E35 ADC R3,R21
03EA 2DEA MOV R30,R10
03EB 27FF CLR R31
03EC 963C ADIW R30,0xC
03ED 0DE2 ADD R30,R2
03EE 1DF3 ADC R31,R3
03EF 8020 LDD R2,Z+0
03F0 01FE MOVW R30,R28
03F1 55E9 SUBI R30,0x59
03F2 4FFF SBCI R31,0xFF
03F3 8220 STD Z+0,R2
(0176) j++;
03F4 94A3 INC R10
(0177) if (j==12) j=0;
03F5 2D8A MOV R24,R10
03F6 308C CPI R24,0xC
03F7 F409 BNE 0x03F9
03F8 24AA CLR R10
(0178)
(0179) for (n=0; n<83; n++)
03F9 24CC CLR R12
03FA C01E RJMP 0x0419
(0180) {
(0181) buffer_h[n]=buffer_h[n+1];
03FB 01CE MOVW R24,R28
03FC 9601 ADIW R24,1
03FD 2DEC MOV R30,R12
03FE 27FF CLR R31
03FF 0FE8 ADD R30,R24
0400 1FF9 ADC R31,R25
0401 8020 LDD R2,Z+0
0402 01CE MOVW R24,R28
0403 2DEC MOV R30,R12
0404 27FF CLR R31
0405 0FE8 ADD R30,R24
0406 1FF9 ADC R31,R25
0407 8220 STD Z+0,R2
(0182) buffer_l[n]=buffer_l[n+1];
0408 01CE MOVW R24,R28
0409 5A8B SUBI R24,0xAB
040A 4F9F SBCI R25,0xFF
040B 2DEC MOV R30,R12
040C 27FF CLR R31
040D 0FE8 ADD R30,R24
040E 1FF9 ADC R31,R25
040F 8020 LDD R2,Z+0
0410 01CE MOVW R24,R28
0411 5A8C SUBI R24,0xAC
0412 4F9F SBCI R25,0xFF
0413 2DEC MOV R30,R12
0414 27FF CLR R31
0415 0FE8 ADD R30,R24
0416 1FF9 ADC R31,R25
0417 8220 STD Z+0,R2
0418 94C3 INC R12
0419 2D8C MOV R24,R12
041A 3583 CPI R24,0x53
041B F2F8 BCS 0x03FB
(0183) }
(0184)
(0185) LCD_set_XY(X,Y);
041C 01FE MOVW R30,R28
041D 54EC SUBI R30,0x4C
041E 4FFF SBCI R31,0xFF
041F 8120 LDD R18,Z+0
0420 01FE MOVW R30,R28
0421 54EE SUBI R30,0x4E
0422 4FFF SBCI R31,0xFF
0423 8100 LDD R16,Z+0
0424 DEFC RCALL _LCD_set_XY
(0186) for (n=0; n<83; n++)
0425 24CC CLR R12
0426 C009 RJMP 0x0430
(0187) {
(0188) LCD_write_byte(buffer_h[n],1);
0427 E021 LDI R18,1
0428 01CE MOVW R24,R28
0429 2DEC MOV R30,R12
042A 27FF CLR R31
042B 0FE8 ADD R30,R24
042C 1FF9 ADC R31,R25
042D 8100 LDD R16,Z+0
042E D075 RCALL _LCD_write_byte
042F 94C3 INC R12
0430 2D8C MOV R24,R12
0431 3583 CPI R24,0x53
0432 F3A0 BCS 0x0427
(0189) }
(0190)
(0191) LCD_set_XY(X,Y+1);
0433 01FE MOVW R30,R28
0434 54EC SUBI R30,0x4C
0435 4FFF SBCI R31,0xFF
0436 8120 LDD R18,Z+0
0437 5F2F SUBI R18,0xFF
0438 01FE MOVW R30,R28
0439 54EE SUBI R30,0x4E
043A 4FFF SBCI R31,0xFF
043B 8100 LDD R16,Z+0
043C DEE4 RCALL _LCD_set_XY
(0192) for (n=0; n<83; n++)
043D 24CC CLR R12
043E C00B RJMP 0x044A
(0193) {
(0194) LCD_write_byte(buffer_l[n],1);
043F E021 LDI R18,1
0440 01CE MOVW R24,R28
0441 5A8C SUBI R24,0xAC
0442 4F9F SBCI R25,0xFF
0443 2DEC MOV R30,R12
0444 27FF CLR R31
0445 0FE8 ADD R30,R24
0446 1FF9 ADC R31,R25
0447 8100 LDD R16,Z+0
0448 D05B RCALL _LCD_write_byte
0449 94C3 INC R12
044A 2D8C MOV R24,R12
044B 3583 CPI R24,0x53
044C F390 BCS 0x043F
(0195) }
(0196)
(0197) delay_nms(T);
044D 2D0E MOV R16,R14
044E 2711 CLR R17
044F 940E04CA CALL _delay_nms
0451 9563 INC R22
0452 396C CPI R22,0x9C
0453 F408 BCC 0x0455
0454 CF7A RJMP 0x03CF
0455 96EF ADIW R28,0x3F
0456 96EF ADIW R28,0x3F
0457 96AA ADIW R28,0x2A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -