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