📄 3310lcd_function.lis
字号:
0260 L42:
0260 .dbline 163
0260 A394 inc R10
0262 L44:
0262 .dbline 163
0262 8A2D mov R24,R10
0264 8335 cpi R24,83
0266 F8F2 brlo L41
0268 .dbline 169
0268 ; {
0268 ; buffer_h[n]=buffer_h[n+1];
0268 ; buffer_l[n]=buffer_l[n+1];
0268 ; }
0268 ;
0268 ; LCD_set_XY(X,Y);
0268 2E2D mov R18,R14
026A FE01 movw R30,R28
026C EE54 subi R30,78 ; addi 178
026E FF4F sbci R31,255
0270 0081 ldd R16,z+0
0272 FFDE xcall _LCD_set_XY
0274 .dbline 170
0274 ; for (n=0; n<83; n++)
0274 AA24 clr R10
0276 09C0 xjmp L50
0278 L47:
0278 .dbline 171
0278 .dbline 172
0278 21E0 ldi R18,1
027A CE01 movw R24,R28
027C EA2D mov R30,R10
027E FF27 clr R31
0280 E80F add R30,R24
0282 F91F adc R31,R25
0284 0081 ldd R16,z+0
0286 72D0 xcall _LCD_write_byte
0288 .dbline 173
0288 L48:
0288 .dbline 170
0288 A394 inc R10
028A L50:
028A .dbline 170
028A 8A2D mov R24,R10
028C 8335 cpi R24,83
028E A0F3 brlo L47
0290 .dbline 175
0290 ; {
0290 ; LCD_write_byte(buffer_h[n],1);
0290 ; }
0290 ;
0290 ; LCD_set_XY(X,Y+1);
0290 2E2D mov R18,R14
0292 2F5F subi R18,255 ; addi 1
0294 FE01 movw R30,R28
0296 EE54 subi R30,78 ; addi 178
0298 FF4F sbci R31,255
029A 0081 ldd R16,z+0
029C EADE xcall _LCD_set_XY
029E .dbline 176
029E ; for (n=0; n<83; n++)
029E AA24 clr R10
02A0 0BC0 xjmp L54
02A2 L51:
02A2 .dbline 177
02A2 .dbline 178
02A2 21E0 ldi R18,1
02A4 CE01 movw R24,R28
02A6 8C5A subi R24,172 ; offset = 84
02A8 9F4F sbci R25,255
02AA EA2D mov R30,R10
02AC FF27 clr R31
02AE E80F add R30,R24
02B0 F91F adc R31,R25
02B2 0081 ldd R16,z+0
02B4 5BD0 xcall _LCD_write_byte
02B6 .dbline 179
02B6 L52:
02B6 .dbline 176
02B6 A394 inc R10
02B8 L54:
02B8 .dbline 176
02B8 8A2D mov R24,R10
02BA 8335 cpi R24,83
02BC 90F3 brlo L51
02BE .dbline 181
02BE 0C2D mov R16,R12
02C0 1127 clr R17
02C2 0E940000 xcall _delay_nms
02C6 .dbline 182
02C6 L34:
02C6 .dbline 156
02C6 4395 inc R20
02C8 L36:
02C8 .dbline 156
02C8 4C39 cpi R20,156
02CA 08F4 brsh X1
02CC 7DCF xjmp L33
02CE X1:
02CE .dbline -2
02CE L30:
02CE EF96 adiw R28,63
02D0 EF96 adiw R28,63
02D2 AA96 adiw R28,42 ; offset = 168
02D4 0E940000 xcall pop_gset5
02D8 2496 adiw R28,4
02DA .dbline 0 ; func end
02DA 0895 ret
02DC .dbsym r i 20 c
02DC .dbsym r j 22 c
02DC .dbsym l buffer_l 84 A[84:84]c
02DC .dbsym l buffer_h 0 A[84:84]c
02DC .dbsym r n 10 c
02DC .dbsym r T 12 c
02DC .dbsym r Y 14 c
02DC .dbsym l X 178 c
02DC .dbend
02DC .dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
02DC ; row -> R20
02DC ; n -> R22,R23
02DC ; i -> R14,R15
02DC ; Pix_y -> y+18
02DC ; Pix_x -> R10
02DC ; map -> R12,R13
02DC ; Y -> y+12
02DC ; X -> y+10
.even
02DC _LCD_draw_bmp_pixel::
02DC 0E940000 xcall push_arg4
02E0 0E940000 xcall push_gset5
02E4 CE84 ldd R12,y+14
02E6 DF84 ldd R13,y+15
02E8 A888 ldd R10,y+16
02EA .dbline -1
02EA .dbline 240
02EA ; {
02EA ; LCD_write_byte(buffer_l[n],1);
02EA ; }
02EA ;
02EA ; delay_nms(T);
02EA ; }
02EA ; }
02EA ; /*void LCD_move_english_string (unsigned char X, unsigned char Y, unsigned char T,unsigned int n)
02EA ; {
02EA ; unsigned char i,n,j=0;
02EA ; unsigned char buffer[84]={0};
02EA ; T -= 31;
02EA ; for (i=0; i<n; i++)
02EA ; {
02EA ; buffer[83] = LCD_write_byte(font6x8[T][j], 1);
02EA ; j++;
02EA ; if (j==6) j=0;
02EA ;
02EA ; for (n=0; n<83; n++)
02EA ; {
02EA ; buffer_h[n]=buffer_h[n+1];
02EA ; buffer_l[n]=buffer_l[n+1];
02EA ; }
02EA ;
02EA ; LCD_set_XY(X,Y);
02EA ; for (n=0; n<83; n++)
02EA ; {
02EA ; LCD_write_byte(buffer_h[n],1);
02EA ; }
02EA ;
02EA ; LCD_set_XY(X,Y+1);
02EA ; for (n=0; n<83; n++)
02EA ; {
02EA ; LCD_write_byte(buffer_l[n],1);
02EA ; }
02EA ;
02EA ; delay_nms(T);
02EA ; }
02EA ; }*/
02EA ; /*
02EA ; void LCD_write_char(unsigned char c)
02EA ; {
02EA ; unsigned char line;
02EA ;
02EA ; c -= 32;
02EA ;
02EA ; for (line=0; line<6; line++)
02EA ; LCD_write_byte(font6x8[c][line], 1);
02EA ; }
02EA ; */
02EA ; /*-----------------------------------------------------------------------
02EA ; LCD_draw_map : 位图绘制函数
02EA ;
02EA ; 输入参数:X、Y :位图绘制的起始X、Y坐标;
02EA ; *map :位图点阵数据;
02EA ; Pix_x :位图像素(长)
02EA ; Pix_y :位图像素(宽)
02EA ;
02EA ; 编写日期 :2004-8-13
02EA ; 最后修改日期 :2004-8-13
02EA ; -----------------------------------------------------------------------*/
02EA ; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
02EA ; unsigned char Pix_x,unsigned char Pix_y)
02EA ; {
02EA .dbline 244
02EA ; unsigned int i,n;
02EA ; unsigned char row;
02EA ;
02EA ; if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
02EA 18E0 ldi R17,8
02EC 0A89 ldd R16,y+18
02EE 0E940000 xcall mod8u
02F2 0023 tst R16
02F4 29F4 brne L56
02F6 .dbline 244
02F6 4A89 ldd R20,y+18
02F8 4695 lsr R20
02FA 4695 lsr R20
02FC 4695 lsr R20
02FE 05C0 xjmp L57
0300 L56:
0300 .dbline 246
0300 ; else
0300 ; row=Pix_y/8+1;
0300 4A89 ldd R20,y+18
0302 4695 lsr R20
0304 4695 lsr R20
0306 4695 lsr R20
0308 4F5F subi R20,255 ; addi 1
030A L57:
030A .dbline 248
030A ;
030A ; for (n=0;n<row;n++)
030A 6627 clr R22
030C 7727 clr R23
030E 25C0 xjmp L61
0310 L58:
0310 .dbline 249
0310 ; {
0310 .dbline 250
0310 ; LCD_set_XY(X,Y);
0310 2C85 ldd R18,y+12
0312 0A85 ldd R16,y+10
0314 AEDE xcall _LCD_set_XY
0316 .dbline 251
0316 ; for(i=0; i<Pix_x; i++)
0316 EE24 clr R14
0318 FF24 clr R15
031A 15C0 xjmp L65
031C L62:
031C .dbline 252
031C .dbline 253
031C 21E0 ldi R18,1
031E 2A2C mov R2,R10
0320 3324 clr R3
0322 2F93 push R18
0324 3F93 push R19
0326 9101 movw R18,R2
0328 8B01 movw R16,R22
032A 0E940000 xcall empy16s
032E 3F91 pop R19
0330 2F91 pop R18
0332 F701 movw R30,R14
0334 E00F add R30,R16
0336 F11F adc R31,R17
0338 EC0D add R30,R12
033A FD1D adc R31,R13
033C 0081 ldd R16,z+0
033E 16D0 xcall _LCD_write_byte
0340 .dbline 254
0340 L63:
0340 .dbline 251
0340 C701 movw R24,R14
0342 0196 adiw R24,1
0344 7C01 movw R14,R24
0346 L65:
0346 .dbline 251
0346 2A2C mov R2,R10
0348 3324 clr R3
034A E214 cp R14,R2
034C F304 cpc R15,R3
034E 30F3 brlo L62
0350 .dbline 255
0350 0C84 ldd R0,y+12
0352 0394 inc R0
0354 0C86 std y+12,R0
0356 .dbline 256
0356 L59:
0356 .dbline 248
0356 6F5F subi R22,255 ; offset = 1
0358 7F4F sbci R23,255
035A L61:
035A .dbline 248
035A 242E mov R2,R20
035C 3324 clr R3
035E 6215 cp R22,R2
0360 7305 cpc R23,R3
0362 B0F2 brlo L58
0364 .dbline -2
0364 L55:
0364 0E940000 xcall pop_gset5
0368 2496 adiw R28,4
036A .dbline 0 ; func end
036A 0895 ret
036C .dbsym r row 20 c
036C .dbsym r n 22 i
036C .dbsym r i 14 i
036C .dbsym l Pix_y 18 c
036C .dbsym r Pix_x 10 c
036C .dbsym r map 12 pc
036C .dbsym l Y 12 c
036C .dbsym l X 10 c
036C .dbend
036C .dbfunc e LCD_write_byte _LCD_write_byte fV
036C ; command -> R18
036C ; data -> R16
.even
036C _LCD_write_byte::
036C .dbline -1
036C .dbline 269
036C ; {
036C ; LCD_write_byte(map[i+n*Pix_x], 1);
036C ; }
036C ; Y++; //换行
036C ; }
036C ; }
036C ;
036C ; /*-----------------------------------------------------------------------
036C ; LCD_write_byte : 使用SPI接口写数据到LCD
036C ;
036C ; 输入参数:data :写入的数据;
036C ; command :写数据/命令选择;
036C ;
036C ; 编写日期 :2004-8-10
036C ; 最后修改日期 :2004-8-13
036C ; -----------------------------------------------------------------------*/
036C ; void LCD_write_byte(unsigned char data, unsigned char command)
036C ; {
036C .dbline 270
036C ; PORTA &= ~LCD_CE ; // 使能LCD
036C DC98 cbi 0x1b,4
036E .dbline 272
036E ;
036E ; if (command == 0)
036E 2223 tst R18
0370 11F4 brne L67
0372 .dbline 273
0372 ; PORTA &= ~LCD_DC ; // 传送命令
0372 DE98 cbi 0x1b,6
0374 01C0 xjmp L68
0376 L67:
0376 .dbline 275
0376 ; else
0376 ; PORTA |= LCD_DC ; // 传送数据
0376 DE9A sbi 0x1b,6
0378 L68:
0378 .dbline 277
0378 ;
0378 ; SPDR = data; // 传送数据到SPI寄存器
0378 0FB9 out 0xf,R16
037A L69:
037A .dbline 279
037A L70:
037A .dbline 279
037A ;
037A ; while ((SPSR & 0x80) == 0); // 等待数据传送完毕
037A 779B sbis 0xe,7
037C FECF rjmp L69
037E .dbline 281
037E ;
037E ; PORTA |= LCD_CE ; // 关闭LCD
037E DC9A sbi 0x1b,4
0380 .dbline -2
0380 L66:
0380 .dbline 0 ; func end
0380 0895 ret
0382 .dbsym r command 18 c
0382 .dbsym r data 16 c
0382 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -