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