📄 main.lis
字号:
01B0 ; line -> R12
01B0 ; num -> R22
01B0 ; ch_with -> y+14
01B0 ; Y -> y+12
01B0 ; X -> y+10
.even
01B0 _LCD_write_chinese_string::
01B0 0E940000 xcall push_arg4
01B4 0E940000 xcall push_gset5
01B8 6889 ldd R22,y+16
01BA CA88 ldd R12,y+18
01BC AC88 ldd R10,y+20
01BE .dbline -1
01BE .dbline 144
01BE ; {
01BE ; LCD_write_char(*s);
01BE ; s++;
01BE ; }
01BE ; }
01BE ; /********************************************************************************************************************/
01BE ; /*-----------------------------------------------------------------------
01BE ; LCD_write_chinese_string: 在LCD上显示汉字
01BE ;
01BE ; 输入参数:X、Y :显示汉字的起始X、Y坐标;
01BE ; ch_with :汉字点阵的宽度
01BE ; num :显示汉字的个数;
01BE ; line :汉字点阵数组中的起始行数
01BE ; row :汉字显示的行间距
01BE ; -----------------------------------------------------------------------*/
01BE ; void LCD_write_chinese_string(unsigned char X, unsigned char Y,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row)
01BE ; {
01BE .dbline 147
01BE ; unsigned char i,n;
01BE ;
01BE ; LCD_set_XY(X,Y); //设置初始位置
01BE 2C85 ldd R18,y+12
01C0 0A85 ldd R16,y+10
01C2 B7DF xcall _LCD_set_XY
01C4 .dbline 149
01C4 ;
01C4 ; for (i=0;i<num;)
01C4 4427 clr R20
01C6 32C0 xjmp L42
01C8 L39:
01C8 .dbline 150
01C8 ; {
01C8 .dbline 151
01C8 ; for (n=0; n<ch_with*2; n++) //写一个汉字
01C8 EE24 clr R14
01CA 23C0 xjmp L46
01CC L43:
01CC .dbline 152
01CC ; {
01CC .dbline 153
01CC ; if (n==ch_with) //写汉字的下半部分
01CC 0E84 ldd R0,y+14
01CE E014 cp R14,R0
01D0 79F4 brne L47
01D2 .dbline 154
01D2 ; {
01D2 .dbline 155
01D2 ; if (i==0) LCD_set_XY(X,Y+1);
01D2 4423 tst R20
01D4 29F4 brne L49
01D6 .dbline 155
01D6 2C85 ldd R18,y+12
01D8 2F5F subi R18,255 ; addi 1
01DA 0A85 ldd R16,y+10
01DC AADF xcall _LCD_set_XY
01DE 08C0 xjmp L50
01E0 L49:
01E0 .dbline 157
01E0 ; else
01E0 ; {
01E0 .dbline 158
01E0 ; LCD_set_XY((X+(ch_with+row)*i),Y+1);
01E0 2C85 ldd R18,y+12
01E2 2F5F subi R18,255 ; addi 1
01E4 2E84 ldd R2,y+14
01E6 2A0C add R2,R10
01E8 249E mul R2,R20
01EA 0A85 ldd R16,y+10
01EC 000D add R16,R0
01EE A1DF xcall _LCD_set_XY
01F0 .dbline 159
01F0 ; }
01F0 L50:
01F0 .dbline 160
01F0 ; }
01F0 L47:
01F0 .dbline 161
01F0 21E0 ldi R18,1
01F2 2C2C mov R2,R12
01F4 240E add R2,R20
01F6 88E1 ldi R24,24
01F8 829D mul R24,R2
01FA 1001 movw R2,R0
01FC 80E0 ldi R24,<_HZK
01FE 90E0 ldi R25,>_HZK
0200 280E add R2,R24
0202 391E adc R3,R25
0204 EE2D mov R30,R14
0206 FF27 clr R31
0208 E20D add R30,R2
020A F31D adc R31,R3
020C 0491 lpm R16,Z
020E 5DD0 xcall _LCD_write_byte
0210 .dbline 162
0210 L44:
0210 .dbline 151
0210 E394 inc R14
0212 L46:
0212 .dbline 151
0212 82E0 ldi R24,2
0214 0E84 ldd R0,y+14
0216 809D mul R24,R0
0218 E014 cp R14,R0
021A C0F2 brlo L43
021C .dbline 163
021C 4395 inc R20
021E .dbline 164
021E 2C85 ldd R18,y+12
0220 2E84 ldd R2,y+14
0222 2A0C add R2,R10
0224 249E mul R2,R20
0226 0A85 ldd R16,y+10
0228 000D add R16,R0
022A 83DF xcall _LCD_set_XY
022C .dbline 165
022C L40:
022C .dbline 149
022C L42:
022C .dbline 149
022C 4617 cp R20,R22
022E 08F4 brsh X3
0230 CBCF xjmp L39
0232 X3:
0232 .dbline -2
0232 L38:
0232 0E940000 xcall pop_gset5
0236 2496 adiw R28,4
0238 .dbline 0 ; func end
0238 0895 ret
023A .dbsym r i 20 c
023A .dbsym r n 14 c
023A .dbsym r row 10 c
023A .dbsym r line 12 c
023A .dbsym r num 22 c
023A .dbsym l ch_with 14 c
023A .dbsym l Y 12 c
023A .dbsym l X 10 c
023A .dbend
023A .dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
023A ; row -> R20
023A ; n -> R22,R23
023A ; i -> R14,R15
023A ; Pix_y -> y+18
023A ; Pix_x -> R10
023A ; map -> R12,R13
023A ; Y -> y+12
023A ; X -> y+10
.even
023A _LCD_draw_bmp_pixel::
023A 0E940000 xcall push_arg4
023E 0E940000 xcall push_gset5
0242 CE84 ldd R12,y+14
0244 DF84 ldd R13,y+15
0246 A888 ldd R10,y+16
0248 .dbline -1
0248 .dbline 177
0248 ; LCD_write_byte(HZK[line+i][n],1);
0248 ; }
0248 ; i++;
0248 ; LCD_set_XY((X+(ch_with+row)*i),Y);
0248 ; }
0248 ; }
0248 ; /********************************************************************************************************************/
0248 ; /*-----------------------------------------------------------------------
0248 ; LCD_draw_map : 位图绘制函数
0248 ;
0248 ; 输入参数:X、Y :位图绘制的起始X、Y坐标;
0248 ; *map :位图点阵数据;
0248 ; Pix_x :位图像素(长)
0248 ; Pix_y :位图像素(宽)
0248 ; -----------------------------------------------------------------------*/
0248 ; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
0248 ; {
0248 .dbline 181
0248 ; unsigned int i,n;
0248 ; unsigned char row;
0248 ;
0248 ; if (Pix_y%8==0)
0248 18E0 ldi R17,8
024A 0A89 ldd R16,y+18
024C 0E940000 xcall mod8u
0250 0023 tst R16
0252 29F4 brne L52
0254 .dbline 182
0254 ; {
0254 .dbline 183
0254 ; row=Pix_y/8; //计算位图所占行数
0254 4A89 ldd R20,y+18
0256 4695 lsr R20
0258 4695 lsr R20
025A 4695 lsr R20
025C .dbline 184
025C ; }
025C 05C0 xjmp L53
025E L52:
025E .dbline 186
025E ; else
025E ; {
025E .dbline 187
025E ; row=Pix_y/8+1;
025E 4A89 ldd R20,y+18
0260 4695 lsr R20
0262 4695 lsr R20
0264 4695 lsr R20
0266 4F5F subi R20,255 ; addi 1
0268 .dbline 188
0268 ; }
0268 L53:
0268 .dbline 189
0268 ; for (n=0;n<row;n++)
0268 6627 clr R22
026A 7727 clr R23
026C 25C0 xjmp L57
026E L54:
026E .dbline 190
026E ; {
026E .dbline 191
026E ; LCD_set_XY(X,Y);
026E 2C85 ldd R18,y+12
0270 0A85 ldd R16,y+10
0272 5FDF xcall _LCD_set_XY
0274 .dbline 192
0274 ; for(i=0; i<Pix_x; i++)
0274 EE24 clr R14
0276 FF24 clr R15
0278 15C0 xjmp L61
027A L58:
027A .dbline 193
027A .dbline 194
027A 21E0 ldi R18,1
027C 2A2C mov R2,R10
027E 3324 clr R3
0280 2F93 push R18
0282 3F93 push R19
0284 9101 movw R18,R2
0286 8B01 movw R16,R22
0288 0E940000 xcall empy16s
028C 3F91 pop R19
028E 2F91 pop R18
0290 F701 movw R30,R14
0292 E00F add R30,R16
0294 F11F adc R31,R17
0296 EC0D add R30,R12
0298 FD1D adc R31,R13
029A 0081 ldd R16,z+0
029C 16D0 xcall _LCD_write_byte
029E .dbline 195
029E L59:
029E .dbline 192
029E C701 movw R24,R14
02A0 0196 adiw R24,1
02A2 7C01 movw R14,R24
02A4 L61:
02A4 .dbline 192
02A4 2A2C mov R2,R10
02A6 3324 clr R3
02A8 E214 cp R14,R2
02AA F304 cpc R15,R3
02AC 30F3 brlo L58
02AE .dbline 196
02AE 0C84 ldd R0,y+12
02B0 0394 inc R0
02B2 0C86 std y+12,R0
02B4 .dbline 197
02B4 L55:
02B4 .dbline 189
02B4 6F5F subi R22,255 ; offset = 1
02B6 7F4F sbci R23,255
02B8 L57:
02B8 .dbline 189
02B8 242E mov R2,R20
02BA 3324 clr R3
02BC 6215 cp R22,R2
02BE 7305 cpc R23,R3
02C0 B0F2 brlo L54
02C2 .dbline -2
02C2 L51:
02C2 0E940000 xcall pop_gset5
02C6 2496 adiw R28,4
02C8 .dbline 0 ; func end
02C8 0895 ret
02CA .dbsym r row 20 c
02CA .dbsym r n 22 i
02CA .dbsym r i 14 i
02CA .dbsym l Pix_y 18 c
02CA .dbsym r Pix_x 10 c
02CA .dbsym r map 12 pc
02CA .dbsym l Y 12 c
02CA .dbsym l X 10 c
02CA .dbend
02CA .dbfunc e LCD_write_byte _LCD_write_byte fV
02CA ; i -> R20
02CA ; command -> R18
02CA ; dat -> R16
.even
02CA _LCD_write_byte::
02CA 0E940000 xcall push_gset1
02CE .dbline -1
02CE .dbline 207
02CE ; {
02CE ; LCD_write_byte(map[i+n*Pix_x]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -