📄 lcd.lis
字号:
010E _LCD_write_char::
010E 0E940000 xcall push_gset2
0112 602F mov R22,R16
0114 .dbline -1
0114 .dbline 92
0114 ; }
0114 ;
0114 ; /*-----------------------------------------------------------------------
0114 ; LCD_write_char: 显示英文字符
0114 ; 输入参数:c:显示的字符;
0114 ; 编写日期:2004-8-10
0114 ; 最后修改日期:2006-10-23
0114 ; -----------------------------------------------------------------------*/
0114 ; void LCD_write_char(unsigned char c)
0114 ; {
0114 .dbline 94
0114 ; unsigned char line;
0114 ; c -= 32;
0114 6052 subi R22,32
0116 .dbline 95
0116 ; for (line=0; line<6; line++)
0116 4427 clr R20
0118 0FC0 xjmp L18
011A L15:
011A .dbline 96
011A 21E0 ldi R18,1
011C 86E0 ldi R24,6
011E 869F mul R24,R22
0120 1001 movw R2,R0
0122 80E0 ldi R24,<_font6x8
0124 90E0 ldi R25,>_font6x8
0126 280E add R2,R24
0128 391E adc R3,R25
012A E42F mov R30,R20
012C FF27 clr R31
012E E20D add R30,R2
0130 F31D adc R31,R3
0132 0491 lpm R16,Z
0134 65DF xcall _LCD_write_byte
0136 L16:
0136 .dbline 95
0136 4395 inc R20
0138 L18:
0138 .dbline 95
0138 4630 cpi R20,6
013A 78F3 brlo L15
013C .dbline -2
013C L14:
013C 0E940000 xcall pop_gset2
0140 .dbline 0 ; func end
0140 0895 ret
0142 .dbsym r line 20 c
0142 .dbsym r c 22 c
0142 .dbend
0142 .dbfunc e LCD_write_String _LCD_write_String fV
0142 ; s -> R20,R21
0142 ; Y -> R10
0142 ; X -> R22
.even
0142 _LCD_write_String::
0142 0E940000 xcall push_gset3
0146 A22E mov R10,R18
0148 602F mov R22,R16
014A 4E81 ldd R20,y+6
014C 5F81 ldd R21,y+7
014E .dbline -1
014E .dbline 107
014E ; LCD_write_byte(font6x8[c][line], 1);
014E ; }
014E ;
014E ; /*-----------------------------------------------------------------------
014E ; LCD_write_char: 英文字符串显示函数
014E ; 输入参数:*s:英文字符串指针;
014E ; X、Y: 显示字符串的位置
014E ; 编写日期:2004-8-10
014E ; 最后修改日期:2006-10-23
014E ; -----------------------------------------------------------------------*/
014E ; void LCD_write_String(unsigned char X,unsigned char Y,char *s)
014E ; {
014E .dbline 108
014E ; LCD_set_XY(X,Y);
014E 2A2D mov R18,R10
0150 062F mov R16,R22
0152 CEDF xcall _LCD_set_XY
0154 05C0 xjmp L21
0156 L20:
0156 .dbline 110
0156 .dbline 111
0156 FA01 movw R30,R20
0158 0081 ldd R16,z+0
015A D9DF xcall _LCD_write_char
015C .dbline 112
015C 4F5F subi R20,255 ; offset = 1
015E 5F4F sbci R21,255
0160 .dbline 113
0160 L21:
0160 .dbline 109
0160 ; while (*s)
0160 FA01 movw R30,R20
0162 2080 ldd R2,z+0
0164 2220 tst R2
0166 B9F7 brne L20
0168 .dbline -2
0168 L19:
0168 0E940000 xcall pop_gset3
016C .dbline 0 ; func end
016C 0895 ret
016E .dbsym r s 20 pc
016E .dbsym r Y 10 c
016E .dbsym r X 22 c
016E .dbend
016E .dbfunc e LCD_write_chi _LCD_write_chi fV
016E ; i -> R20
016E ; n -> R14
016E ; row -> R10
016E ; line -> R12
016E ; num -> R22
016E ; ch_with -> y+14
016E ; Y -> y+12
016E ; X -> y+10
.even
016E _LCD_write_chi::
016E 0E940000 xcall push_arg4
0172 0E940000 xcall push_gset5
0176 6889 ldd R22,y+16
0178 CA88 ldd R12,y+18
017A AC88 ldd R10,y+20
017C .dbline -1
017C .dbline 130
017C ; {
017C ; LCD_write_char(*s);
017C ; s++;
017C ; }
017C ; }
017C ;
017C ; /*-----------------------------------------------------------------------
017C ;
017C ; LCD_write_chi: 在LCD上显示汉字
017C ; 输入参数:X、Y:显示汉字的起始X、Y坐标;
017C ; ch_with :汉字点阵的宽度
017C ; num:显示汉字的个数;
017C ; line:汉字点阵数组中的起始行数
017C ; row:汉字显示的行间距
017C ; 编写日期:2004-8-11
017C ; 最后修改日期:2006-10-23
017C ; -----------------------------------------------------------------------*/
017C ; void LCD_write_chi(unsigned char X, unsigned char Y,
017C ; unsigned char ch_with,unsigned char num,
017C ; unsigned char line,unsigned char row)
017C ; {
017C .dbline 132
017C ; unsigned char i,n;
017C ; LCD_set_XY(X,Y);//设置初始位置
017C 2C85 ldd R18,y+12
017E 0A85 ldd R16,y+10
0180 B7DF xcall _LCD_set_XY
0182 .dbline 133
0182 ; for (i=0;i<num;)
0182 4427 clr R20
0184 32C0 xjmp L27
0186 L24:
0186 .dbline 134
0186 ; {
0186 .dbline 135
0186 ; for (n=0; n<ch_with*2; n++)//写一个汉字
0186 EE24 clr R14
0188 23C0 xjmp L31
018A L28:
018A .dbline 136
018A ; {
018A .dbline 137
018A ; if (n==ch_with)//写汉字的下半部分
018A 0E84 ldd R0,y+14
018C E014 cp R14,R0
018E 79F4 brne L32
0190 .dbline 138
0190 ; {
0190 .dbline 139
0190 ; if (i==0)
0190 4423 tst R20
0192 29F4 brne L34
0194 .dbline 140
0194 ; LCD_set_XY(X,Y+1);
0194 2C85 ldd R18,y+12
0196 2F5F subi R18,255 ; addi 1
0198 0A85 ldd R16,y+10
019A AADF xcall _LCD_set_XY
019C 08C0 xjmp L35
019E L34:
019E .dbline 142
019E ; else
019E ; LCD_set_XY((X+(ch_with+row)*i),Y+1);
019E 2C85 ldd R18,y+12
01A0 2F5F subi R18,255 ; addi 1
01A2 2E84 ldd R2,y+14
01A4 2A0C add R2,R10
01A6 249E mul R2,R20
01A8 0A85 ldd R16,y+10
01AA 000D add R16,R0
01AC A1DF xcall _LCD_set_XY
01AE L35:
01AE .dbline 143
01AE ; }
01AE L32:
01AE .dbline 144
01AE 21E0 ldi R18,1
01B0 2C2C mov R2,R12
01B2 240E add R2,R20
01B4 88E1 ldi R24,24
01B6 829D mul R24,R2
01B8 1001 movw R2,R0
01BA 80E0 ldi R24,<_china_char
01BC 90E0 ldi R25,>_china_char
01BE 280E add R2,R24
01C0 391E adc R3,R25
01C2 EE2D mov R30,R14
01C4 FF27 clr R31
01C6 E20D add R30,R2
01C8 F31D adc R31,R3
01CA 0491 lpm R16,Z
01CC 19DF xcall _LCD_write_byte
01CE .dbline 145
01CE L29:
01CE .dbline 135
01CE E394 inc R14
01D0 L31:
01D0 .dbline 135
01D0 82E0 ldi R24,2
01D2 0E84 ldd R0,y+14
01D4 809D mul R24,R0
01D6 E014 cp R14,R0
01D8 C0F2 brlo L28
01DA .dbline 146
01DA 4395 inc R20
01DC .dbline 147
01DC 2C85 ldd R18,y+12
01DE 2E84 ldd R2,y+14
01E0 2A0C add R2,R10
01E2 249E mul R2,R20
01E4 0A85 ldd R16,y+10
01E6 000D add R16,R0
01E8 83DF xcall _LCD_set_XY
01EA .dbline 148
01EA L25:
01EA .dbline 133
01EA L27:
01EA .dbline 133
01EA 4617 cp R20,R22
01EC 08F4 brsh X0
01EE CBCF xjmp L24
01F0 X0:
01F0 .dbline -2
01F0 L23:
01F0 0E940000 xcall pop_gset5
01F4 2496 adiw R28,4
01F6 .dbline 0 ; func end
01F6 0895 ret
01F8 .dbsym r i 20 c
01F8 .dbsym r n 14 c
01F8 .dbsym r row 10 c
01F8 .dbsym r line 12 c
01F8 .dbsym r num 22 c
01F8 .dbsym l ch_with 14 c
01F8 .dbsym l Y 12 c
01F8 .dbsym l X 10 c
01F8 .dbend
.area lit(rom, con, rel)
0348 L37:
0348 00 .byte 0
0349 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
0385 00000000000000000000 .word 0,0,0,0,0
038F 00000000000000000000 .word 0,0,0,0,0
0399 000000 .byte 0,0,0
039C L38:
039C 00 .byte 0
039D 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
03D9 00000000000000000000 .word 0,0,0,0,0
03E3 00000000000000000000 .word 0,0,0,0,0
03ED 000000 .byte 0,0,0
.area text(rom, con, rel)
01F8 .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\lcd.c
01F8 .dbfunc e LCD_move_chi _LCD_move_chi fV
01F8 ; i -> R20
01F8 ; j -> R22
01F8 ; buffer_l -> y+84
01F8 ; buffer_h -> y+0
01F8 ; n -> R10
01F8 ; T -> R12
01F8 ; Y -> R14
01F8 ; X -> y+178
.even
01F8 _LCD_move_chi::
01F8 0E940000 xcall push_arg4
01FC 0E940000 xcall push_gset5
0200 E22E mov R14,R18
0202 EF97 sbiw R28,63
0204 EF97 sbiw R28,63
0206 AA97 sbiw R28,42 ; offset = 168
0208 FE01 movw R30,R28
020A EA54 subi R30,74 ; addi 182
020C FF4F sbci R31,255
020E C080 ldd R12,z+0
0210 .dbline -1
0210 .dbline 159
0210 ; LCD_write_byte(china_char[line+i][n],1);
0210 ; }
0210 ; i++;
0210 ; LCD_set_XY((X+(ch_with+row)*i),Y);
0210 ; }
0210 ; }
0210 ;
0210 ; /*-----------------------------------------------------------------------
0210 ; LCD_write_chi: 汉字移动
0210 ; 输入参数:X、Y:显示汉字的起始X、Y坐标;
0210 ; T:移动速度;
0210 ; 编写日期:2004-8-13
0210 ; 最后修改日期:2006-10-23
0210 ; -----------------------------------------------------------------------*/
0210 ; void LCD_move_chi(unsigned char X, unsigned char Y, unsigned char T)
0210 ; {
0210 .dbline 160
0210 ; unsigned char i,n,j=0;
0210 6627 clr R22
0212 .dbline 161
0212 ; unsigned char buffer_h[84]={0};
0212 80E0 ldi R24,<L37
0214 90E0 ldi R25,>L37
0216 FE01 movw R30,R28
0218 04E5 ldi R16,84
021A 10E0 ldi R17,0
021C FA93 st -y,R31
021E EA93 st -y,R30
0220 9A93 st -y,R25
0222 8A93 st -y,R24
0224 0E940000 xcall asgncblk
0228 .dbline 162
0228 ; unsigned char buffer_l[84]={0};
0228 80E0 ldi R24,<L38
022A 90E0 ldi R25,>L38
022C FE01 movw R30,R28
022E EC5A subi R30,172 ; offset = 84
0230 FF4F sbci R31,255
0232 04E5 ldi R16,84
0234 10E0 ldi R17,0
0236 FA93 st -y,R31
0238 EA93 st -y,R30
023A 9A93 st -y,R25
023C 8A93 st -y,R24
023E 0E940000 xcall asgncblk
0242 .dbline 163
0242 ; for (i=0; i<144; i++)
0242 4427 clr R20
0244 80C0 xjmp L42
0246 L39:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -