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