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

📄 lcd_240128.lst

📁 基于AVR和51的240*128液晶显示模块驱动程序。很有用的喔~
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0184) 	glcd_ce_low();   // CE置低
(0185) 	_NOP();
(0186) 	_NOP();
(0187) 	glcd_byte = LCD_DATA_PIN;  // 读取数据
(0188) 	glcd_rd_high();   // RD置高
(0189) 	glcd_ce_high();   // CE置高
(0190) 	return(glcd_byte);
(0191) }
(0192) */
(0193) //*************************************************************************************************//
(0194) //设置文本指针地址
(0195) void Lcd_Locate(unsigned char x,unsigned char y)
(0196) {
(0197) 	unsigned int addr;
(0198) 	addr = y * LCD_WIDTH + x + LCD_TEXT_BASE;
(0199) 	Lcd_SendCom2((unsigned char)(addr),(addr>>8),COMM_SET_POSITION);
(0200) }
(0201) 
    00A6 DFC7      RCALL	_Lcd_SendDat
    00A7 2F04      MOV	R16,R20
    00A8 DFC5      RCALL	_Lcd_SendDat
    00A9 810C      LDD	R16,Y+4
    00AA DFD7      RCALL	_Lcd_SendCom0
    00AB 940E03DA  CALL	pop_gset2
    00AD 9508      RET
(0202) //*************************************************************************************************//
_Lcd_Locate:
    00AE 940E03E9  CALL	push_gset2
    00B0 2F62      MOV	R22,R18
    00B1 2F40      MOV	R20,R16
    00B2 9721      SBIW	R28,1
    00B3 E18E      LDI	R24,0x1E
    00B4 9F86      MUL	R24,R22
    00B5 0110      MOVW	R2,R0
    00B6 2E44      MOV	R4,R20
    00B7 2455      CLR	R5
    00B8 0C24      ADD	R2,R4
    00B9 1C35      ADC	R3,R5
    00BA 01A1      MOVW	R20,R2
    00BB E284      LDI	R24,0x24
(0203) 
(0204) //**************************************************************************************************//
(0205) //清全部32KB内存
(0206) void Lcd_ClrScreen(void)    
(0207) {
(0208) 	unsigned int i;
(0209) 	Lcd_SendCom2(0,0,COMM_SET_POSITION);	//设置指针地址为0
(0210) 	for (i=0;i<0x8000;i++)
(0211) 		Lcd_SendCom1(0x00,COMM_WRITE_PUP);    // 0xc0为数据写入、增加指针 命令
(0212) }
    00BC 8388      STD	Y+0,R24
    00BD 0191      MOVW	R18,R2
    00BE 2F23      MOV	R18,R19
    00BF 2733      CLR	R19
    00C0 2D02      MOV	R16,R2
(0213) 
    00C1 DFDF      RCALL	_Lcd_SendCom2
    00C2 9621      ADIW	R28,1
    00C3 940E03DA  CALL	pop_gset2
(0214) //文本清屏
    00C5 9508      RET
_Lcd_ClrScreen:
  i                    --> R20
    00C6 940E03EB  CALL	push_gset1
    00C8 9721      SBIW	R28,1
    00C9 E284      LDI	R24,0x24
    00CA 8388      STD	Y+0,R24
    00CB 2722      CLR	R18
    00CC 2700      CLR	R16
    00CD DFD3      RCALL	_Lcd_SendCom2
    00CE 2744      CLR	R20
    00CF 2755      CLR	R21
    00D0 C005      RJMP	0x00D6
    00D1 EC20      LDI	R18,0xC0
    00D2 2700      CLR	R16
    00D3 DFC2      RCALL	_Lcd_SendCom1
(0215) void Lcd_ClrText(void)
(0216) {
(0217) 	unsigned int i;   
(0218) 	Lcd_SendCom2((unsigned char)(LCD_TEXT_BASE),(LCD_TEXT_BASE>>8),COMM_SET_POSITION);     // 设置地址为文本区基地址
(0219) 	for (i=0;i<480;i++)
(0220) 		Lcd_SendCom1(0,COMM_WRITE_PUP);    // 0xc0为数据写入、增加指针 命令
(0221) }
    00D4 5F4F      SUBI	R20,0xFF
    00D5 4F5F      SBCI	R21,0xFF
    00D6 3040      CPI	R20,0
    00D7 E8E0      LDI	R30,0x80
    00D8 075E      CPC	R21,R30
(0222) 
    00D9 F3B8      BCS	0x00D1
    00DA 9621      ADIW	R28,1
(0223) // 图形清屏
    00DB 940E03EE  CALL	pop_gset1
    00DD 9508      RET
_Lcd_ClrText:
  i                    --> R20
    00DE 940E03EB  CALL	push_gset1
    00E0 9721      SBIW	R28,1
    00E1 E284      LDI	R24,0x24
    00E2 8388      STD	Y+0,R24
    00E3 2722      CLR	R18
    00E4 2700      CLR	R16
    00E5 DFBB      RCALL	_Lcd_SendCom2
    00E6 2744      CLR	R20
    00E7 2755      CLR	R21
    00E8 C005      RJMP	0x00EE
    00E9 EC20      LDI	R18,0xC0
    00EA 2700      CLR	R16
(0224) void Lcd_ClrGraph(void)    
(0225) {
(0226) 	unsigned int i;
(0227) 	Lcd_SendCom2((unsigned char)(LCD_GRAPH_BASE),(LCD_GRAPH_BASE>>8),COMM_SET_POSITION);     // 设置地址为图形区基地址
(0228) 	for (i=0;i<3840;i++)	// 必须为3840
(0229) 		Lcd_SendCom1(0x00,COMM_WRITE_PUP);    // 0xc0为数据写入、增加指针 命令
(0230) }
    00EB DFAA      RCALL	_Lcd_SendCom1
    00EC 5F4F      SUBI	R20,0xFF
    00ED 4F5F      SBCI	R21,0xFF
    00EE 3E40      CPI	R20,0xE0
    00EF E0E1      LDI	R30,1
(0231) //**************************************************************************************************//
    00F0 075E      CPC	R21,R30
    00F1 F3B8      BCS	0x00E9
(0232) 
    00F2 9621      ADIW	R28,1
    00F3 940E03EE  CALL	pop_gset1
    00F5 9508      RET
_Lcd_ClrGraph:
  i                    --> R20
    00F6 940E03EB  CALL	push_gset1
    00F8 9721      SBIW	R28,1
    00F9 E284      LDI	R24,0x24
    00FA 8388      STD	Y+0,R24
    00FB E023      LDI	R18,3
    00FC E000      LDI	R16,0
    00FD DFA3      RCALL	_Lcd_SendCom2
    00FE 2744      CLR	R20
    00FF 2755      CLR	R21
    0100 C005      RJMP	0x0106
    0101 EC20      LDI	R18,0xC0
    0102 2700      CLR	R16
    0103 DF92      RCALL	_Lcd_SendCom1
    0104 5F4F      SUBI	R20,0xFF
(0233) 
(0234) //**************************************************************************************************//
(0235) // 显示字符串RAM
(0236) void Lcd_PrintText(unsigned char x,unsigned char y, unsigned char *str)  
(0237) {
(0238) 	unsigned char c;
(0239) 	Lcd_Locate(x,y);
(0240) 	while (c=*str) 
(0241) 	{
(0242) 		Lcd_SendCom1(c-0x20,COMM_WRITE_PUP);          // 转换ASCII码为屏幕内码, 写字符,增加内部RAM指针
    0105 4F5F      SBCI	R21,0xFF
    0106 3040      CPI	R20,0
    0107 E0EF      LDI	R30,0xF
    0108 075E      CPC	R21,R30
(0243) 		str++;
(0244) 	}
(0245) }
    0109 F3B8      BCS	0x0101
    010A 9621      ADIW	R28,1
    010B 940E03EE  CALL	pop_gset1
    010D 9508      RET
(0246) 
_Lcd_PrintText:
  c                    --> Y+1
  str                  --> R20
  y                    --> R10
  x                    --> R22
    010E 940E03E7  CALL	push_gset3
    0110 2EA2      MOV	R10,R18
    0111 2F60      MOV	R22,R16
    0112 814E      LDD	R20,Y+6
    0113 815F      LDD	R21,Y+7
    0114 2D2A      MOV	R18,R10
    0115 2F06      MOV	R16,R22
    0116 DF97      RCALL	_Lcd_Locate
    0117 C006      RJMP	0x011E
    0118 EC20      LDI	R18,0xC0
    0119 2F06      MOV	R16,R22
    011A 5200      SUBI	R16,0x20
    011B DF7A      RCALL	_Lcd_SendCom1
(0247) 
(0248) //画、清点函数
(0249) //column为水平点数,row为垂直点数
(0250) //show=1画点,show=0清点
(0251) void Lcd_Point(unsigned char x, unsigned char y, unsigned char draw)
(0252) {
(0253) 	unsigned int addr;       // memory address of byte containing pixel to write
(0254) 	if( (x >= LCD_X_MAX) || (y >= LCD_Y_MAX) ) return;
(0255) 	addr = (y * LCD_WIDTH)  + (x>>3) + LCD_GRAPH_BASE;
(0256) 	Lcd_SendCom2 ((unsigned char)(addr),(addr>>8),COMM_SET_POSITION);   // set LCD addr. pointer
(0257) 	if(draw)
    011C 5F4F      SUBI	R20,0xFF
    011D 4F5F      SBCI	R21,0xFF
    011E 01FA      MOVW	R30,R20
    011F 8020      LDD	R2,Z+0
    0120 2D62      MOV	R22,R2
(0258) 		Lcd_SendCom0(COMM_BIT_SET|(7-x&0x07));  // 0xf8为画点命令
    0121 2366      TST	R22
    0122 F7A9      BNE	0x0118
    0123 940E03DD  CALL	pop_gset3
    0125 9508      RET
_Lcd_Point:
  addr                 --> R22
  draw                 --> Y+5
  y                    --> R22
  x                    --> R20
    0126 940E03E9  CALL	push_gset2
    0128 2F62      MOV	R22,R18
    0129 2F40      MOV	R20,R16
    012A 9721      SBIW	R28,1
    012B 3F40      CPI	R20,0xF0
    012C F410      BCC	0x012F
    012D 3860      CPI	R22,0x80
    012E F008      BCS	0x0130
    012F C024      RJMP	0x0154
(0259) 	else
    0130 E18E      LDI	R24,0x1E
    0131 9F86      MUL	R24,R22
    0132 01B0      MOVW	R22,R0
    0133 2E24      MOV	R2,R20
    0134 2433      CLR	R3
    0135 9435      ASR	R3
    0136 9427      ROR	R2
    0137 9435      ASR	R3
    0138 9427      ROR	R2
(0260) 		Lcd_SendCom0(COMM_BIT_CLR|(7-x&0x07));  // 0xf0为清点命令
    0139 9435      ASR	R3
    013A 9427      ROR	R2
    013B 0D62      ADD	R22,R2
(0261) }
    013C 1D73      ADC	R23,R3
    013D 5060      SUBI	R22,0
    013E 4F7D      SBCI	R23,0xFD
    013F E284      LDI	R24,0x24
    0140 8388      STD	Y+0,R24
    0141 019B      MOVW	R18,R22
(0262) 
(0263) /***********************************************************************
    0142 2F23      MOV	R18,R19
    0143 2733      CLR	R19
    0144 2F06      MOV	R16,R22
    0145 DF5B      RCALL	_Lcd_SendCom2
    0146 800D      LDD	R0,Y+5
    0147 2000      TST	R0
    0148 F031      BEQ	0x014F
    0149 E007      LDI	R16,7
    014A 1B04      SUB	R16,R20
    014B 7007      ANDI	R16,7
    014C 6F08      ORI	R16,0xF8
    014D DF34      RCALL	_Lcd_SendCom0
    014E C005      RJMP	0x0154
    014F E007      LDI	R16,7
    0150 1B04      SUB	R16,R20
(0264) 画一条x1,y1到x2,y2的直线
(0265) (show=1画点,show=0清点)
(0266) ***********************************************************************/
(0267) void Lcd_Line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char draw) 
(0268) {
(0269)     int dx,dy,e,t;
(0270)     if (x1 == x2)			//画水平线
(0271)     {
(0272)         if (y1 > y2) e=-1;
(0273)         else e=1;
    0151 7007      ANDI	R16,7
    0152 6F00      ORI	R16,0xF0
    0153 DF2E      RCALL	_Lcd_SendCom0
(0274)         for (;y1 != y2; y1+=e)		Lcd_Point(x1,y1,draw);
(0275) 		Lcd_Point(x1,y1,draw);
    0154 9621      ADIW	R28,1
    0155 940E03DA  CALL	pop_gset2
    0157 9508      RET
_Lcd_Line:
  t                    --> R20
  dy                   --> R22
  dx                   --> R10
  e                    --> R12
  draw                 --> R14
  y2                   --> Y+13
  x2                   --> Y+11
  y1                   --> R4
  x1                   --> R6
    0158 940E03D5  CALL	push_arg4
    015A 940E03E3  CALL	push_gset5
(0276)         return;
    015C 9721      SBIW	R28,1
    015D 88EB      LDD	R14,Y+19
(0277)     }
    015E 840B      LDD	R0,Y+11
    015F 850F      LDD	R16,Y+15
    0160 1600      CP	R0,R16
    0161 F4F1      BNE	0x0180
    0162 8809      LDD	R0,Y+17
    0163 850D      LDD	R16,Y+13
    0164 1600      CP	R0,R16
    0165 F420      BCC	0x016A
    0166 EF8F      LDI	R24,0xFF
    0167 EF9F      LDI	R25,0xFF
    0168 016C      MOVW	R12,R24
    0169 C00D      RJMP	0x0177
    016A E081      LDI	R24,1
    016B E090      LDI	R25,0
    016C 016C      MOVW	R12,R24
    016D C009      RJMP	0x0177
    016E 82E8      STD	Y+0,R14
(0278) 	
    016F 852D      LDD	R18,Y+13
(0279)     if (y1 == y2)			//画竖直线

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -