TFT-LCD 液晶显示

news/2024/11/19 5:34:39/

文章目录

  • 前言
  • 一、模块介绍
    • 1. 简介
    • 2. 引脚功能
    • 3. 模块通信和指令集
  • 二、工作流程
  • 三、程序设计
    • 1. 写数据
    • 2. 读数据
    • 3. 初始化
    • 4. 开启/关闭显示
    • 5. 显示函数
    • 6. 示例
      • 显示展示:


前言

TFT-LCD 因其厚度薄且画面质量优异,可以实现信息的高速度、高亮度及高对比度显示,已广泛应用于图像显示系统中。虽然TFT-LCD 具有良好的显示性能,但TFT-LCD 的驱动信号非常复杂,同时外围的控制单元需要处理的数据量非常大,以一个分辨率为640×480的彩色TFT-LCD 为例,显示一幅彩色图像就需要处理900kbyte的数据量,这对于传统的单片机等处理器显得无能为力。由于图像数据量大,图像大都采用压缩后再存储,其中jpeg (joint photographicexperts group)格式的压缩图像应用最为广泛。


一、模块介绍

1. 简介

TFT-LCD 即薄膜晶体管液晶显示器,其英文全称为:Thin Film Transistor-Liquid CrystalDisplay。TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD 也被叫做真彩液晶显示器。

该模块有如下特点:

  1. 2.4’/2.8’/3.5’/4.3’/7’ 5 种大小的屏幕可选。
  2. 320×240 的分辨率(3.5’分辨率为:320480,4.3’和 7’分辨率为800480)。
  3. 16 位真彩显示。
  4. 自带触摸屏,可以用来作为控制输入。

我们以 2.8 寸的 ALIENTEK TFTLCD 模块为例介绍,该模块支持 65K 色显示,显示分辨率为 320×240,接口为 16 位的 80 并口,自带触摸屏。
在这里插入图片描述
模块原理图如图 18.1.1.2 所示:
在这里插入图片描述

2. 引脚功能

TFTLCD 模块采用 2*17 的 2.54 公排针与外部连接,接口定义如图所示:
在这里插入图片描述
从图可以看出:ALIENTEK TFTLCD 模块采用 16 位的并方式与外部连接。之所以不采用 8 位的方式,是因为彩屏的数据量比较大,尤其在显示图片的时候,如果用 8 位数据线,就会比 16 位方式慢一倍以上,我们当然希望速度越快越好,所以我们选择 16 位的接口。

该模块的 80 并口有如下一些信号线:

  1. CS:TFTLCD 片选信号。
  2. WR:向 TFTLCD 写入数据。
  3. RD:从 TFTLCD 读取数据。
  4. D[15:0]:16 位双向数据线。
  5. RST:硬复位 TFTLCD。
  6. RS:命令/数据标志(0,读写命令;1,读写数据)

需要说明的是,TFTLCD模块的RST信号线是直接接到STM32的复位脚上,并不由软件控制,这样可以省下来一个 IO口。另外我们还需要一个背光控制线来控制TFTLCD 的背光。所以,我们总共需要的 IO口数目为 21 个。这里还需要注意,我们标注的DB1DB8,DB10DB17,是相对于 LCD 控制 IC 标注的,实际上大家可以把他们就等同于 D0~D15,这样理解起来就比较简单一点。

3. 模块通信和指令集

ILI9341 液晶控制器自带显存,其显存总大小为 172800(24032018/8),即 18 位模式(26万色)下的显存量。在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341的 18 位数据线与 MCU 的 16 位数据线以及 LCD GRAM 的对应关系如图所示:
在这里插入图片描述
从图中可以看出,ILI9341 在 16 位模式下面,数据线有用的是:D17~D13 和 D11~D1,D0和 D12 没有用到,实际上在我们 LCD 模块里面,ILI9341 的 D0 和 D12 压根就没有引出来,这样,ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。

这样 MCU 的 16 位数据,最低 5 位代表蓝色,中间 6 位为绿色,最高 5 位为红色。数值越大,表示该颜色越深。另外,特别注意 ILI9341 所有的指令都是 8 位的(高 8 位无效,且参数除了读写 GRAM 的时候是 16 位,其他操作参数,都是 8 位的,这个和 ILI9320 等驱动器不一样,必须加以注意。

接下来,我们介绍一下 ILI9341 的几个重要命令:0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 条指令。

  1. 0XD3:这个是读 ID4 指令,用于读取 LCD 控制器的 ID,该指令如图所示:
    在这里插入图片描述
    从上表可以看出,0XD3 指令后面跟了 4 个参数,最后 2 个参数,读出来是 0X93 和 0X41,刚好是我们控制器 ILI9341 的数字部分,从而,通过该指令,即可判别所用的 LCD 驱动器是什么型号。这样,我们的代码,就可以根据控制器的型号去执行对应驱动 IC 的初始化代码,从而兼容不同驱动 IC 的屏,使得一个代码支持多款 LCD。

  2. 0X36:这是存储访问控制指令,可以控制 ILI9341 存储器的读写方向,简单的说,就是在连续写 GRAM 的时候,可以控制 GRAM 指针的增长方向,从而控制显示方式(读 GRAM 也是一样)。该指令如图所示:
    在这里插入图片描述
    从上表可以看出,0X36 指令后面,紧跟一个参数,这里我们主要关注:MY、MX、MV这三个位,通过这三个位的设置,我们可以控制整个 ILI9341 的全部扫描方向,如图所示:
    在这里插入图片描述
    这样,我们在利用 ILI9341 显示内容的时候,就有很大灵活性了,比如显示 BMP 图片,BMP 解码数据,就是从图片的左下角开始,慢慢显示到右上角。如果设置 LCD 扫描方向为从左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往 LCD 填充颜色数据即可,这样可以大大提高显示速度。

  3. 0X2A:这是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置横坐标(x 坐标),该指令如图所示:
    在这里插入图片描述
    在默认扫描方式时,该指令用于设置 x 坐标,该指令带有 4 个参数,实际上是 2 个坐标值:SC 和 EC,即列地址的起始值和结束值,SC必须小于等于 EC,且 0≤SC/EC≤239。一般在设置 x 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SC 即可,因为如果 EC 没有变化,我们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。

  4. 0X2B:与 0X2A 指令类似,是页地址设置指令。在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标(y 坐标)。该指令如图所示:
    在这里插入图片描述
    在默认扫描方式时,该指令用于设置 y 坐标,该指令带有 4 个参数,实际上是 2 个坐标值:SP 和 EP,即页地址的起始值和结束值,SP 必须小于等于 EP,且 0≤SP/EP≤319。一般在设置y 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SP 即可,因为如果 EP 没有变化,我们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。

  5. 0X2C:该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD的 GRAM 里面写入颜色数据了,该指令支持连续写,指令描述如图所示:
    在这里插入图片描述
    从上表可知,在收到指令0X2C之后,数据有效位宽变为16位,我们可以连续写入 LCD-GRAM 值,而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。例如:假设设置的是从左到右,从上到下的扫描方式,那么设置好起始坐标(通过 SC,SP 设置)后,每写入一个颜色值,GRAM 地址将会自动自增 1(SC++),如果碰到 EC,则回到 SC,同时 SP++,一直到坐标:EC,EP 结束,其间无需再次设置的坐标,从而大大提高写入速度。

  6. 0X2E:该指令是读 GRAM 指令,用于读取 ILI9341 的显存(GRAM),该指令在 ILI9341 的数据手册上面的描述是有误的,真实的输出情况如图所示:
    在这里插入图片描述
    该指令用于读取 GRAM,如图所示,ILI9341 在收到该指令后,第一次输出的是dummy数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标:SC,SP 开始),输出规律为:每个颜色分量占 8 个位,一次输出 2 个颜色分量。比如:第一次输出是 R1G1,随后的规律为:B1R2→G2B2→R3G3→B3R4→G4B4→R5G5… 以此类推。如果我们只需要读取一个点的颜色值,那么只需要接收到参数 3 即可,如果要连续读取(利用 GRAM地址自增,方法同上),那么就按照上述规律去接收颜色数据。

二、工作流程

一般 TFTLCD 模块的使用流程如图:
在这里插入图片描述
任何 LCD,使用流程都可以简单的用以上流程图表示。其中硬复位和初始化序列,只需要执行一次即可。而画点流程就是:设置坐标→写 GRAM 指令→写入颜色数据,然后在 LCD 上面,我们就可以看到对应的点显示我们写入的颜色了。

读点流程为:设置坐标→读 GRAM 指令→读取颜色数据,这样就可以获取到对应点的颜色数据了。

以上只是最简单的操作,也是最常用的操作,有了这些操作,一般就可以正常使用 TFTLCD了。接下来我们将该模块(2.8 寸屏模块)用来来显示字符和数字,通过以上介绍,我们可以得出 TFTLCD 显示需要的相关设置步骤如下:

  1. 设置 STM32F1 与 与 TFTLCD 模块相连接的 IO 。

这一步,先将我们与 TFTLCD 模块相连的 IO 口进行初始化,以便驱动 LCD。我们可以使用FSMC。

  1. 初始化 TFTLCD 模块。

即初始化序列,这里我们没有硬复位 LCD,因为精英 STM32F103 的 LCD 接口,将 TFTLCD 的 RST 同 STM32F1 的 RESET 连接在一起了,只要按下开发板的 RESET 键,就会对 LCD 进行硬复位。初始化序列,就是向 LCD 控制器写入一系列的设置值(比如伽马校准),这些初始化序列一般 LCD 供应商会提供给客户,我们直接使用这些序列即可,不需要深入研究。在初始化之后,LCD 才可以正常使用。

  1. 通过函数将字符和数字显示到 TFTLCD 模块上。

这一步则通过图左侧的流程,即:设置坐标→写 GRAM 指令→写 GRAM 来实现,但是这个步骤,只是一个点的处理,我们要显示字符/数字,就必须要多次使用这个步骤,从而达到显示字符/数字的目的,所以需要设计一个函数来实现数字/字符的显示,之后调用该函数,就可以实现数字/字符的显示了。

三、程序设计

1. 写数据

//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(u16 regval)
{   LCD->LCD_REG=regval;//写入要写的寄存器序号	 
}//写LCD数据
//data:要写入的值
void LCD_WR_DATA(u16 data)
{	 LCD->LCD_RAM=data;		 
}//写寄存器
//LCD_Reg:寄存器地址
//LCD_RegValue:要写入的数据
void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
{	LCD->LCD_REG = LCD_Reg;		//写入要写的寄存器序号	 LCD->LCD_RAM = LCD_RegValue;//写入数据	    		 
}//开始写GRAM
void LCD_WriteRAM_Prepare(void)
{LCD->LCD_REG=lcddev.wramcmd;	  
}	 
//LCD写GRAM
//RGB_Code:颜色值
void LCD_WriteRAM(u16 RGB_Code)
{							    LCD->LCD_RAM = RGB_Code;//写十六位GRAM
}	   

2. 读数据

//读LCD数据
//返回值:读到的值
u16 LCD_RD_DATA(void)
{vu16 ram;			//防止被优化ram=LCD->LCD_RAM;	return ram;	 
}	//读寄存器
//LCD_Reg:寄存器地址
//返回值:读到的数据
u16 LCD_ReadReg(u16 LCD_Reg)
{										   LCD_WR_REG(LCD_Reg);		//写入要读的寄存器序号delay_us(5);		  return LCD_RD_DATA();		//返回读到的值
}   //从ILI93xx读出的数据为GBR格式,而我们写入的时候为RGB格式。
//通过该函数转换
//c:GBR格式的颜色值
//返回值:RGB格式的颜色值
u16 LCD_BGR2RGB(u16 c)
{u16  r,g,b,rgb;   b=(c>>0)&0x1f;g=(c>>5)&0x3f;r=(c>>11)&0x1f;	 rgb=(b<<11)+(g<<5)+(r<<0);		 return(rgb);
} 	u16 LCD_ReadPoint(u16 x,u16 y)
{u16 r=0,g=0,b=0;if(x>=lcddev.width||y>=lcddev.height)return 0;	//超过了范围,直接返回		   LCD_SetCursor(x,y);	    if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X2E);//9341/6804/3510/1963 发送读GRAM指令else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00);	//5510 发送读GRAM指令else LCD_WR_REG(0X22);      		 			//其他IC发送读GRAM指令if(lcddev.id==0X9320)opt_delay(2);				//FOR 9320,延时2us	    r=LCD_RD_DATA();								//dummy Read	   if(lcddev.id==0X1963)return r;					//1963直接读就可以 opt_delay(2);	  r=LCD_RD_DATA();  		  						//实际坐标颜色if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)		//9341/NT35310/NT35510要分2次读出{opt_delay(2);	  b=LCD_RD_DATA(); g=r&0XFF;		//对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位g<<=8;} if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0XB505||lcddev.id==0XC505)return r;	//这几种IC直接返回颜色值else if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//ILI9341/NT35310/NT35510需要公式转换一下else return LCD_BGR2RGB(r);						//其他IC
}			 		

3. 初始化

//初始化lcd
//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
//在其他型号的驱动芯片上没有测试! 
void LCD_Init(void)
{ 					GPIO_InitTypeDef GPIO_InitStructure;FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; FSMC_NORSRAMTimingInitTypeDef  writeTiming;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);	//使能FSMC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG,ENABLE);//使能PORTB,D,E,G以及AFIO复用功能时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 //PB0 推挽输出 背光GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//PORTD复用推挽输出  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;				 //	//PORTD复用推挽输出  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 		 //复用推挽输出   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD, &GPIO_InitStructure); //PORTE复用推挽输出  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;				 //	//PORTD复用推挽输出  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 		 //复用推挽输出   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOE, &GPIO_InitStructure);    	    	 											 //	//PORTG12复用推挽输出 A0	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12;	 //	//PORTD复用推挽输出  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 		 //复用推挽输出   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOG, &GPIO_InitStructure); readWriteTiming.FSMC_AddressSetupTime = 0x01;	 //地址建立时间(ADDSET)为2个HCLK 1/36M=27nsreadWriteTiming.FSMC_AddressHoldTime = 0x00;	 //地址保持时间(ADDHLD)模式A未用到	readWriteTiming.FSMC_DataSetupTime = 0x0f;		 // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;readWriteTiming.FSMC_CLKDivision = 0x00;readWriteTiming.FSMC_DataLatency = 0x00;readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;	 //模式A ..............}

4. 开启/关闭显示

//LCD开启显示
void LCD_DisplayOn(void)
{					   if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X29);	//开启显示else if(lcddev.id==0X5510)LCD_WR_REG(0X2900);	//开启显示else LCD_WriteReg(0X07,0x0173); 				 	//开启显示
}	 //LCD关闭显示
void LCD_DisplayOff(void)
{	   if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X28);	//关闭显示else if(lcddev.id==0X5510)LCD_WR_REG(0X2800);	//关闭显示else LCD_WriteReg(0X07,0x0);//关闭显示 
}   

5. 显示函数

//显示数字,高位为0,还是显示
//x,y:起点坐标
//num:数值(0~999999999);	 
//len:长度(即要显示的位数)
//size:字体大小
//mode:
//[7]:0,不填充;1,填充0.
//[6:1]:保留
//[0]:0,非叠加显示;1,叠加显示.
void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode)
{  u8 t,temp;u8 enshow=0;						   for(t=0;t<len;t++){temp=(num/LCD_Pow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){if(mode&0X80)LCD_ShowChar(x+(size/2)*t,y,'0',size,mode&0X01);  else LCD_ShowChar(x+(size/2)*t,y,' ',size,mode&0X01);  continue;}else enshow=1; }LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode&0X01); }
} //显示字符串
//x,y:起点坐标
//width,height:区域大小  
//size:字体大小
//*p:字符串起始地址		  
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)
{         u8 x0=x;width+=x;height+=y;while((*p<='~')&&(*p>=' '))//判断是不是非法字符!{       if(x>=width){x=x0;y+=size;}if(y>=height)break;//退出LCD_ShowChar(x,y,*p,size,0);x+=size/2;p++;}  
}//在指定位置显示一个字符
//x,y:起始坐标
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16/24
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{  							  u8 temp,t1,t;u16 y0=y;u8 csize=(size/8+((size%8)?1:0))*(size/2);		//得到字体一个字符对应点阵集所占的字节数	num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)for(t=0;t<csize;t++){   if(size==12)temp=asc2_1206[num][t]; 	 	//调用1206字体else if(size==16)temp=asc2_1608[num][t];	//调用1608字体else if(size==24)temp=asc2_2412[num][t];	//调用2412字体else return;								//没有的字库for(t1=0;t1<8;t1++){			    if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);temp<<=1;y++;if(y>=lcddev.height)return;		//超区域了if((y-y0)==size){y=y0;x++;if(x>=lcddev.width)return;	//超区域了break;}}  	 }  	    	   	 	  
}   //画矩形	  
//(x1,y1),(x2,y2):矩形的对角坐标
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
{LCD_DrawLine(x1,y1,x2,y1);LCD_DrawLine(x1,y1,x1,y2);LCD_DrawLine(x1,y2,x2,y2);LCD_DrawLine(x2,y1,x2,y2);
}
//在指定位置画一个指定大小的圆
//(x,y):中心点
//r    :半径
void LCD_Draw_Circle(u16 x0,u16 y0,u8 r)
{int a,b;int di;a=0;b=r;	  di=3-(r<<1);             //判断下个点位置的标志while(a<=b){LCD_DrawPoint(x0+a,y0-b);             //5LCD_DrawPoint(x0+b,y0-a);             //0           LCD_DrawPoint(x0+b,y0+a);             //4               LCD_DrawPoint(x0+a,y0+b);             //6 LCD_DrawPoint(x0-a,y0+b);             //1       LCD_DrawPoint(x0-b,y0+a);             LCD_DrawPoint(x0-a,y0-b);             //2             LCD_DrawPoint(x0-b,y0-a);             //7     	         a++;//使用Bresenham算法画圆     if(di<0)di +=4*a+6;	  else{di+=10+4*(a-b);   b--;} 						    }
} 	
.........
.........	
.........						

6. 示例

int main(void){	 u8 x=0;u8 lcd_id[12];			//存放LCD ID字符串delay_init();	    	 //延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);	 	//串口初始化为115200LCD_Init();POINT_COLOR=RED;				 	while(1) {		 POINT_COLOR=RED;	  LCD_ShowString(30,200,400,400,24," Bit_DongGe");  //显示" Bit_DongGe"LCD_ShowString(40,130,200,12,24,"2022/5/23");  //显示"2022/5/23"	   LCD_ShowxNum(80,160,666,3,24,0);   //显示“666”  LCD_Draw_Circle(100,180,100);   //显示圆心为(100,180),半径为100的圆圈x++;if(x==12)x=0;LED0=!LED0;				   		 delay_ms(1000);	} 
}

显示展示:

在这里插入图片描述


http://www.ppmy.cn/news/161800.html

相关文章

51单片机——LCD1602液晶显示屏

如下图&#xff1a;红框就是LCD1602液晶显示屏&#xff0c;他是可插拔的&#xff0c;插上去后数码管就会乱码无效了&#xff0c;因为他两共用了MCU的8个P0口 LCD1602原理图 从上面两幅图可以看出来 LCD1602的LCD_D0~LCD_D7分别对应MCU的P00-P07LCD1602的LCD_RS对应MCU的P2…

液晶显示屏行业信息汇总

1、概述 液晶显示屏英文全名为Liquid Crystal Display&#xff0c;简称LCD。它是一种借助于薄膜晶体管驱动的矩阵显示屏&#xff0c;以电流刺激液晶分子从而产生点、线、面配合LED背光源构成显示画面。 液晶显示产业链情况&#xff1a; 液晶显示屏重要组成部分&#xff1a; 按…

三星电视三星服务器没响应,三星液晶电视的常见故障有哪些

三星液晶电视常见的故障有以下这些&#xff1a; 一.偏色 1.检查主板信号R\G\B由输入到主芯片部分线路(有无虚焊短路 &#xff0c;电容电阻有无错值)。 2.进入工厂模式&#xff0c;进行白平衡调节&#xff0c;能否调出正常颜色。 3.必要时替换MCU或对MCU进行重新烧录。 二.花屏 …

三星液晶拼接屏厂家有哪些 液晶拼接屏特点介绍

液晶拼接屏作用非常大&#xff0c;既能单独作为 显示器 又可以拼接成超大屏幕使用&#xff0c;根据不同需求&#xff0c;做出相应的改变&#xff0c;屏幕可大可小&#xff0c;非常方便&#xff0c;满足用户多样化需求&#xff0c;并且液晶拼接亮度高、采用超窄边设计&#xff0…

国内有哪些液晶屏生产厂家?

国内液晶屏生产厂家的大咖级分别有以下&#xff1a; 1、京东方&#xff0c; LCD液晶屏全球市场排名前五位。技术已领先全球。其核心事业包括显示器件、智慧系统和健康服务。显示器件产品广泛应用于手机、平板电脑、笔记本电脑、显示器、电视、车载、可穿戴设备等领域&#xff1…

液晶显示屏LCD1602

液晶显示屏问题 ** 步骤 ** 液晶屏显示内部处理问题 读状态&#xff08;检测是否属于忙碌状态&#xff09; 写命令&#xff08;输入给函数想要显示的位置信息&#xff09; 写数据&#xff08;输入给函数想要显示的信息内容&#xff09; 初始化&#xff08;使用液晶屏之前应先…

三星S24A350型显示器黑屏解决方法

三星S24A350型显示器黑屏解决方法 今天一早来实验室&#xff0c;还是和往常一样打开电脑&#xff0c;但是有一点不一样的是电脑显示器么有任何反应。我关了显示器然后再打开&#xff0c;屏幕上就显示“HDMI“&#xff0c;然后就没有其他信息了。我把后面视频输入的线拔掉以后&a…

夏普屏、三星屏、台湾屏、IPS硬屏 各类液晶屏详解

夏普屏、三星屏、台湾屏、IPS硬屏 各类液晶屏详解 液晶电视的屏幕称之为液晶面板&#xff0c;现在市面上的液晶屏分为三大阵营&#xff1a; 一、夏普屏&#xff1b; 二、日韩厂商的液晶屏&#xff0c;如三星索尼&#xff08;S-LCD&#xff09;液晶屏和LGD液晶屏(原为LPL&…