📄 nokia5110.lst
字号:
036B E090 LDI R25,0
036C 0E28 ADD R2,R24
036D 1E39 ADC R3,R25
036E 2FE4 MOV R30,R20
036F 27FF CLR R31
0370 0DE2 ADD R30,R2
0371 1DF3 ADC R31,R3
0372 9104 LPM R16,0(Z)
0373 D147 RCALL _LCD_write_byte
0374 9543 INC R20
0375 3046 CPI R20,6
0376 F378 BCS 0x0366
(0121) }
0377 D187 RCALL pop_gset2
0378 9508 RET
_LCD_write_english_string:
s --> R20
Y --> R10
X --> R22
0379 D1A5 RCALL push_gset3
037A 2EA2 MOV R10,R18
037B 2F60 MOV R22,R16
037C 814E LDD R20,Y+6
037D 815F LDD R21,Y+7
(0122)
(0123) /*-----------------------------------------------------------------------
(0124) LCD_write_english_String : 英文字符串显示函数
(0125)
(0126) 输入参数:*s :英文字符串指针;
(0127) X、Y : 显示字符串的位置,x 0-83 ,y 0-5
(0128)
(0129) 编写日期 :2004-8-10
(0130) 最后修改日期 :2004-8-10
(0131) -----------------------------------------------------------------------*/
(0132) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0133) {
(0134) LCD_set_XY(X,Y);
037E 2D2A MOV R18,R10
037F 2F06 MOV R16,R22
0380 DFD3 RCALL _LCD_set_XY
0381 C005 RJMP 0x0387
(0135) while (*s)
(0136) {
(0137) LCD_write_char(*s);
0382 01FA MOVW R30,R20
0383 8100 LDD R16,Z+0
0384 DFDC RCALL _LCD_write_char
(0138) s++;
0385 5F4F SUBI R20,0xFF
0386 4F5F SBCI R21,0xFF
0387 01FA MOVW R30,R20
0388 8020 LDD R2,Z+0
0389 2022 TST R2
038A F7B9 BNE 0x0382
(0139) }
(0140) }
038B D175 RCALL pop_gset3
038C 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
038D D144 RCALL push_arg4
038E D196 RCALL push_gset5
038F 8968 LDD R22,Y+16
0390 88CA LDD R12,Y+18
0391 88AC LDD R10,Y+20
(0141) /*-----------------------------------------------------------------------
(0142) LCD_write_chinese_string: 在LCD上显示汉字
(0143)
(0144) 输入参数:X、Y :显示汉字的起始X、Y坐标;
(0145) ch_with :汉字点阵的宽度
(0146) num :显示汉字的个数;
(0147) line :汉字点阵数组中的起始行数
(0148) row :汉字显示的行间距
(0149) 编写日期 :2004-8-11
(0150) 最后修改日期 :2004-8-12
(0151) 测试:
(0152) LCD_write_chi(0,0,12,7,0,0);
(0153) LCD_write_chi(0,2,12,7,0,0);
(0154) LCD_write_chi(0,4,12,7,0,0);
(0155) -----------------------------------------------------------------------*/
(0156) void LCD_write_chinese_string(unsigned char X, unsigned char Y,
(0157) unsigned char ch_with,unsigned char num,
(0158) unsigned char line,unsigned char row)
(0159) {
(0160) unsigned char i,n;
(0161)
(0162) LCD_set_XY(X,Y); //设置初始位置
0392 852C LDD R18,Y+12
0393 850A LDD R16,Y+10
0394 DFBF RCALL _LCD_set_XY
(0163)
(0164) for (i=0;i<num;)
0395 2744 CLR R20
0396 C032 RJMP 0x03C9
(0165) {
(0166) for (n=0; n<ch_with*2; n++) //写一个汉字
0397 24EE CLR R14
0398 C023 RJMP 0x03BC
(0167) {
(0168) if (n==ch_with) //写汉字的下半部分
0399 840E LDD R0,Y+14
039A 14E0 CP R14,R0
039B F479 BNE 0x03AB
(0169) {
(0170) if (i==0) LCD_set_XY(X,Y+1);
039C 2344 TST R20
039D F429 BNE 0x03A3
039E 852C LDD R18,Y+12
039F 5F2F SUBI R18,0xFF
03A0 850A LDD R16,Y+10
03A1 DFB2 RCALL _LCD_set_XY
03A2 C008 RJMP 0x03AB
(0171) else
(0172) LCD_set_XY((X+(ch_with+row)*i),Y+1);
03A3 852C LDD R18,Y+12
03A4 5F2F SUBI R18,0xFF
03A5 842E LDD R2,Y+14
03A6 0C2A ADD R2,R10
03A7 9E24 MUL R2,R20
03A8 850A LDD R16,Y+10
03A9 0D00 ADD R16,R0
03AA DFA9 RCALL _LCD_set_XY
(0173) }
(0174) LCD_write_byte(write_chinese[line+i][n],1);
03AB E021 LDI R18,1
03AC 2C2C MOV R2,R12
03AD 0E24 ADD R2,R20
03AE E188 LDI R24,0x18
03AF 9D82 MUL R24,R2
03B0 0110 MOVW R2,R0
03B1 ED8E LDI R24,0xDE
03B2 E092 LDI R25,2
03B3 0E28 ADD R2,R24
03B4 1E39 ADC R3,R25
03B5 2DEE MOV R30,R14
03B6 27FF CLR R31
03B7 0DE2 ADD R30,R2
03B8 1DF3 ADC R31,R3
03B9 9104 LPM R16,0(Z)
03BA D100 RCALL _LCD_write_byte
03BB 94E3 INC R14
03BC E082 LDI R24,2
03BD 840E LDD R0,Y+14
03BE 9D80 MUL R24,R0
03BF 14E0 CP R14,R0
03C0 F2C0 BCS 0x0399
(0175) }
(0176) i++;
03C1 9543 INC R20
(0177) LCD_set_XY((X+(ch_with+row)*i),Y);
03C2 852C LDD R18,Y+12
03C3 842E LDD R2,Y+14
03C4 0C2A ADD R2,R10
03C5 9E24 MUL R2,R20
03C6 850A LDD R16,Y+10
03C7 0D00 ADD R16,R0
03C8 DF8B RCALL _LCD_set_XY
03C9 1746 CP R20,R22
03CA F408 BCC 0x03CC
03CB CFCB RJMP 0x0397
(0178) }
(0179) }
03CC D136 RCALL pop_gset5
03CD 9624 ADIW R28,4
03CE 9508 RET
_chinese_string:
i --> R20
j --> R22
buffer_l --> Y+84
buffer_h --> Y+0
n --> R10
T --> R12
Y --> R14
X --> Y+178
03CF D102 RCALL push_arg4
03D0 D154 RCALL push_gset5
03D1 2EE2 MOV R14,R18
03D2 97EF SBIW R28,0x3F
03D3 97EF SBIW R28,0x3F
03D4 97AA SBIW R28,0x2A
03D5 01FE MOVW R30,R28
03D6 54EA SUBI R30,0x4A
03D7 4FFF SBCI R31,0xFF
03D8 80C0 LDD R12,Z+0
(0180)
(0181) /*-----------------------------------------------------------------------
(0182) LCD_move_chinese_string: 汉字移动
(0183)
(0184) 输入参数:X、Y :显示汉字的起始X、Y坐标;
(0185) T :移动速度;
(0186)
(0187) 编写日期 :2004-8-13
(0188) 最后修改日期 :2004-8-13
(0189) -----------------------------------------------------------------------*/
(0190) void chinese_string (unsigned char X, unsigned char Y, unsigned char T)
(0191) {
(0192) unsigned char i,n,j=0;
03D9 2766 CLR R22
(0193) unsigned char buffer_h[84]={0};
03DA EA86 LDI R24,0xA6
03DB E094 LDI R25,4
03DC 01FE MOVW R30,R28
03DD E504 LDI R16,0x54
03DE E010 LDI R17,0
03DF 93FA ST R31,-Y
03E0 93EA ST R30,-Y
03E1 939A ST R25,-Y
03E2 938A ST R24,-Y
03E3 D144 RCALL asgncblk
(0194) unsigned char buffer_l[84]={0};
03E4 EF8A LDI R24,0xFA
03E5 E094 LDI R25,4
03E6 01FE MOVW R30,R28
03E7 5AEC SUBI R30,0xAC
03E8 4FFF SBCI R31,0xFF
03E9 E504 LDI R16,0x54
03EA E010 LDI R17,0
03EB 93FA ST R31,-Y
03EC 93EA ST R30,-Y
03ED 939A ST R25,-Y
03EE 938A ST R24,-Y
03EF D138 RCALL asgncblk
(0195)
(0196) for (i=0; i<156; i++)
03F0 2744 CLR R20
03F1 C07D RJMP 0x046F
(0197) {
(0198) buffer_h[83] = move_chinese_string[i/12][j];
03F2 E01C LDI R17,0xC
03F3 2F04 MOV R16,R20
03F4 D0E4 RCALL div8u
03F5 E188 LDI R24,0x18
03F6 9F80 MUL R24,R16
03F7 0110 MOVW R2,R0
03F8 EE86 LDI R24,0xE6
03F9 E093 LDI R25,3
03FA 0E28 ADD R2,R24
03FB 1E39 ADC R3,R25
03FC 2FE6 MOV R30,R22
03FD 27FF CLR R31
03FE 0DE2 ADD R30,R2
03FF 1DF3 ADC R31,R3
0400 91E4 LPM R30,0(Z)
0401 01DE MOVW R26,R28
0402 5AAD SUBI R26,0xAD
0403 4FBF SBCI R27,0xFF
0404 93EC ST R30,0(X)
(0199) buffer_l[83] = move_chinese_string[i/12][j+12];
0405 E01C LDI R17,0xC
0406 2F04 MOV R16,R20
0407 D0D1 RCALL div8u
0408 E188 LDI R24,0x18
0409 9F80 MUL R24,R16
040A 0110 MOVW R2,R0
040B EE86 LDI R24,0xE6
040C E093 LDI R25,3
040D 0E28 ADD R2,R24
040E 1E39 ADC R3,R25
040F 2FE6 MOV R30,R22
0410 27FF CLR R31
0411 963C ADIW R30,0xC
0412 0DE2 ADD R30,R2
0413 1DF3 ADC R31,R3
0414 91E4 LPM R30,0(Z)
0415 01DE MOVW R26,R28
0416 55A9 SUBI R26,0x59
0417 4FBF SBCI R27,0xFF
0418 93EC ST R30,0(X)
(0200) j++;
0419 9563 INC R22
(0201) if (j==12) j=0;
041A 306C CPI R22,0xC
041B F409 BNE 0x041D
041C 2766 CLR R22
(0202)
(0203) for (n=0; n<83; n++)
041D 24AA CLR R10
041E C01E RJMP 0x043D
(0204) {
(0205) buffer_h[n]=buffer_h[n+1];
041F 01CE MOVW R24,R28
0420 9601 ADIW R24,1
0421 2DEA MOV R30,R10
0422 27FF CLR R31
0423 0FE8 ADD R30,R24
0424 1FF9 ADC R31,R25
0425 8020 LDD R2,Z+0
0426 01CE MOVW R24,R28
0427 2DEA MOV R30,R10
0428 27FF CLR R31
0429 0FE8 ADD R30,R24
042A 1FF9 ADC R31,R25
042B 8220 STD Z+0,R2
(0206) buffer_l[n]=buffer_l[n+1];
042C 01CE MOVW R24,R28
042D 5A8B SUBI R24,0xAB
042E 4F9F SBCI R25,0xFF
042F 2DEA MOV R30,R10
0430 27FF CLR R31
0431 0FE8 ADD R30,R24
0432 1FF9 ADC R31,R25
0433 8020 LDD R2,Z+0
0434 01CE MOVW R24,R28
0435 5A8C SUBI R24,0xAC
0436 4F9F SBCI R25,0xFF
0437 2DEA MOV R30,R10
0438 27FF CLR R31
0439 0FE8 ADD R30,R24
043A 1FF9 ADC R31,R25
043B 8220 STD Z+0,R2
043C 94A3 INC R10
043D 2D8A MOV R24,R10
043E 3583 CPI R24,0x53
043F F2F8 BCS 0x041F
(0207) }
(0208)
(0209) LCD_set_XY(X,Y);
0440 2D2E MOV R18,R14
0441 01FE MOVW R30,R28
0442 54EE SUBI R30,0x4E
0443 4FFF SBCI R31,0xFF
0444 8100 LDD R16,Z+0
0445 DF0E RCALL _LCD_set_XY
(0210) for (n=0; n<83; n++)
0446 24AA CLR R10
0447 C009 RJMP 0x0451
(0211) {
(0212) LCD_write_byte(buffer_h[n],1);
0448 E021 LDI R18,1
0449 01CE MOVW R24,R28
044A 2DEA MOV R30,R10
044B 27FF CLR R31
044C 0FE8 ADD R30,R24
044D 1FF9 ADC R31,R25
044E 8100 LDD R16,Z+0
044F D06B RCALL _LCD_write_byte
0450 94A3 INC R10
0451 2D8A MOV R24,R10
0452 3583 CPI R24,0x53
0453 F3A0 BCS 0x0448
(0213) }
(0214)
(0215) LCD_set_XY(X,Y+1);
0454 2D2E MOV R18,R14
0455 5F2F SUBI R18,0xFF
0456 01FE MOVW R30,R28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -