📄 3310lcd_prj.lst
字号:
0419 54EE SUBI R30,0x4E
041A 4FFF SBCI R31,0xFF
041B 8100 LDD R16,Z+0
041C DEFF RCALL _LCD_set_XY
(0173) for (n=0; n<83; n++)
041D 24AA CLR R10
041E C009 RJMP 0x0428
(0174) {
(0175) LCD_write_byte(buffer_h[n],1);
041F E021 LDI R18,1
0420 01CE MOVW R24,R28
0421 2DEA MOV R30,R10
0422 27FF CLR R31
0423 0FE8 ADD R30,R24
0424 1FF9 ADC R31,R25
0425 8100 LDD R16,Z+0
0426 D072 RCALL _LCD_write_byte
0427 94A3 INC R10
0428 2D8A MOV R24,R10
0429 3583 CPI R24,0x53
042A F3A0 BCS 0x041F
(0176) }
(0177)
(0178) LCD_set_XY(X,Y+1);
042B 2D2E MOV R18,R14
042C 5F2F SUBI R18,0xFF
042D 01FE MOVW R30,R28
042E 54EE SUBI R30,0x4E
042F 4FFF SBCI R31,0xFF
0430 8100 LDD R16,Z+0
0431 DEEA RCALL _LCD_set_XY
(0179) for (n=0; n<83; n++)
0432 24AA CLR R10
0433 C00B RJMP 0x043F
(0180) {
(0181) LCD_write_byte(buffer_l[n],1);
0434 E021 LDI R18,1
0435 01CE MOVW R24,R28
0436 5A8C SUBI R24,0xAC
0437 4F9F SBCI R25,0xFF
0438 2DEA MOV R30,R10
0439 27FF CLR R31
043A 0FE8 ADD R30,R24
043B 1FF9 ADC R31,R25
043C 8100 LDD R16,Z+0
043D D05B RCALL _LCD_write_byte
043E 94A3 INC R10
043F 2D8A MOV R24,R10
0440 3583 CPI R24,0x53
0441 F390 BCS 0x0434
(0182) }
(0183)
(0184) delay_nms(T);
0442 2D0C MOV R16,R12
0443 2711 CLR R17
0444 940E02D7 CALL _delay_nms
0446 9543 INC R20
0447 394C CPI R20,0x9C
0448 F408 BCC 0x044A
0449 CF7D RJMP 0x03C7
044A 96EF ADIW R28,0x3F
044B 96EF ADIW R28,0x3F
044C 96AA ADIW R28,0x2A
044D 940E04D7 CALL pop_gset5
044F 9624 ADIW R28,4
0450 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
0451 940E04A4 CALL push_arg4
0453 940E04DA CALL push_gset5
0455 84CE LDD R12,Y+14
0456 84DF LDD R13,Y+15
0457 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; //计算位图所占行数
0458 E018 LDI R17,0x8
0459 890A LDD R16,Y+18
045A 940E04A9 CALL mod8u
045C 2300 TST R16
045D F429 BNE 0x0463
045E 894A LDD R20,Y+18
045F 9546 LSR R20
0460 9546 LSR R20
0461 9546 LSR R20
0462 C005 RJMP 0x0468
(0206) else
(0207) row=Pix_y/8+1;
0463 894A LDD R20,Y+18
0464 9546 LSR R20
0465 9546 LSR R20
0466 9546 LSR R20
0467 5F4F SUBI R20,0xFF
(0208)
(0209) for (n=0;n<row;n++)
0468 2766 CLR R22
0469 2777 CLR R23
046A C025 RJMP 0x0490
(0210) {
(0211) LCD_set_XY(X,Y);
046B 852C LDD R18,Y+12
046C 850A LDD R16,Y+10
046D DEAE RCALL _LCD_set_XY
(0212) for(i=0; i<Pix_x; i++)
046E 24EE CLR R14
046F 24FF CLR R15
0470 C015 RJMP 0x0486
(0213) {
(0214) LCD_write_byte(map[i+n*Pix_x], 1);
0471 E021 LDI R18,1
0472 2C2A MOV R2,R10
0473 2433 CLR R3
0474 932F PUSH R18
0475 933F PUSH R19
0476 0191 MOVW R18,R2
0477 018B MOVW R16,R22
0478 940E04C1 CALL empy16s
047A 913F POP R19
047B 912F POP R18
047C 01F7 MOVW R30,R14
047D 0FE0 ADD R30,R16
047E 1FF1 ADC R31,R17
047F 0DEC ADD R30,R12
0480 1DFD ADC R31,R13
0481 8100 LDD R16,Z+0
0482 D016 RCALL _LCD_write_byte
0483 01C7 MOVW R24,R14
0484 9601 ADIW R24,1
0485 017C MOVW R14,R24
0486 2C2A MOV R2,R10
0487 2433 CLR R3
0488 14E2 CP R14,R2
0489 04F3 CPC R15,R3
048A F330 BCS 0x0471
(0215) }
(0216) Y++; //换行
048B 840C LDD R0,Y+12
048C 9403 INC R0
048D 860C STD Y+12,R0
048E 5F6F SUBI R22,0xFF
048F 4F7F SBCI R23,0xFF
0490 2E24 MOV R2,R20
0491 2433 CLR R3
0492 1562 CP R22,R2
0493 0573 CPC R23,R3
0494 F2B0 BCS 0x046B
0495 940E04D7 CALL pop_gset5
0497 9624 ADIW R28,4
0498 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
0499 98C4 CBI 0x18,4
(0232)
(0233) if (command == 0)
049A 2322 TST R18
049B F411 BNE 0x049E
(0234) PORTB &= ~LCD_DC ; // 传送命令
049C 98C3 CBI 0x18,3
049D C001 RJMP 0x049F
(0235) else
(0236) PORTB |= LCD_DC ; // 传送数据
049E 9AC3 SBI 0x18,3
(0237)
(0238) SPDR = data; // 传送数据到SPI寄存器
049F B90F OUT 0x0F,R16
(0239)
(0240) while ((SPSR & 0x80) == 0); // 等待数据传送完毕
04A0 9B77 SBIS 0x0E,7
04A1 CFFE RJMP 0x04A0
(0241)
(0242) PORTB |= LCD_CE ; // 关闭LCD
FILE: <library>
04A2 9AC4 SBI 0x18,4
04A3 9508 RET
push_arg4:
04A4 933A ST R19,-Y
04A5 932A ST R18,-Y
push_arg2:
04A6 931A ST R17,-Y
04A7 930A ST R16,-Y
04A8 9508 RET
mod8u:
04A9 9468 BSET 6
04AA C001 RJMP xdiv8u
div8u:
04AB 94E8 BCLR 6
xdiv8u:
04AC 932A ST R18,-Y
04AD 92FA ST R15,-Y
04AE 92EA ST R14,-Y
04AF 24FF CLR R15
04B0 24EE CLR R14
04B1 E120 LDI R18,0x10
04B2 0F00 LSL R16
04B3 1CFF ROL R15
04B4 1CEE ROL R14
04B5 16E1 CP R14,R17
04B6 F010 BCS 0x04B9
04B7 1AE1 SUB R14,R17
04B8 9503 INC R16
04B9 952A DEC R18
04BA F7B9 BNE 0x04B2
04BB F40E BRTC 0x04BD
04BC 2D0E MOV R16,R14
04BD 90E9 LD R14,Y+
04BE 90F9 LD R15,Y+
04BF 9129 LD R18,Y+
04C0 9508 RET
empy16s:
04C1 920A ST R0,-Y
04C2 921A ST R1,-Y
04C3 938A ST R24,-Y
04C4 939A ST R25,-Y
04C5 9F02 MUL R16,R18
04C6 01C0 MOVW R24,R0
04C7 9F12 MUL R17,R18
04C8 0D90 ADD R25,R0
04C9 9F03 MUL R16,R19
04CA 0D90 ADD R25,R0
04CB 018C MOVW R16,R24
04CC 9199 LD R25,Y+
04CD 9189 LD R24,Y+
04CE 9019 LD R1,Y+
04CF 9009 LD R0,Y+
04D0 9508 RET
pop_gset2:
04D1 E0E2 LDI R30,2
04D2 940C04E6 JMP pop
pop_gset3:
04D4 E0E4 LDI R30,4
04D5 940C04E6 JMP pop
pop_gset5:
04D7 27EE CLR R30
04D8 940C04E6 JMP pop
push_gset5:
04DA 92FA ST R15,-Y
04DB 92EA ST R14,-Y
push_gset4:
04DC 92DA ST R13,-Y
04DD 92CA ST R12,-Y
push_gset3:
04DE 92BA ST R11,-Y
04DF 92AA ST R10,-Y
push_gset2:
04E0 937A ST R23,-Y
04E1 936A ST R22,-Y
push_gset1:
04E2 935A ST R21,-Y
04E3 934A ST R20,-Y
04E4 9508 RET
pop_gset1:
04E5 E0E1 LDI R30,1
pop:
04E6 9149 LD R20,Y+
04E7 9159 LD R21,Y+
04E8 FDE0 SBRC R30,0
04E9 9508 RET
04EA 9169 LD R22,Y+
04EB 9179 LD R23,Y+
04EC FDE1 SBRC R30,1
04ED 9508 RET
04EE 90A9 LD R10,Y+
04EF 90B9 LD R11,Y+
04F0 FDE2 SBRC R30,2
04F1 9508 RET
04F2 90C9 LD R12,Y+
04F3 90D9 LD R13,Y+
04F4 FDE3 SBRC R30,3
04F5 9508 RET
04F6 90E9 LD R14,Y+
04F7 90F9 LD R15,Y+
04F8 9508 RET
asgncblk:
04F9 93AA ST R26,-Y
04FA 93BA ST R27,-Y
04FB 93EA ST R30,-Y
04FC 93FA ST R31,-Y
04FD 920A ST R0,-Y
04FE 81AF LDD R26,Y+7
04FF 85B8 LDD R27,Y+8
0500 81ED LDD R30,Y+5
0501 81FE LDD R31,Y+6
0502 3000 CPI R16,0
0503 0701 CPC R16,R17
0504 F031 BEQ 0x050B
0505 95C8 LPM
0506 920D ST R0,X+
0507 9631 ADIW R30,1
0508 5001 SUBI R16,1
0509 4010 SBCI R17,0
050A CFF7 RJMP 0x0502
050B 9009 LD R0,Y+
050C 91F9 LD R31,Y+
050D 91E9 LD R30,Y+
050E 91B9 LD R27,Y+
050F 91A9 LD R26,Y+
0510 9624 ADIW R28,4
0511 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -