📄 3310lcd_function.lis
字号:
00D2 062F mov R16,R22
00D4 CEDF xcall _LCD_set_XY
00D6 05C0 xjmp L15
00D8 L14:
00D8 .dbline 96
00D8 .dbline 97
00D8 FA01 movw R30,R20
00DA 0081 ldd R16,z+0
00DC D9DF xcall _LCD_write_char
00DE .dbline 98
00DE 4F5F subi R20,255 ; offset = 1
00E0 5F4F sbci R21,255
00E2 .dbline 99
00E2 L15:
00E2 .dbline 95
00E2 ; ////if(X+sizeof(s)*6 >83) X = 83- sizeof(s)*6;
00E2 ; while (*s)
00E2 FA01 movw R30,R20
00E4 2080 ldd R2,z+0
00E6 2220 tst R2
00E8 B9F7 brne L14
00EA .dbline -2
00EA L13:
00EA 0E940000 xcall pop_gset3
00EE .dbline 0 ; func end
00EE 0895 ret
00F0 .dbsym r s 20 pc
00F0 .dbsym r Y 10 c
00F0 .dbsym r X 22 c
00F0 .dbend
00F0 .dbfunc e LCD_write_chinese_string _LCD_write_chinese_string fV
00F0 ; i -> R20
00F0 ; n -> R14
00F0 ; row -> R10
00F0 ; line -> R12
00F0 ; num -> R22
00F0 ; ch_with -> y+14
00F0 ; Y -> y+12
00F0 ; X -> y+10
.even
00F0 _LCD_write_chinese_string::
00F0 0E940000 xcall push_arg4
00F4 0E940000 xcall push_gset5
00F8 6889 ldd R22,y+16
00FA CA88 ldd R12,y+18
00FC AC88 ldd R10,y+20
00FE .dbline -1
00FE .dbline 119
00FE ; {
00FE ; LCD_write_char(*s);
00FE ; s++;
00FE ; }
00FE ; }
00FE ; /*-----------------------------------------------------------------------
00FE ; LCD_write_chinese_string: 在LCD上显示汉字
00FE ;
00FE ; 输入参数:X、Y :显示汉字的起始X、Y坐标;
00FE ; ch_with :汉字点阵的宽度
00FE ; num :显示汉字的个数;
00FE ; line :汉字点阵数组中的起始行数
00FE ; row :汉字显示的行间距
00FE ; 编写日期 :2004-8-11
00FE ; 最后修改日期 :2004-8-12
00FE ; 测试:
00FE ; LCD_write_chi(0,0,12,7,0,0);
00FE ; LCD_write_chi(0,2,12,7,0,0);
00FE ; LCD_write_chi(0,4,12,7,0,0);
00FE ; -----------------------------------------------------------------------*/
00FE ; void LCD_write_chinese_string(unsigned char X, unsigned char Y,
00FE ; unsigned char ch_with,unsigned char num,
00FE ; unsigned char line,unsigned char row)
00FE ; {
00FE .dbline 122
00FE ;
00FE ; unsigned char i,n;
00FE ; LCD_set_XY(X,Y); //设置初始位置
00FE 2C85 ldd R18,y+12
0100 0A85 ldd R16,y+10
0102 B7DF xcall _LCD_set_XY
0104 .dbline 124
0104 ;
0104 ; for (i=0;i<num;)
0104 4427 clr R20
0106 32C0 xjmp L21
0108 L18:
0108 .dbline 125
0108 ; {
0108 .dbline 126
0108 ; for (n=0; n<ch_with*2; n++) //写一个汉字
0108 EE24 clr R14
010A 23C0 xjmp L25
010C L22:
010C .dbline 127
010C ; {
010C .dbline 128
010C ; if (n==ch_with) //写汉字的下半部分
010C 0E84 ldd R0,y+14
010E E014 cp R14,R0
0110 79F4 brne L26
0112 .dbline 129
0112 ; {
0112 .dbline 130
0112 ; if (i==0) LCD_set_XY(X,Y+1);
0112 4423 tst R20
0114 29F4 brne L28
0116 .dbline 130
0116 2C85 ldd R18,y+12
0118 2F5F subi R18,255 ; addi 1
011A 0A85 ldd R16,y+10
011C AADF xcall _LCD_set_XY
011E 08C0 xjmp L29
0120 L28:
0120 .dbline 132
0120 ; else
0120 ; LCD_set_XY((X+(ch_with+row)*i),Y+1);
0120 2C85 ldd R18,y+12
0122 2F5F subi R18,255 ; addi 1
0124 2E84 ldd R2,y+14
0126 2A0C add R2,R10
0128 249E mul R2,R20
012A 0A85 ldd R16,y+10
012C 000D add R16,R0
012E A1DF xcall _LCD_set_XY
0130 L29:
0130 .dbline 133
0130 ; }
0130 L26:
0130 .dbline 134
0130 21E0 ldi R18,1
0132 2C2C mov R2,R12
0134 240E add R2,R20
0136 88E1 ldi R24,24
0138 829D mul R24,R2
013A 1001 movw R2,R0
013C 80E0 ldi R24,<_write_chinese_string
013E 90E0 ldi R25,>_write_chinese_string
0140 280E add R2,R24
0142 391E adc R3,R25
0144 EE2D mov R30,R14
0146 FF27 clr R31
0148 E20D add R30,R2
014A F31D adc R31,R3
014C 0491 lpm R16,Z
014E 0ED1 xcall _LCD_write_byte
0150 .dbline 135
0150 L23:
0150 .dbline 126
0150 E394 inc R14
0152 L25:
0152 .dbline 126
0152 82E0 ldi R24,2
0154 0E84 ldd R0,y+14
0156 809D mul R24,R0
0158 E014 cp R14,R0
015A C0F2 brlo L22
015C .dbline 136
015C 4395 inc R20
015E .dbline 137
015E 2C85 ldd R18,y+12
0160 2E84 ldd R2,y+14
0162 2A0C add R2,R10
0164 249E mul R2,R20
0166 0A85 ldd R16,y+10
0168 000D add R16,R0
016A 83DF xcall _LCD_set_XY
016C .dbline 138
016C L19:
016C .dbline 124
016C L21:
016C .dbline 124
016C 4617 cp R20,R22
016E 08F4 brsh X0
0170 CBCF xjmp L18
0172 X0:
0172 .dbline -2
0172 L17:
0172 0E940000 xcall pop_gset5
0176 2496 adiw R28,4
0178 .dbline 0 ; func end
0178 0895 ret
017A .dbsym r i 20 c
017A .dbsym r n 14 c
017A .dbsym r row 10 c
017A .dbsym r line 12 c
017A .dbsym r num 22 c
017A .dbsym l ch_with 14 c
017A .dbsym l Y 12 c
017A .dbsym l X 10 c
017A .dbend
.area lit(rom, con, rel)
0390 L31:
0390 00 .byte 0
0391 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
03CD 00000000000000000000 .word 0,0,0,0,0
03D7 00000000000000000000 .word 0,0,0,0,0
03E1 000000 .byte 0,0,0
03E4 L32:
03E4 00 .byte 0
03E5 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
0421 00000000000000000000 .word 0,0,0,0,0
042B 00000000000000000000 .word 0,0,0,0,0
0435 000000 .byte 0,0,0
.area text(rom, con, rel)
017A .dbfile C:\AVR\M\1\3310LCD_function.c
017A .dbfunc e LCD_move_chinese_string _LCD_move_chinese_string fV
017A ; i -> R20
017A ; j -> R22
017A ; buffer_l -> y+84
017A ; buffer_h -> y+0
017A ; n -> R10
017A ; T -> R12
017A ; Y -> R14
017A ; X -> y+178
.even
017A _LCD_move_chinese_string::
017A 0E940000 xcall push_arg4
017E 0E940000 xcall push_gset5
0182 E22E mov R14,R18
0184 EF97 sbiw R28,63
0186 EF97 sbiw R28,63
0188 AA97 sbiw R28,42 ; offset = 168
018A FE01 movw R30,R28
018C EA54 subi R30,74 ; addi 182
018E FF4F sbci R31,255
0190 C080 ldd R12,z+0
0192 .dbline -1
0192 .dbline 151
0192 ; LCD_write_byte(write_chinese_string[line+i][n],1);
0192 ; }
0192 ; i++;
0192 ; LCD_set_XY((X+(ch_with+row)*i),Y);
0192 ; }
0192 ; }
0192 ;
0192 ; /*-----------------------------------------------------------------------
0192 ; LCD_move_chinese_string: 汉字移动
0192 ;
0192 ; 输入参数:X、Y :显示汉字的起始X、Y坐标;
0192 ; T :移动速度;
0192 ;
0192 ; 编写日期 :2004-8-13
0192 ; 最后修改日期 :2004-8-13
0192 ; -----------------------------------------------------------------------*/
0192 ; void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned char T)
0192 ; {
0192 .dbline 152
0192 ; unsigned char i,n,j=0;
0192 6627 clr R22
0194 .dbline 153
0194 ; unsigned char buffer_h[84]={0};
0194 80E0 ldi R24,<L31
0196 90E0 ldi R25,>L31
0198 FE01 movw R30,R28
019A 04E5 ldi R16,84
019C 10E0 ldi R17,0
019E FA93 st -y,R31
01A0 EA93 st -y,R30
01A2 9A93 st -y,R25
01A4 8A93 st -y,R24
01A6 0E940000 xcall asgncblk
01AA .dbline 154
01AA ; unsigned char buffer_l[84]={0};
01AA 80E0 ldi R24,<L32
01AC 90E0 ldi R25,>L32
01AE FE01 movw R30,R28
01B0 EC5A subi R30,172 ; offset = 84
01B2 FF4F sbci R31,255
01B4 04E5 ldi R16,84
01B6 10E0 ldi R17,0
01B8 FA93 st -y,R31
01BA EA93 st -y,R30
01BC 9A93 st -y,R25
01BE 8A93 st -y,R24
01C0 0E940000 xcall asgncblk
01C4 .dbline 156
01C4 ;
01C4 ; for (i=0; i<156; i++)
01C4 4427 clr R20
01C6 80C0 xjmp L36
01C8 L33:
01C8 .dbline 157
01C8 ; {
01C8 .dbline 158
01C8 ; buffer_h[83] = move_chinese_string[i/12][j];
01C8 1CE0 ldi R17,12
01CA 042F mov R16,R20
01CC 0E940000 xcall div8u
01D0 88E1 ldi R24,24
01D2 809F mul R24,R16
01D4 1001 movw R2,R0
01D6 80E0 ldi R24,<_move_chinese_string
01D8 90E0 ldi R25,>_move_chinese_string
01DA 280E add R2,R24
01DC 391E adc R3,R25
01DE E62F mov R30,R22
01E0 FF27 clr R31
01E2 E20D add R30,R2
01E4 F31D adc R31,R3
01E6 E491 lpm R30,Z
01E8 DE01 movw R26,R28
01EA AD5A subi R26,173 ; addi 83
01EC BF4F sbci R27,255
01EE EC93 st x,R30
01F0 .dbline 159
01F0 ; buffer_l[83] = move_chinese_string[i/12][j+12];
01F0 1CE0 ldi R17,12
01F2 042F mov R16,R20
01F4 0E940000 xcall div8u
01F8 88E1 ldi R24,24
01FA 809F mul R24,R16
01FC 1001 movw R2,R0
01FE 80E0 ldi R24,<_move_chinese_string
0200 90E0 ldi R25,>_move_chinese_string
0202 280E add R2,R24
0204 391E adc R3,R25
0206 E62F mov R30,R22
0208 FF27 clr R31
020A 3C96 adiw R30,12
020C E20D add R30,R2
020E F31D adc R31,R3
0210 E491 lpm R30,Z
0212 DE01 movw R26,R28
0214 A955 subi R26,89 ; addi 167
0216 BF4F sbci R27,255
0218 EC93 st x,R30
021A .dbline 160
021A ; j++;
021A 6395 inc R22
021C .dbline 161
021C ; if (j==12) j=0;
021C 6C30 cpi R22,12
021E 09F4 brne L39
0220 .dbline 161
0220 6627 clr R22
0222 L39:
0222 .dbline 163
0222 ;
0222 ; for (n=0; n<83; n++)
0222 AA24 clr R10
0224 1EC0 xjmp L44
0226 L41:
0226 .dbline 164
0226 .dbline 165
0226 CE01 movw R24,R28
0228 0196 adiw R24,1
022A EA2D mov R30,R10
022C FF27 clr R31
022E E80F add R30,R24
0230 F91F adc R31,R25
0232 2080 ldd R2,z+0
0234 CE01 movw R24,R28
0236 EA2D mov R30,R10
0238 FF27 clr R31
023A E80F add R30,R24
023C F91F adc R31,R25
023E 2082 std z+0,R2
0240 .dbline 166
0240 CE01 movw R24,R28
0242 8B5A subi R24,171 ; offset = 85
0244 9F4F sbci R25,255
0246 EA2D mov R30,R10
0248 FF27 clr R31
024A E80F add R30,R24
024C F91F adc R31,R25
024E 2080 ldd R2,z+0
0250 CE01 movw R24,R28
0252 8C5A subi R24,172 ; offset = 84
0254 9F4F sbci R25,255
0256 EA2D mov R30,R10
0258 FF27 clr R31
025A E80F add R30,R24
025C F91F adc R31,R25
025E 2082 std z+0,R2
0260 .dbline 167
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -