📄 lcdsd1335.lst
字号:
(0180) Clears the text layer / screen.
(0181) ***********************************************************************/
(0182) void lcd_clear_text(void)
(0183) {
(0184) int i;
(0185) lcd_write_command(0x46);
16C6 E406 LDI R16,0x46
16C7 DF86 RCALL _lcd_write_command
(0186) lcd_write_data(0x00);
16C8 2700 CLR R16
16C9 DF89 RCALL _lcd_write_data
(0187) lcd_write_data(0x00);
16CA 2700 CLR R16
16CB DF87 RCALL _lcd_write_data
(0188) lcd_write_command(0x42);
16CC E402 LDI R16,0x42
16CD DF80 RCALL _lcd_write_command
(0189) for (i=0; i<((LCD_X_SIZE/8)*(LCD_Y_SIZE/8)); i++) lcd_write_data(' ');
16CE 2744 CLR R20
16CF 2755 CLR R21
16D0 E200 LDI R16,0x20
16D1 DF81 RCALL _lcd_write_data
16D2 5F4F SUBI R20,0xFF
16D3 4F5F SBCI R21,0xFF
16D4 3B40 CPI R20,0xB0
16D5 E0E4 LDI R30,4
16D6 075E CPC R21,R30
16D7 F3C4 BLT 0x16D0
(0190) lcd_write_command(0x46);
16D8 E406 LDI R16,0x46
16D9 DF74 RCALL _lcd_write_command
(0191) lcd_write_data(0x00);
16DA 2700 CLR R16
16DB DF77 RCALL _lcd_write_data
(0192) lcd_write_data(0x00);
16DC 2700 CLR R16
16DD DF75 RCALL _lcd_write_data
16DE 9159 LD R21,Y+
16DF 9149 LD R20,Y+
16E0 9508 RET
_lcd_goto:
hi --> R10
lo --> R12
addr --> R20
line --> R12
column --> R10
16E1 940E 1AFC CALL push_xgset303C
16E3 2EC2 MOV R12,R18
16E4 2EA0 MOV R10,R16
(0193) }
(0194)
(0195)
(0196) /***********************************************************************
(0197) Goto specified column and line. 1,1 is the upper left corner.
(0198) ***********************************************************************/
(0199) void lcd_goto(unsigned char column, unsigned char line)
(0200) {
(0201) int addr;
(0202) unsigned char lo;
(0203) unsigned char hi;
(0204) column--;
16E5 94AA DEC R10
(0205) line--;
16E6 94CA DEC R12
(0206) addr = (line * (LCD_X_SIZE/8)) + column;
16E7 E288 LDI R24,0x28
16E8 9D8C MUL R24,R12
16E9 01A0 MOVW R20,R0
16EA 2C2A MOV R2,R10
16EB 2433 CLR R3
16EC 0D42 ADD R20,R2
16ED 1D53 ADC R21,R3
(0207) lo = (unsigned char) (addr & 0x00ff);
16EE 01CA MOVW R24,R20
16EF 7090 ANDI R25,0
16F0 2EC8 MOV R12,R24
(0208) hi = (unsigned char) ((addr & 0xff00) >> 8);
16F1 01CA MOVW R24,R20
16F2 7080 ANDI R24,0
16F3 015C MOVW R10,R24
16F4 2CAB MOV R10,R11
16F5 24BB CLR R11
(0209) lcd_write_command(0x46);
16F6 E406 LDI R16,0x46
16F7 DF56 RCALL _lcd_write_command
(0210) lcd_write_data(lo);
16F8 2D0C MOV R16,R12
16F9 DF59 RCALL _lcd_write_data
(0211) lcd_write_data(hi);
16FA 2D0A MOV R16,R10
16FB DF57 RCALL _lcd_write_data
16FC 940C 1B03 JMP pop_xgset303C
_lcd_write_string:
i --> Y,+1
ptr --> R10
16FE 92AA ST R10,-Y
16FF 92BA ST R11,-Y
1700 0158 MOVW R10,R16
(0212) }
(0213)
(0214)
(0215) /***********************************************************************
(0216) Write strings to the text layer. Set position with lcd_goto.
(0217) Text will wrap if to long to show on one line.
(0218) ***********************************************************************/
(0219) void lcd_write_string(char *ptr)
(0220) {
(0221) int i;
(0222) lcd_write_command(0x42);
1701 E402 LDI R16,0x42
1702 DF4B RCALL _lcd_write_command
1703 C004 RJMP 0x1708
(0223) while (*ptr != 0x00) lcd_write_data(*ptr++);
1704 01F5 MOVW R30,R10
1705 9101 LD R16,Z+
1706 015F MOVW R10,R30
1707 DF4B RCALL _lcd_write_data
1708 01F5 MOVW R30,R10
1709 8020 LDD R2,Z+0
170A 2022 TST R2
170B F7C1 BNE 0x1704
170C 90B9 LD R11,Y+
170D 90A9 LD R10,Y+
170E 9508 RET
_lcd_show_cursor:
show --> R10
170F 92AA ST R10,-Y
1710 2EA0 MOV R10,R16
(0224) }
(0225)
(0226)
(0227) /***********************************************************************
(0228) Show or hide cursor. 0=Hide, 1=Show.
(0229) ***********************************************************************/
(0230) void lcd_show_cursor(unsigned char show)
(0231) {
(0232) lcd_write_command(0x59);
1711 E509 LDI R16,0x59
1712 DF3B RCALL _lcd_write_command
(0233) if (show == 0) lcd_write_data(0x14);
1713 20AA TST R10
1714 F419 BNE 0x1718
1715 E104 LDI R16,0x14
1716 DF3C RCALL _lcd_write_data
1717 C002 RJMP 0x171A
(0234) else lcd_write_data(0x16);
1718 E106 LDI R16,0x16
1719 DF39 RCALL _lcd_write_data
171A 90A9 LD R10,Y+
171B 9508 RET
_lcd_clear_graphics:
i --> R20
171C 934A ST R20,-Y
171D 935A ST R21,-Y
(0235) }
(0236)
(0237)
(0238) /***********************************************************************
(0239) Clears the graphic layer / screen.
(0240) ***********************************************************************/
(0241) void lcd_clear_graphics(void)
(0242) {
(0243) int i;
(0244) lcd_write_command(0x46);
171E E406 LDI R16,0x46
171F DF2E RCALL _lcd_write_command
(0245) lcd_write_data(0x00);
1720 2700 CLR R16
1721 DF31 RCALL _lcd_write_data
(0246) lcd_write_data(0x10);
1722 E100 LDI R16,0x10
1723 DF2F RCALL _lcd_write_data
(0247) lcd_write_command(0x42);
1724 E402 LDI R16,0x42
1725 DF28 RCALL _lcd_write_command
(0248) for (i=0; i<((LCD_X_SIZE/8)*LCD_Y_SIZE); i++) lcd_write_data(0x00);
1726 2744 CLR R20
1727 2755 CLR R21
1728 2700 CLR R16
1729 DF29 RCALL _lcd_write_data
172A 5F4F SUBI R20,0xFF
172B 4F5F SBCI R21,0xFF
172C 3840 CPI R20,0x80
172D E2E5 LDI R30,0x25
172E 075E CPC R21,R30
172F F3C4 BLT 0x1728
(0249) lcd_write_command(0x46);
1730 E406 LDI R16,0x46
1731 DF1C RCALL _lcd_write_command
(0250) lcd_write_data(0x00);
1732 2700 CLR R16
1733 DF1F RCALL _lcd_write_data
(0251) lcd_write_data(0x10);
1734 E100 LDI R16,0x10
1735 DF1D RCALL _lcd_write_data
1736 9159 LD R21,Y+
1737 9149 LD R20,Y+
1738 9508 RET
_lcd_pixel:
Offset --> R20
byte --> R10
high --> R12
low --> R14
Address --> R22
show --> Y,+10
y --> R22
x --> R20
1739 940E 1AD9 CALL push_xgsetF0FC
173B 01B9 MOVW R22,R18
173C 01A8 MOVW R20,R16
(0252) }
(0253)
(0254)
(0255) /***********************************************************************
(0256) Write pixel data to the display at specified position.
(0257) Set show to 1 to draw pixel, set to 0 to hide pixel.
(0258) ***********************************************************************/
(0259) void lcd_pixel(int x, int y, unsigned char show)
(0260) {
(0261) unsigned int Address;
(0262) unsigned char Offset;
(0263) unsigned char low;
(0264) unsigned char high;
(0265) unsigned char byte;
(0266) x--;
173D 5041 SUBI R20,1
173E 4050 SBCI R21,0
(0267) y--;
173F 5061 SUBI R22,1
1740 4070 SBCI R23,0
(0268) Address = (y * (LCD_X_SIZE/8)) + (x / 8);
1741 E028 LDI R18,0x8
1742 E030 LDI R19,0
1743 018A MOVW R16,R20
1744 940E 1A74 CALL div16s
1746 0118 MOVW R2,R16
1747 E208 LDI R16,0x28
1748 E010 LDI R17,0
1749 019B MOVW R18,R22
174A 940E 1ABE CALL empy16s
174C 01B8 MOVW R22,R16
174D 0D62 ADD R22,R2
174E 1D73 ADC R23,R3
(0269) Offset = x - ((x / 8) * 8);
174F E028 LDI R18,0x8
1750 E030 LDI R19,0
1751 018A MOVW R16,R20
1752 940E 1A74 CALL div16s
1754 0118 MOVW R2,R16
1755 0C22 LSL R2
1756 1C33 ROL R3
1757 0C22 LSL R2
1758 1C33 ROL R3
1759 0C22 LSL R2
175A 1C33 ROL R3
175B 1942 SUB R20,R2
175C 0953 SBC R21,R3
(0270) low = (unsigned char) (Address & 0x00ff);
175D 01CB MOVW R24,R22
175E 7090 ANDI R25,0
175F 2EE8 MOV R14,R24
(0271) high = (unsigned char) (((Address & 0xff00) >> 8) + 0x10);
1760 01CB MOVW R24,R22
1761 7080 ANDI R24,0
1762 2F89 MOV R24,R25
1763 2799 CLR R25
1764 9640 ADIW R24,0x10
1765 2EC8 MOV R12,R24
(0272) lcd_write_command(0x46);
1766 E406 LDI R16,0x46
1767 DEE6 RCALL _lcd_write_command
(0273) lcd_write_data(low);
1768 2D0E MOV R16,R14
1769 DEE9 RCALL _lcd_write_data
(0274) lcd_write_data(high);
176A 2D0C MOV R16,R12
176B DEE7 RCALL _lcd_write_data
(0275) lcd_write_command(0x43);
176C E403 LDI R16,0x43
176D DEE0 RCALL _lcd_write_command
(0276) byte = lcd_read_data();
176E DEE9 RCALL _lcd_read_data
176F 2EA0 MOV R10,R16
(0277) if (show != 0) byte |= (0x80 >> Offset);
1770 840A LDD R0,Y+10
1771 2000 TST R0
1772 F061 BEQ 0x177F
1773 2F24 MOV R18,R20
1774 2733 CLR R19
1775 E800 LDI R16,0x80
1776 E010 LDI R17,0
1777 940E 1A69 CALL asr16
1779 2C2A MOV R2,R10
177A 2433 CLR R3
177B 2A20 OR R2,R16
177C 2A31 OR R3,R17
177D 2CA2 MOV R10,R2
177E C00E RJMP 0x178D
(0278) else byte &= (~(0x80 >> Offset));
177F 2F24 MOV R18,R20
1780 2733 CLR R19
1781 E800 LDI R16,0x80
1782 E010 LDI R17,0
1783 940E 1A69 CALL asr16
1785 0118 MOVW R2,R16
1786 9420 COM R2
1787 9430 COM R3
1788 2C4A MOV R4,R10
1789 2455 CLR R5
178A 2042 AND R4,R2
178B 2053 AND R5,R3
178C 2CA4 MOV R10,R4
(0279) lcd_write_command(0x46);
178D E406 LDI R16,0x46
178E DEBF RCALL _lcd_write_command
(0280) lcd_write_data(low);
178F 2D0E MOV R16,R14
1790 DEC2 RCALL _lcd_write_data
(0281) lcd_write_data(high);
1791 2D0C MOV R16,R12
1792 DEC0 RCALL _lcd_write_data
(0282) lcd_write_command(0x42);
1793 E402 LDI R16,0x42
1794 DEB9 RCALL _lcd_write_command
(0283) lcd_write_data(byte);
1795 2D0A MOV R16,R10
1796 DEBC RCALL _lcd_write_data
1797 940C 1ACE JMP pop_xgsetF0FC
_lcd_rectangle:
i --> R20
show --> R10
y2 --> R12
x2 --> R14
y1 --> Y,+11
x1 --> R22
1799 933A ST R19,-Y
179A 932A ST R18,-Y
179B 940E 1AD9 CALL push_xgsetF0FC
179D 01B8 MOVW R22,R16
179E 9721 SBIW R28,1
179F 84ED LDD R14,Y+13
17A0 84FE LDD R15,Y+14
17A1 84CF LDD R12,Y+15
17A2 88D8 LDD R13,Y+16
17A3 88A9 LDD R10,Y+17
(0284) }
(0285)
(0286)
(0287) /***********************************************************************
(0288) Draws a rectangle from x1,y1 to x2,y2.
(0289) Set show to 1 to draw pixel, set to 0 to hide pixel.
(0290) ***********************************************************************/
(0291) void lcd_rectangle(int x1, int y1, int x2, int y2, unsigned char show)
(0292) {
(0293) int i;
(0294) for (i=x1; i<=x2; i++) lcd_pixel(i,y1,show);
17A4 01AB MOVW R20,R22
17A5 C007 RJMP 0x17AD
17A6 82A8 STD Y+0,R10
17A7 852B LDD R18,Y+11
17A8 853C LDD R19,Y+12
17A9 018A MOVW R16,R20
17AA DF8E RCALL _lcd_pixel
17AB 5F4F SUBI R20,0xFF
17AC 4F5F SBCI R21,0xFF
17AD 16E4 CP R14,R20
17AE 06F5 CPC R15,R21
17AF F7B4 BGE 0x17A6
(0295) for (i=x1; i<=x2; i++) lcd_pixel(i,y2,show);
17B0 01AB MOVW R20,R22
17B1 C006 RJMP 0x17B8
17B2 82A8 STD Y+0,R10
17B3 0196 MOVW R18,R12
17B4 018A MOVW R16,R20
17B5 DF83 RCALL _lcd_pixel
17B6 5F4F SUBI R20,0xFF
17B7 4F5F SBCI R21,0xFF
17B8 16E4 CP R14,R20
17B9 06F5 CPC R15,R21
17BA F7BC BGE 0x17B2
(0296) for (i=y1; i<=y2; i++) lcd_pixel(x1,i,show);
17BB 854B LDD R20,Y+11
17BC 855C LDD R21,Y+12
17BD C006 RJMP 0x17C4
17BE 82A8 STD Y+0,R10
17BF 019A MOVW R18,R20
17C0 018B MOVW R16,R22
17C1 DF77 RCALL _lcd_pixel
17C2 5F4F SUBI R20,0xFF
17C3 4F5F SBCI R21,0xFF
17C4 16C4 CP R12,R20
17C5 06D5 CPC R13,R21
17C6 F7BC BGE 0x17BE
(0297) for (i=y1; i<=y2; i++) lcd_pixel(x2,i,show);
17C7 854B LDD R20,Y+11
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -