📄 3310lcd_prj.lst
字号:
03E3 01FE MOVW R30,R28
03E4 54EE SUBI R30,0x4E
03E5 4FFF SBCI R31,0xFF
03E6 8100 LDD R16,Z+0
03E7 DF0E RCALL _LCD_set_XY
(0173) for (n=0; n<83; n++)
03E8 24AA CLR R10
03E9 C009 RJMP 0x03F3
(0174) {
(0175) LCD_write_byte(buffer_h[n],1);
03EA E021 LDI R18,1
03EB 01CE MOVW R24,R28
03EC 2DEA MOV R30,R10
03ED 27FF CLR R31
03EE 0FE8 ADD R30,R24
03EF 1FF9 ADC R31,R25
03F0 8100 LDD R16,Z+0
03F1 D06B RCALL _LCD_write_byte
03F2 94A3 INC R10
03F3 2D8A MOV R24,R10
03F4 3583 CPI R24,0x53
03F5 F3A0 BCS 0x03EA
(0176) }
(0177)
(0178) LCD_set_XY(X,Y+1);
03F6 2D2E MOV R18,R14
03F7 5F2F SUBI R18,0xFF
03F8 01FE MOVW R30,R28
03F9 54EE SUBI R30,0x4E
03FA 4FFF SBCI R31,0xFF
03FB 8100 LDD R16,Z+0
03FC DEF9 RCALL _LCD_set_XY
(0179) for (n=0; n<83; n++)
03FD 24AA CLR R10
03FE C00B RJMP 0x040A
(0180) {
(0181) LCD_write_byte(buffer_l[n],1);
03FF E021 LDI R18,1
0400 01CE MOVW R24,R28
0401 5A8C SUBI R24,0xAC
0402 4F9F SBCI R25,0xFF
0403 2DEA MOV R30,R10
0404 27FF CLR R31
0405 0FE8 ADD R30,R24
0406 1FF9 ADC R31,R25
0407 8100 LDD R16,Z+0
0408 D054 RCALL _LCD_write_byte
0409 94A3 INC R10
040A 2D8A MOV R24,R10
040B 3583 CPI R24,0x53
040C F390 BCS 0x03FF
(0182) }
(0183)
(0184) delay_nms(T);
040D 2D0C MOV R16,R12
040E 2711 CLR R17
040F DEA8 RCALL _delay_nms
0410 9543 INC R20
0411 394C CPI R20,0x9C
0412 F408 BCC 0x0414
0413 CF80 RJMP 0x0394
0414 96EF ADIW R28,0x3F
0415 96EF ADIW R28,0x3F
0416 96AA ADIW R28,0x2A
0417 D081 RCALL pop_gset5
0418 9624 ADIW R28,4
0419 9508 RET
_LCD_draw_bmp_pixel:
row --> R20
n --> R22
i --> R14
Pix_y --> Y+18
Pix_x --> R10
map --> R12
Y --> Y+12
X --> Y+10
041A D04D RCALL push_arg4
041B D07F RCALL push_gset5
041C 84CE LDD R12,Y+14
041D 84DF LDD R13,Y+15
041E 88A8 LDD R10,Y+16
(0185) }
(0186) }
(0187)
(0188) /*-----------------------------------------------------------------------
(0189) LCD_draw_map : 位图绘制函数
(0190)
(0191) 输入参数:X、Y :位图绘制的起始X、Y坐标;
(0192) *map :位图点阵数据;
(0193) Pix_x :位图像素(长)
(0194) Pix_y :位图像素(宽)
(0195)
(0196) 编写日期 :2004-8-13
(0197) 最后修改日期 :2004-8-13
(0198) -----------------------------------------------------------------------*/
(0199) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
(0200) unsigned char Pix_x,unsigned char Pix_y)
(0201) {
(0202) unsigned int i,n;
(0203) unsigned char row;
(0204)
(0205) if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
041F E018 LDI R17,0x8
0420 890A LDD R16,Y+18
0421 D04B RCALL mod8u
0422 2300 TST R16
0423 F429 BNE 0x0429
0424 894A LDD R20,Y+18
0425 9546 LSR R20
0426 9546 LSR R20
0427 9546 LSR R20
0428 C005 RJMP 0x042E
(0206) else
(0207) row=Pix_y/8+1;
0429 894A LDD R20,Y+18
042A 9546 LSR R20
042B 9546 LSR R20
042C 9546 LSR R20
042D 5F4F SUBI R20,0xFF
(0208)
(0209) for (n=0;n<row;n++)
042E 2766 CLR R22
042F 2777 CLR R23
0430 C024 RJMP 0x0455
(0210) {
(0211) LCD_set_XY(X,Y);
0431 852C LDD R18,Y+12
0432 850A LDD R16,Y+10
0433 DEC2 RCALL _LCD_set_XY
(0212) for(i=0; i<Pix_x; i++)
0434 24EE CLR R14
0435 24FF CLR R15
0436 C014 RJMP 0x044B
(0213) {
(0214) LCD_write_byte(map[i+n*Pix_x], 1);
0437 E021 LDI R18,1
0438 2C2A MOV R2,R10
0439 2433 CLR R3
043A 932F PUSH R18
043B 933F PUSH R19
043C 0191 MOVW R18,R2
043D 018B MOVW R16,R22
043E D046 RCALL empy16s
043F 913F POP R19
0440 912F POP R18
0441 01F7 MOVW R30,R14
0442 0FE0 ADD R30,R16
0443 1FF1 ADC R31,R17
0444 0DEC ADD R30,R12
0445 1DFD ADC R31,R13
0446 8100 LDD R16,Z+0
0447 D015 RCALL _LCD_write_byte
0448 01C7 MOVW R24,R14
0449 9601 ADIW R24,1
044A 017C MOVW R14,R24
044B 2C2A MOV R2,R10
044C 2433 CLR R3
044D 14E2 CP R14,R2
044E 04F3 CPC R15,R3
044F F338 BCS 0x0437
(0215) }
(0216) Y++; //换行
0450 840C LDD R0,Y+12
0451 9403 INC R0
0452 860C STD Y+12,R0
0453 5F6F SUBI R22,0xFF
0454 4F7F SBCI R23,0xFF
0455 2E24 MOV R2,R20
0456 2433 CLR R3
0457 1562 CP R22,R2
0458 0573 CPC R23,R3
0459 F2B8 BCS 0x0431
045A D03E RCALL pop_gset5
045B 9624 ADIW R28,4
045C 9508 RET
(0217) }
(0218) }
(0219)
(0220) /*-----------------------------------------------------------------------
(0221) LCD_write_byte : 使用SPI接口写数据到LCD
(0222)
(0223) 输入参数:data :写入的数据;
(0224) command :写数据/命令选择;
(0225)
(0226) 编写日期 :2004-8-10
(0227) 最后修改日期 :2004-8-13
(0228) -----------------------------------------------------------------------*/
(0229) void LCD_write_byte(unsigned char data, unsigned char command)
(0230) {
(0231) PORTB &= ~LCD_CE ; // 使能LCD
_LCD_write_byte:
command --> R18
data --> R16
045D 98C2 CBI 0x18,2
(0232)
(0233) if (command == 0)
045E 2322 TST R18
045F F411 BNE 0x0462
(0234) PORTB &= ~LCD_DC ; // 传送命令
0460 98C0 CBI 0x18,0
0461 C001 RJMP 0x0463
(0235) else
(0236) PORTB |= LCD_DC ; // 传送数据
0462 9AC0 SBI 0x18,0
(0237)
(0238) SPDR = data; // 传送数据到SPI寄存器
0463 B90F OUT 0x0F,R16
(0239)
(0240) while ((SPSR & 0x80) == 0); // 等待数据传送完毕
0464 9B77 SBIS 0x0E,7
0465 CFFE RJMP 0x0464
(0241)
(0242) PORTB |= LCD_CE ; // 关闭LCD
FILE: <library>
0466 9AC2 SBI 0x18,2
0467 9508 RET
push_arg4:
0468 933A ST R19,-Y
0469 932A ST R18,-Y
push_arg2:
046A 931A ST R17,-Y
046B 930A ST R16,-Y
046C 9508 RET
mod8u:
046D 9468 BSET 6
046E C001 RJMP xdiv8u
div8u:
046F 94E8 BCLR 6
xdiv8u:
0470 932A ST R18,-Y
0471 92FA ST R15,-Y
0472 92EA ST R14,-Y
0473 24FF CLR R15
0474 24EE CLR R14
0475 E120 LDI R18,0x10
0476 0F00 LSL R16
0477 1CFF ROL R15
0478 1CEE ROL R14
0479 16E1 CP R14,R17
047A F010 BCS 0x047D
047B 1AE1 SUB R14,R17
047C 9503 INC R16
047D 952A DEC R18
047E F7B9 BNE 0x0476
047F F40E BRTC 0x0481
0480 2D0E MOV R16,R14
0481 90E9 LD R14,Y+
0482 90F9 LD R15,Y+
0483 9129 LD R18,Y+
0484 9508 RET
empy16s:
0485 920A ST R0,-Y
0486 921A ST R1,-Y
0487 938A ST R24,-Y
0488 939A ST R25,-Y
0489 9F02 MUL R16,R18
048A 01C0 MOVW R24,R0
048B 9F12 MUL R17,R18
048C 0D90 ADD R25,R0
048D 9F03 MUL R16,R19
048E 0D90 ADD R25,R0
048F 018C MOVW R16,R24
0490 9199 LD R25,Y+
0491 9189 LD R24,Y+
0492 9019 LD R1,Y+
0493 9009 LD R0,Y+
0494 9508 RET
pop_gset2:
0495 E0E2 LDI R30,2
0496 C010 RJMP pop
pop_gset3:
0497 E0E4 LDI R30,4
0498 C00E RJMP pop
pop_gset5:
0499 27EE CLR R30
049A C00C RJMP pop
push_gset5:
049B 92FA ST R15,-Y
049C 92EA ST R14,-Y
push_gset4:
049D 92DA ST R13,-Y
049E 92CA ST R12,-Y
push_gset3:
049F 92BA ST R11,-Y
04A0 92AA ST R10,-Y
push_gset2:
04A1 937A ST R23,-Y
04A2 936A ST R22,-Y
push_gset1:
04A3 935A ST R21,-Y
04A4 934A ST R20,-Y
04A5 9508 RET
pop_gset1:
04A6 E0E1 LDI R30,1
pop:
04A7 9149 LD R20,Y+
04A8 9159 LD R21,Y+
04A9 FDE0 SBRC R30,0
04AA 9508 RET
04AB 9169 LD R22,Y+
04AC 9179 LD R23,Y+
04AD FDE1 SBRC R30,1
04AE 9508 RET
04AF 90A9 LD R10,Y+
04B0 90B9 LD R11,Y+
04B1 FDE2 SBRC R30,2
04B2 9508 RET
04B3 90C9 LD R12,Y+
04B4 90D9 LD R13,Y+
04B5 FDE3 SBRC R30,3
04B6 9508 RET
04B7 90E9 LD R14,Y+
04B8 90F9 LD R15,Y+
04B9 9508 RET
asgncblk:
04BA 93AA ST R26,-Y
04BB 93BA ST R27,-Y
04BC 93EA ST R30,-Y
04BD 93FA ST R31,-Y
04BE 920A ST R0,-Y
04BF 81AF LDD R26,Y+7
04C0 85B8 LDD R27,Y+8
04C1 81ED LDD R30,Y+5
04C2 81FE LDD R31,Y+6
04C3 3000 CPI R16,0
04C4 0701 CPC R16,R17
04C5 F031 BEQ 0x04CC
04C6 95C8 LPM
04C7 920D ST R0,X+
04C8 9631 ADIW R30,1
04C9 5001 SUBI R16,1
04CA 4010 SBCI R17,0
04CB CFF7 RJMP 0x04C3
04CC 9009 LD R0,Y+
04CD 91F9 LD R31,Y+
04CE 91E9 LD R30,Y+
04CF 91B9 LD R27,Y+
04D0 91A9 LD R26,Y+
04D1 9624 ADIW R28,4
04D2 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -