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