⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdsd1335.lst

📁 AVR单片机
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -