📄 5110.lst
字号:
0458 940E050C CALL pop_gset5
045A 9624 ADIW R28,4
045B 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
045C 940E04D9 CALL push_arg4
045E 940E050F CALL push_gset5
0460 84CE LDD R12,Y+14
0461 84DF LDD R13,Y+15
0462 88A8 LDD R10,Y+16
(0198) }
(0199) }
(0200) /*************************************************************************
(0201) ** 函数名称: LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
(0202) ** 功能描述: 位图绘制函数
(0203) ** 输 入: X、Y :位图绘制的起始X、Y坐标;
(0204) *map :位图点阵数据;
(0205) Pix_x :位图像素(长)
(0206) Pix_y :位图像素(宽)
(0207) ** 输出 :
(0208) ** 全局变量: 无
(0209) ** 调用模块:
(0210) ** 说明:
(0211) ** 注意:
(0212) **************************************************************************/
(0213) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y)
(0214) {
(0215) unsigned int i,n;
(0216) unsigned char row;
(0217)
(0218) if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
0463 E018 LDI R17,0x8
0464 890A LDD R16,Y+18
0465 940E04DE CALL mod8u
0467 2300 TST R16
0468 F429 BNE 0x046E
0469 894A LDD R20,Y+18
046A 9546 LSR R20
046B 9546 LSR R20
046C 9546 LSR R20
046D C005 RJMP 0x0473
(0219) else row=Pix_y/8+1;
046E 894A LDD R20,Y+18
046F 9546 LSR R20
0470 9546 LSR R20
0471 9546 LSR R20
0472 5F4F SUBI R20,0xFF
(0220)
(0221) for (n=0;n<row;n++)
0473 2766 CLR R22
0474 2777 CLR R23
0475 C025 RJMP 0x049B
(0222) {
(0223) LCD_set_XY(X,Y);
0476 852C LDD R18,Y+12
0477 850A LDD R16,Y+10
0478 DEA8 RCALL _LCD_set_XY
(0224) for(i=0; i<Pix_x; i++)
0479 24EE CLR R14
047A 24FF CLR R15
047B C015 RJMP 0x0491
(0225) {
(0226) LCD_write_byte(map[i+n*Pix_x], 1);
047C E021 LDI R18,1
047D 2C2A MOV R2,R10
047E 2433 CLR R3
047F 932F PUSH R18
0480 933F PUSH R19
0481 0191 MOVW R18,R2
0482 018B MOVW R16,R22
0483 940E04F6 CALL empy16s
0485 913F POP R19
0486 912F POP R18
0487 01F7 MOVW R30,R14
0488 0FE0 ADD R30,R16
0489 1FF1 ADC R31,R17
048A 0DEC ADD R30,R12
048B 1DFD ADC R31,R13
048C 8100 LDD R16,Z+0
048D D016 RCALL _LCD_write_byte
048E 01C7 MOVW R24,R14
048F 9601 ADIW R24,1
0490 017C MOVW R14,R24
0491 2C2A MOV R2,R10
0492 2433 CLR R3
0493 14E2 CP R14,R2
0494 04F3 CPC R15,R3
0495 F330 BCS 0x047C
(0227) }
(0228) Y++; //换行
0496 840C LDD R0,Y+12
0497 9403 INC R0
0498 860C STD Y+12,R0
0499 5F6F SUBI R22,0xFF
049A 4F7F SBCI R23,0xFF
049B 2E24 MOV R2,R20
049C 2433 CLR R3
049D 1562 CP R22,R2
049E 0573 CPC R23,R3
049F F2B0 BCS 0x0476
04A0 940E050C CALL pop_gset5
04A2 9624 ADIW R28,4
04A3 9508 RET
(0229) }
(0230) }
(0231) /*************************************************************************
(0232) ** 函数名称: LCD_write_byte(unsigned char data, unsigned char command)
(0233) ** 功能描述: 使用SPI接口写数据到LCD
(0234) ** 输 入: data :写入的数据;
(0235) command :写数据/命令选择;
(0236) ** 输出 :
(0237) ** 全局变量: 无
(0238) ** 调用模块:
(0239) ** 说明:
(0240) ** 注意:
(0241) **************************************************************************/
(0242) void LCD_write_byte(unsigned char data, unsigned char command)
(0243) {
(0244) PORTB &= ~LCD_CE ; // 使能LCD
_LCD_write_byte:
command --> R18
data --> R16
04A4 98C4 CBI 0x18,4
(0245)
(0246) if (command == 0)
04A5 2322 TST R18
04A6 F411 BNE 0x04A9
(0247) PORTB &= ~LCD_DC ; // 传送命令
04A7 98C3 CBI 0x18,3
04A8 C001 RJMP 0x04AA
(0248) else
(0249) PORTB |= LCD_DC ; // 传送数据
04A9 9AC3 SBI 0x18,3
(0250)
(0251) SPDR = data; // 传送数据到SPI寄存器
04AA B90F OUT 0x0F,R16
(0252)
(0253) while ((SPSR & 0x80) == 0); // 等待数据传送完毕
04AB 9B77 SBIS 0x0E,7
04AC CFFE RJMP 0x04AB
(0254)
(0255) PORTB |= LCD_CE ; // 关闭LCD
04AD 9AC4 SBI 0x18,4
04AE 9508 RET
FILE: D:\avrvi\democode\5110_综合演示\source\lib\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009)
(0010) void delay_1us(void) //1us延时函数
(0011) {
(0012) asm("nop");
_delay_1us:
04AF 0000 NOP
04B0 9508 RET
_delay_nus:
i --> R20
n --> R22
04B1 940E0515 CALL push_gset2
04B3 01B8 MOVW R22,R16
(0013) }
(0014)
(0015) void delay_nus(unsigned int n) //N us延时函数
(0016) {
(0017) unsigned int i=0;
04B4 2744 CLR R20
04B5 2755 CLR R21
(0018) for (i=0;i<n;i++)
04B6 C003 RJMP 0x04BA
(0019) delay_1us();
04B7 DFF7 RCALL _delay_1us
04B8 5F4F SUBI R20,0xFF
04B9 4F5F SBCI R21,0xFF
04BA 1746 CP R20,R22
04BB 0757 CPC R21,R23
04BC F3D0 BCS 0x04B7
04BD 940E0506 CALL pop_gset2
04BF 9508 RET
(0020) }
(0021)
(0022) void delay_1ms(void) //1ms延时函数
(0023) {
(0024) unsigned int i;
(0025) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
04C0 2700 CLR R16
04C1 2711 CLR R17
04C2 C002 RJMP 0x04C5
04C3 5F0F SUBI R16,0xFF
04C4 4F1F SBCI R17,0xFF
04C5 3704 CPI R16,0x74
04C6 E0E4 LDI R30,4
04C7 071E CPC R17,R30
04C8 F3D0 BCS 0x04C3
04C9 9508 RET
_delay_nms:
i --> R20
n --> R22
04CA 940E0515 CALL push_gset2
04CC 01B8 MOVW R22,R16
(0026) }
(0027)
(0028) void delay_nms(unsigned int n) //N ms延时函数
(0029) {
(0030) unsigned int i=0;
04CD 2744 CLR R20
04CE 2755 CLR R21
(0031) for (i=0;i<n;i++)
04CF C003 RJMP 0x04D3
(0032) delay_1ms();
FILE: <library>
04D0 DFEF RCALL _delay_1ms
04D1 5F4F SUBI R20,0xFF
04D2 4F5F SBCI R21,0xFF
04D3 1746 CP R20,R22
04D4 0757 CPC R21,R23
04D5 F3D0 BCS 0x04D0
04D6 940E0506 CALL pop_gset2
04D8 9508 RET
push_arg4:
04D9 933A ST R19,-Y
04DA 932A ST R18,-Y
push_arg2:
04DB 931A ST R17,-Y
04DC 930A ST R16,-Y
04DD 9508 RET
mod8u:
04DE 9468 BSET 6
04DF C001 RJMP xdiv8u
div8u:
04E0 94E8 BCLR 6
xdiv8u:
04E1 932A ST R18,-Y
04E2 92FA ST R15,-Y
04E3 92EA ST R14,-Y
04E4 24FF CLR R15
04E5 24EE CLR R14
04E6 E120 LDI R18,0x10
04E7 0F00 LSL R16
04E8 1CFF ROL R15
04E9 1CEE ROL R14
04EA 16E1 CP R14,R17
04EB F010 BCS 0x04EE
04EC 1AE1 SUB R14,R17
04ED 9503 INC R16
04EE 952A DEC R18
04EF F7B9 BNE 0x04E7
04F0 F40E BRTC 0x04F2
04F1 2D0E MOV R16,R14
04F2 90E9 LD R14,Y+
04F3 90F9 LD R15,Y+
04F4 9129 LD R18,Y+
04F5 9508 RET
empy16s:
04F6 920A ST R0,-Y
04F7 921A ST R1,-Y
04F8 938A ST R24,-Y
04F9 939A ST R25,-Y
04FA 9F02 MUL R16,R18
04FB 01C0 MOVW R24,R0
04FC 9F12 MUL R17,R18
04FD 0D90 ADD R25,R0
04FE 9F03 MUL R16,R19
04FF 0D90 ADD R25,R0
0500 018C MOVW R16,R24
0501 9199 LD R25,Y+
0502 9189 LD R24,Y+
0503 9019 LD R1,Y+
0504 9009 LD R0,Y+
0505 9508 RET
pop_gset2:
0506 E0E2 LDI R30,2
0507 940C051B JMP pop
pop_gset3:
0509 E0E4 LDI R30,4
050A 940C051B JMP pop
pop_gset5:
050C 27EE CLR R30
050D 940C051B JMP pop
push_gset5:
050F 92FA ST R15,-Y
0510 92EA ST R14,-Y
push_gset4:
0511 92DA ST R13,-Y
0512 92CA ST R12,-Y
push_gset3:
0513 92BA ST R11,-Y
0514 92AA ST R10,-Y
push_gset2:
0515 937A ST R23,-Y
0516 936A ST R22,-Y
push_gset1:
0517 935A ST R21,-Y
0518 934A ST R20,-Y
0519 9508 RET
pop_gset1:
051A E0E1 LDI R30,1
pop:
051B 9149 LD R20,Y+
051C 9159 LD R21,Y+
051D FDE0 SBRC R30,0
051E 9508 RET
051F 9169 LD R22,Y+
0520 9179 LD R23,Y+
0521 FDE1 SBRC R30,1
0522 9508 RET
0523 90A9 LD R10,Y+
0524 90B9 LD R11,Y+
0525 FDE2 SBRC R30,2
0526 9508 RET
0527 90C9 LD R12,Y+
0528 90D9 LD R13,Y+
0529 FDE3 SBRC R30,3
052A 9508 RET
052B 90E9 LD R14,Y+
052C 90F9 LD R15,Y+
052D 9508 RET
asgncblk:
052E 93AA ST R26,-Y
052F 93BA ST R27,-Y
0530 93EA ST R30,-Y
0531 93FA ST R31,-Y
0532 920A ST R0,-Y
0533 81AF LDD R26,Y+7
0534 85B8 LDD R27,Y+8
0535 81ED LDD R30,Y+5
0536 81FE LDD R31,Y+6
0537 3000 CPI R16,0
0538 0701 CPC R16,R17
0539 F031 BEQ 0x0540
053A 95C8 LPM
053B 920D ST R0,X+
053C 9631 ADIW R30,1
053D 5001 SUBI R16,1
053E 4010 SBCI R17,0
053F CFF7 RJMP 0x0537
0540 9009 LD R0,Y+
0541 91F9 LD R31,Y+
0542 91E9 LD R30,Y+
0543 91B9 LD R27,Y+
0544 91A9 LD R26,Y+
0545 9624 ADIW R28,4
0546 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -