📄 3310_5110lcd.lis
字号:
0266 FF4F sbci R31,255
0268 2081 ldd R18,z+0
026A FE01 movw R30,R28
026C EE54 subi R30,78 ; addi 178
026E FF4F sbci R31,255
0270 0081 ldd R16,z+0
0272 FCDE xcall _LCD_set_XY
0274 .dbline 186
0274 ; for (n=0; n<83; n++)
0274 CC24 clr R12
0276 09C0 xjmp L50
0278 L47:
0278 .dbline 187
0278 .dbline 188
0278 21E0 ldi R18,1
027A CE01 movw R24,R28
027C EC2D mov R30,R12
027E FF27 clr R31
0280 E80F add R30,R24
0282 F91F adc R31,R25
0284 0081 ldd R16,z+0
0286 75D0 xcall _LCD_write_byte
0288 .dbline 189
0288 L48:
0288 .dbline 186
0288 C394 inc R12
028A L50:
028A .dbline 186
028A 8C2D mov R24,R12
028C 8335 cpi R24,83
028E A0F3 brlo L47
0290 .dbline 191
0290 ; {
0290 ; LCD_write_byte(buffer_h[n],1);
0290 ; }
0290 ;
0290 ; LCD_set_XY(X,Y+1);
0290 FE01 movw R30,R28
0292 EC54 subi R30,76 ; addi 180
0294 FF4F sbci R31,255
0296 2081 ldd R18,z+0
0298 2F5F subi R18,255 ; addi 1
029A FE01 movw R30,R28
029C EE54 subi R30,78 ; addi 178
029E FF4F sbci R31,255
02A0 0081 ldd R16,z+0
02A2 E4DE xcall _LCD_set_XY
02A4 .dbline 192
02A4 ; for (n=0; n<83; n++)
02A4 CC24 clr R12
02A6 0BC0 xjmp L54
02A8 L51:
02A8 .dbline 193
02A8 .dbline 194
02A8 21E0 ldi R18,1
02AA CE01 movw R24,R28
02AC 8C5A subi R24,172 ; offset = 84
02AE 9F4F sbci R25,255
02B0 EC2D mov R30,R12
02B2 FF27 clr R31
02B4 E80F add R30,R24
02B6 F91F adc R31,R25
02B8 0081 ldd R16,z+0
02BA 5BD0 xcall _LCD_write_byte
02BC .dbline 195
02BC L52:
02BC .dbline 192
02BC C394 inc R12
02BE L54:
02BE .dbline 192
02BE 8C2D mov R24,R12
02C0 8335 cpi R24,83
02C2 90F3 brlo L51
02C4 .dbline 197
02C4 0E2D mov R16,R14
02C6 1127 clr R17
02C8 0E940000 xcall _delay_nms
02CC .dbline 198
02CC L34:
02CC .dbline 172
02CC 6395 inc R22
02CE L36:
02CE .dbline 172
02CE 6C39 cpi R22,156
02D0 08F4 brsh X0
02D2 7ACF xjmp L33
02D4 X0:
02D4 .dbline -2
02D4 L30:
02D4 EF96 adiw R28,63
02D6 EF96 adiw R28,63
02D8 AA96 adiw R28,42 ; offset = 168
02DA 0E940000 xcall pop_gset5
02DE 2496 adiw R28,4
02E0 .dbline 0 ; func end
02E0 0895 ret
02E2 .dbsym r p 20 pA[24:24]c
02E2 .dbsym r i 22 c
02E2 .dbsym r j 10 c
02E2 .dbsym l buffer_l 84 A[84:84]c
02E2 .dbsym l buffer_h 0 A[84:84]c
02E2 .dbsym r n 12 c
02E2 .dbsym l s 184 pA[24:24]c
02E2 .dbsym r T 14 c
02E2 .dbsym l Y 180 c
02E2 .dbsym l X 178 c
02E2 .dbend
02E2 .dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
02E2 ; row -> R20
02E2 ; n -> R22,R23
02E2 ; i -> R14,R15
02E2 ; Pix_y -> y+18
02E2 ; Pix_x -> R10
02E2 ; map -> R12,R13
02E2 ; Y -> y+12
02E2 ; X -> y+10
.even
02E2 _LCD_draw_bmp_pixel::
02E2 0E940000 xcall push_arg4
02E6 0E940000 xcall push_gset5
02EA CE84 ldd R12,y+14
02EC DF84 ldd R13,y+15
02EE A888 ldd R10,y+16
02F0 .dbline -1
02F0 .dbline 214
02F0 ; {
02F0 ; LCD_write_byte(buffer_l[n],1);
02F0 ; }
02F0 ;
02F0 ; delay_nms(T);
02F0 ; }
02F0 ; }
02F0 ; /*************************************************************************
02F0 ; ** 函数名称: LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
02F0 ; ** 功能描述: 位图绘制函数
02F0 ; ** 输 入: X、Y :位图绘制的起始X、Y坐标;
02F0 ; *map :位图点阵数据;
02F0 ; Pix_x :位图像素(长)
02F0 ; Pix_y :位图像素(宽)
02F0 ; ** 输出 :
02F0 ; ** 全局变量: 无
02F0 ; ** 调用模块:
02F0 ; ** 说明:
02F0 ; ** 注意:
02F0 ; **************************************************************************/
02F0 ; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
02F0 ; {
02F0 .dbline 218
02F0 ; unsigned int i,n;
02F0 ; unsigned char row;
02F0 ;
02F0 ; if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
02F0 18E0 ldi R17,8
02F2 0A89 ldd R16,y+18
02F4 0E940000 xcall mod8u
02F8 0023 tst R16
02FA 29F4 brne L56
02FC .dbline 218
02FC 4A89 ldd R20,y+18
02FE 4695 lsr R20
0300 4695 lsr R20
0302 4695 lsr R20
0304 05C0 xjmp L57
0306 L56:
0306 .dbline 219
0306 ; else row=Pix_y/8+1;
0306 4A89 ldd R20,y+18
0308 4695 lsr R20
030A 4695 lsr R20
030C 4695 lsr R20
030E 4F5F subi R20,255 ; addi 1
0310 L57:
0310 .dbline 221
0310 ;
0310 ; for (n=0;n<row;n++)
0310 6627 clr R22
0312 7727 clr R23
0314 25C0 xjmp L61
0316 L58:
0316 .dbline 222
0316 ; {
0316 .dbline 223
0316 ; LCD_set_XY(X,Y);
0316 2C85 ldd R18,y+12
0318 0A85 ldd R16,y+10
031A A8DE xcall _LCD_set_XY
031C .dbline 224
031C ; for(i=0; i<Pix_x; i++)
031C EE24 clr R14
031E FF24 clr R15
0320 15C0 xjmp L65
0322 L62:
0322 .dbline 225
0322 .dbline 226
0322 21E0 ldi R18,1
0324 2A2C mov R2,R10
0326 3324 clr R3
0328 2F93 push R18
032A 3F93 push R19
032C 9101 movw R18,R2
032E 8B01 movw R16,R22
0330 0E940000 xcall empy16s
0334 3F91 pop R19
0336 2F91 pop R18
0338 F701 movw R30,R14
033A E00F add R30,R16
033C F11F adc R31,R17
033E EC0D add R30,R12
0340 FD1D adc R31,R13
0342 0081 ldd R16,z+0
0344 16D0 xcall _LCD_write_byte
0346 .dbline 227
0346 L63:
0346 .dbline 224
0346 C701 movw R24,R14
0348 0196 adiw R24,1
034A 7C01 movw R14,R24
034C L65:
034C .dbline 224
034C 2A2C mov R2,R10
034E 3324 clr R3
0350 E214 cp R14,R2
0352 F304 cpc R15,R3
0354 30F3 brlo L62
0356 .dbline 228
0356 0C84 ldd R0,y+12
0358 0394 inc R0
035A 0C86 std y+12,R0
035C .dbline 229
035C L59:
035C .dbline 221
035C 6F5F subi R22,255 ; offset = 1
035E 7F4F sbci R23,255
0360 L61:
0360 .dbline 221
0360 242E mov R2,R20
0362 3324 clr R3
0364 6215 cp R22,R2
0366 7305 cpc R23,R3
0368 B0F2 brlo L58
036A .dbline -2
036A L55:
036A 0E940000 xcall pop_gset5
036E 2496 adiw R28,4
0370 .dbline 0 ; func end
0370 0895 ret
0372 .dbsym r row 20 c
0372 .dbsym r n 22 i
0372 .dbsym r i 14 i
0372 .dbsym l Pix_y 18 c
0372 .dbsym r Pix_x 10 c
0372 .dbsym r map 12 pc
0372 .dbsym l Y 12 c
0372 .dbsym l X 10 c
0372 .dbend
0372 .dbfunc e LCD_write_byte _LCD_write_byte fV
0372 ; command -> R18
0372 ; data -> R16
.even
0372 _LCD_write_byte::
0372 .dbline -1
0372 .dbline 243
0372 ; {
0372 ; LCD_write_byte(map[i+n*Pix_x], 1);
0372 ; }
0372 ; Y++; //换行
0372 ; }
0372 ; }
0372 ; /*************************************************************************
0372 ; ** 函数名称: LCD_write_byte(unsigned char data, unsigned char command)
0372 ; ** 功能描述: 使用SPI接口写数据到LCD
0372 ; ** 输 入: data :写入的数据;
0372 ; command :写数据/命令选择;
0372 ; ** 输出 :
0372 ; ** 全局变量: 无
0372 ; ** 调用模块:
0372 ; ** 说明:
0372 ; ** 注意:
0372 ; **************************************************************************/
0372 ; void LCD_write_byte(unsigned char data, unsigned char command)
0372 ; {
0372 .dbline 244
0372 ; PORTB &= ~LCD_CE ; // 使能LCD
0372 C498 cbi 0x18,4
0374 .dbline 246
0374 ;
0374 ; if (command == 0)
0374 2223 tst R18
0376 11F4 brne L67
0378 .dbline 247
0378 ; PORTB &= ~LCD_DC ; // 传送命令
0378 C398 cbi 0x18,3
037A 01C0 xjmp L68
037C L67:
037C .dbline 249
037C ; else
037C ; PORTB |= LCD_DC ; // 传送数据
037C C39A sbi 0x18,3
037E L68:
037E .dbline 251
037E ;
037E ; SPDR = data; // 传送数据到SPI寄存器
037E 0FB9 out 0xf,R16
0380 L69:
0380 .dbline 253
0380 L70:
0380 .dbline 253
0380 ;
0380 ; while ((SPSR & 0x80) == 0); // 等待数据传送完毕
0380 779B sbis 0xe,7
0382 FECF rjmp L69
0384 .dbline 255
0384 ;
0384 ; PORTB |= LCD_CE ; // 关闭LCD
0384 C49A sbi 0x18,4
0386 .dbline -2
0386 L66:
0386 .dbline 0 ; func end
0386 0895 ret
0388 .dbsym r command 18 c
0388 .dbsym r data 16 c
0388 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -