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