📄 nokia_5110.lis
字号:
0126 ; void LCD_write_chinese_string(unsigned char X, unsigned char Y,
0126 ; unsigned char ch_with,unsigned char num,
0126 ; unsigned char line,unsigned char row)
0126 ; {
0126 .dbline 162
0126 ; unsigned char i,n;
0126 ;
0126 ; LCD_set_XY(X,Y); //设置初始位置
0126 2C85 ldd R18,y+12
0128 0A85 ldd R16,y+10
012A BFDF rcall _LCD_set_XY
012C .dbline 164
012C ;
012C ; for (i=0;i<num;)
012C 4427 clr R20
012E 32C0 rjmp L36
0130 L33:
0130 .dbline 165
0130 ; {
0130 .dbline 166
0130 ; for (n=0; n<ch_with*2; n++) //写一个汉字
0130 EE24 clr R14
0132 23C0 rjmp L40
0134 L37:
0134 .dbline 167
0134 ; {
0134 .dbline 168
0134 ; if (n==ch_with) //写汉字的下半部分
0134 0E84 ldd R0,y+14
0136 E014 cp R14,R0
0138 79F4 brne L41
013A .dbline 169
013A ; {
013A .dbline 170
013A ; if (i==0) LCD_set_XY(X,Y+1);
013A 4423 tst R20
013C 29F4 brne L43
013E .dbline 170
013E 2C85 ldd R18,y+12
0140 2F5F subi R18,255 ; addi 1
0142 0A85 ldd R16,y+10
0144 B2DF rcall _LCD_set_XY
0146 08C0 rjmp L44
0148 L43:
0148 .dbline 172
0148 ; else
0148 ; LCD_set_XY((X+(ch_with+row)*i),Y+1);
0148 2C85 ldd R18,y+12
014A 2F5F subi R18,255 ; addi 1
014C 2E84 ldd R2,y+14
014E 2A0C add R2,R10
0150 249E mul R2,R20
0152 0A85 ldd R16,y+10
0154 000D add R16,R0
0156 A9DF rcall _LCD_set_XY
0158 L44:
0158 .dbline 173
0158 ; }
0158 L41:
0158 .dbline 174
0158 21E0 ldi R18,1
015A 2C2C mov R2,R12
015C 240E add R2,R20
015E 88E1 ldi R24,24
0160 829D mul R24,R2
0162 1001 movw R2,R0
0164 80E0 ldi R24,<_write_chinese
0166 90E0 ldi R25,>_write_chinese
0168 280E add R2,R24
016A 391E adc R3,R25
016C EE2D mov R30,R14
016E FF27 clr R31
0170 E20D add R30,R2
0172 F31D adc R31,R3
0174 0491 lpm R16,Z
0176 00D1 rcall _LCD_write_byte
0178 .dbline 175
0178 L38:
0178 .dbline 166
0178 E394 inc R14
017A L40:
017A .dbline 166
017A 82E0 ldi R24,2
017C 0E84 ldd R0,y+14
017E 809D mul R24,R0
0180 E014 cp R14,R0
0182 C0F2 brlo L37
0184 .dbline 176
0184 4395 inc R20
0186 .dbline 177
0186 2C85 ldd R18,y+12
0188 2E84 ldd R2,y+14
018A 2A0C add R2,R10
018C 249E mul R2,R20
018E 0A85 ldd R16,y+10
0190 000D add R16,R0
0192 8BDF rcall _LCD_set_XY
0194 .dbline 178
0194 L34:
0194 .dbline 164
0194 L36:
0194 .dbline 164
0194 4617 cp R20,R22
0196 08F4 brsh X0
0198 CBCF rjmp L33
019A X0:
019A .dbline -2
019A .dbline 179
019A ; LCD_write_byte(write_chinese[line+i][n],1);
019A ; }
019A ; i++;
019A ; LCD_set_XY((X+(ch_with+row)*i),Y);
019A ; }
019A ; }
019A L32:
019A 00D0 rcall pop_gset5
019C 2496 adiw R28,4
019E .dbline 0 ; func end
019E 0895 ret
01A0 .dbsym r i 20 c
01A0 .dbsym r n 14 c
01A0 .dbsym r row 10 c
01A0 .dbsym r line 12 c
01A0 .dbsym r num 22 c
01A0 .dbsym l ch_with 14 c
01A0 .dbsym l Y 12 c
01A0 .dbsym l X 10 c
01A0 .dbend
.area lit(rom, con, rel)
03F0 L46:
03F0 00 .byte 0
03F1 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
042D 00000000000000000000 .word 0,0,0,0,0
0437 00000000000000000000 .word 0,0,0,0,0
0441 000000 .byte 0,0,0
0444 L47:
0444 00 .byte 0
0445 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0481 00000000000000000000 .word 0,0,0,0,0
048B 00000000000000000000 .word 0,0,0,0,0
0495 000000 .byte 0,0,0
.area text(rom, con, rel)
01A0 .dbfile E:\Study\AVR\nokia5110\nokia_5110.c
01A0 .dbfunc e chinese_string _chinese_string fV
01A0 ; i -> R20
01A0 ; j -> R22
01A0 ; buffer_l -> y+84
01A0 ; buffer_h -> y+0
01A0 ; n -> R10
01A0 ; T -> R12
01A0 ; Y -> R14
01A0 ; X -> y+178
.even
01A0 _chinese_string::
01A0 00D0 rcall push_arg4
01A2 00D0 rcall push_gset5
01A4 E22E mov R14,R18
01A6 EF97 sbiw R28,63
01A8 EF97 sbiw R28,63
01AA AA97 sbiw R28,42 ; offset = 168
01AC FE01 movw R30,R28
01AE EA54 subi R30,74 ; addi 182
01B0 FF4F sbci R31,255
01B2 C080 ldd R12,z+0
01B4 .dbline -1
01B4 .dbline 191
01B4 ;
01B4 ; /*-----------------------------------------------------------------------
01B4 ; LCD_move_chinese_string: 汉字移动
01B4 ;
01B4 ; 输入参数:X、Y :显示汉字的起始X、Y坐标;
01B4 ; T :移动速度;
01B4 ;
01B4 ; 编写日期 :2004-8-13
01B4 ; 最后修改日期 :2004-8-13
01B4 ; -----------------------------------------------------------------------*/
01B4 ; void chinese_string (unsigned char X, unsigned char Y, unsigned char T)
01B4 ; {
01B4 .dbline 192
01B4 ; unsigned char i,n,j=0;
01B4 6627 clr R22
01B6 .dbline 193
01B6 ; unsigned char buffer_h[84]={0};
01B6 80E0 ldi R24,<L46
01B8 90E0 ldi R25,>L46
01BA FE01 movw R30,R28
01BC 04E5 ldi R16,84
01BE 10E0 ldi R17,0
01C0 FA93 st -y,R31
01C2 EA93 st -y,R30
01C4 9A93 st -y,R25
01C6 8A93 st -y,R24
01C8 00D0 rcall asgncblk
01CA .dbline 194
01CA ; unsigned char buffer_l[84]={0};
01CA 80E0 ldi R24,<L47
01CC 90E0 ldi R25,>L47
01CE FE01 movw R30,R28
01D0 EC5A subi R30,172 ; offset = 84
01D2 FF4F sbci R31,255
01D4 04E5 ldi R16,84
01D6 10E0 ldi R17,0
01D8 FA93 st -y,R31
01DA EA93 st -y,R30
01DC 9A93 st -y,R25
01DE 8A93 st -y,R24
01E0 00D0 rcall asgncblk
01E2 .dbline 196
01E2 ;
01E2 ; for (i=0; i<156; i++)
01E2 4427 clr R20
01E4 7DC0 rjmp L51
01E6 L48:
01E6 .dbline 197
01E6 ; {
01E6 .dbline 198
01E6 ; buffer_h[83] = move_chinese_string[i/12][j];
01E6 1CE0 ldi R17,12
01E8 042F mov R16,R20
01EA 00D0 rcall div8u
01EC 88E1 ldi R24,24
01EE 809F mul R24,R16
01F0 1001 movw R2,R0
01F2 80E0 ldi R24,<_move_chinese_string
01F4 90E0 ldi R25,>_move_chinese_string
01F6 280E add R2,R24
01F8 391E adc R3,R25
01FA E62F mov R30,R22
01FC FF27 clr R31
01FE E20D add R30,R2
0200 F31D adc R31,R3
0202 E491 lpm R30,Z
0204 DE01 movw R26,R28
0206 AD5A subi R26,173 ; addi 83
0208 BF4F sbci R27,255
020A EC93 st x,R30
020C .dbline 199
020C ; buffer_l[83] = move_chinese_string[i/12][j+12];
020C 1CE0 ldi R17,12
020E 042F mov R16,R20
0210 00D0 rcall div8u
0212 88E1 ldi R24,24
0214 809F mul R24,R16
0216 1001 movw R2,R0
0218 80E0 ldi R24,<_move_chinese_string
021A 90E0 ldi R25,>_move_chinese_string
021C 280E add R2,R24
021E 391E adc R3,R25
0220 E62F mov R30,R22
0222 FF27 clr R31
0224 3C96 adiw R30,12
0226 E20D add R30,R2
0228 F31D adc R31,R3
022A E491 lpm R30,Z
022C DE01 movw R26,R28
022E A955 subi R26,89 ; addi 167
0230 BF4F sbci R27,255
0232 EC93 st x,R30
0234 .dbline 200
0234 ; j++;
0234 6395 inc R22
0236 .dbline 201
0236 ; if (j==12) j=0;
0236 6C30 cpi R22,12
0238 09F4 brne L54
023A .dbline 201
023A 6627 clr R22
023C L54:
023C .dbline 203
023C ;
023C ; for (n=0; n<83; n++)
023C AA24 clr R10
023E 1EC0 rjmp L59
0240 L56:
0240 .dbline 204
0240 .dbline 205
0240 CE01 movw R24,R28
0242 0196 adiw R24,1
0244 EA2D mov R30,R10
0246 FF27 clr R31
0248 E80F add R30,R24
024A F91F adc R31,R25
024C 2080 ldd R2,z+0
024E CE01 movw R24,R28
0250 EA2D mov R30,R10
0252 FF27 clr R31
0254 E80F add R30,R24
0256 F91F adc R31,R25
0258 2082 std z+0,R2
025A .dbline 206
025A CE01 movw R24,R28
025C 8B5A subi R24,171 ; offset = 85
025E 9F4F sbci R25,255
0260 EA2D mov R30,R10
0262 FF27 clr R31
0264 E80F add R30,R24
0266 F91F adc R31,R25
0268 2080 ldd R2,z+0
026A CE01 movw R24,R28
026C 8C5A subi R24,172 ; offset = 84
026E 9F4F sbci R25,255
0270 EA2D mov R30,R10
0272 FF27 clr R31
0274 E80F add R30,R24
0276 F91F adc R31,R25
0278 2082 std z+0,R2
027A .dbline 207
027A L57:
027A .dbline 203
027A A394 inc R10
027C L59:
027C .dbline 203
027C 8A2D mov R24,R10
027E 8335 cpi R24,83
0280 F8F2 brlo L56
0282 .dbline 209
0282 ; {
0282 ; buffer_h[n]=buffer_h[n+1];
0282 ; buffer_l[n]=buffer_l[n+1];
0282 ; }
0282 ;
0282 ; LCD_set_XY(X,Y);
0282 2E2D mov R18,R14
0284 FE01 movw R30,R28
0286 EE54 subi R30,78 ; addi 178
0288 FF4F sbci R31,255
028A 0081 ldd R16,z+0
028C 0EDF rcall _LCD_set_XY
028E .dbline 210
028E ; for (n=0; n<83; n++)
028E AA24 clr R10
0290 09C0 rjmp L65
0292 L62:
0292 .dbline 211
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -