历史上的今天
返回首页

历史上的今天

今天是:2025年03月02日(星期日)

2021年03月02日 | STM32之TFT-LCD液晶学习

2021-03-02 来源:eefocus

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


TFT液晶原理:


*背光模组:提供光源

*上下偏光片,TFT Glass Substrate,液晶:形成偏振光,控制光线的通过与否

*彩色滤光片:提供TFT LCD R/G/B(三原色)的来源

*ITO透明导电层:提供透明的导电通路

*Photo Spacer:提供一个固定高度给彩色滤光片和TFT Glass Substrate,作为灌入液晶的空间,以及做为上下两层Glass的支撑


液晶特性:


TFT-LCD使用的液晶为TN(Twist Nematic)型液晶,分子成椭圆状。TN型液晶一般是顺着长轴方向串接,长轴间彼此平行方式排列;当接触到槽状表面时,液晶分子就会顺着槽的方向排列与槽中


当液晶被包含在两个槽状表面中间,且槽的方向相互垂直,则液晶分子的排列为:

a)上表面分子:沿着a方向;

b)下表面分子:沿着b方向;

c)介于上下表面中间的分子:产生旋转的效应。

因此液晶分子在两槽状表面间产生90°的旋转

当线性偏极光射入上层槽状表面时,此光线随着液晶分子的旋转也产生旋转。

当线性偏极光射出下层槽状表面时,此光线已经产生了90度的旋转


当在上下表面之间加电压时,液晶分子会顺着电场方向排列,此时入射光线不再会旋转,因而光线直线射出下表面

偏光片特性:

将非偏极光(一般光线)过滤成偏振光。

当非偏极光通过a方向的偏光片时,光线被过滤成与a方向平行的线性偏极光

上图:偏振方向相同,线性偏极光继续前进,通过第二片偏光片时,光线通过。

下图:偏振方向不同,通过第二片时,光线被完全阻挡

偏振光透过液晶分子,偏振方向发生旋转,光线可通过偏光片


当液晶分子呈如图方向排列时,光线偏振方向将不再发生旋转,最终无法通过偏光片

TFT上下各有一片偏振方向垂直的偏光片,背光板发出的光经背光模组散射后,先通过下层偏光片形成偏振光

之后通过液晶分子,并由液晶分子的旋转角度决定通过液晶分子后的偏振方向

在经过彩色滤光片产生红、绿、蓝三色光,最后通过上偏光片,并由偏振光偏振方向与偏光片偏振方向夹角决定最终输出的光强,以形成不同的色彩。



发光强弱由MOS管控制液晶偏转角度,从而控制光线出口强弱达到控制色彩目的.

假设240*320分辨率液晶则由于 基本色彩是3原色 所以总共有240*320*3个 MOS管

“像素”(Pixel) 是由 Picture(图像) 和 Element(元素)这两个单词的字母所组成的,是用来计算数码影像的一种单位,如同摄影的相片一样,数码影像也具有连续性的浓淡阶调,我们若把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小方点所组成,这些小方点就是构成影像的最小单位“像素”(Pixel)。这种最小的图形的单元能在屏幕上显示通常是单个的染色点。越高位的像素,其拥有的色板也就越丰富,越能表达颜色的真实感。


每个点显示的颜色如何由确定?

由于TFT 液晶我使用的是2.8寸的240*320分辨率(像素),16位真彩显示(接近自然色)

该模块采用的是显尚光电的DST2001PH TFTLCD,DST2001PH的控制器为ILI9320(可能为其他),采用16位的80并口。

驱动芯片显存GRAM与色彩关系:

由于是16为数据,所以最低5位代表蓝色,中间6位为绿色,最高5位为红色。数值越大,表示该颜色越深。

就是向显存里面写入不同数据,产生不同的颜色.

常见颜色确定:

利用画图工具里面3原色可能确定需要的显存数据。


本人使用ALIENTEK MiniSTM32开发板自配2.8寸液晶

液晶驱动芯片硬件接口:


采用16位数据线(低了速度太慢,用彩色就没什么效果了)。该模块的80并口有如下一些信号线:

CS:TFTLCD片选信号。

WR:向TFTLCD写入数据。

RD:从TFTLCD读取数据。

D[15:0]:16位双向数据线。

RST:硬复位TFTLCD。

RS:命令/数据标志(0,读写命令;1,读写数据)。


ILI9320常用寄存器指令:

R0,这个命令,有两个功能,如果对它写,则最低位为OSC,用于开启或关闭振荡器。而如果对它读操作,则返回的是控制器的型号。这个命令最大的功能就是通过读它可以得到控制器的型号,而我们代码在知道了控制器的型号之后,可以针对不同型号的控制器,进行不同的初始化。因为93xx系列的初始化,其实都比较类似,我们完全可以用一个代码兼容好几个控制器。

R3,入口模式命令。我们重点关注的是I/D0、I/D1、AM这3个位,因为这3个位控制了屏幕的显示方向。

//------------------------------------------------------------------------------------------------------------------------------------------

AM:控制GRAM更新方向。当AM=0的时候,地址以行方向更新。当AM=1的时候,地址以列方向更新。

I/D[1:0]:当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1,

/--------------------------------------------------------------------------------------------------------------------------------------------



R7:显示控制命令。该命令CL位用来控制是8位彩色,还是26万色。为0时26万色,为1时八位色。D1、D0、BASEE这三个位用来控制显示开关与否的。当全部设置为1的时候开启显示,全0是关闭。我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。


R32,R33:设置GRAM的行地址和列地址。R32用于设置列地址(X坐标,0~239),R33用于设置行地址(Y坐标,0~319)。当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了.


R34:写数据到GRAM命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数.


R80~R83:行列GRAM地址位置设置。这几个命令用于设定你显示区域的大小,我们整个屏的大小为240*320,但是有时候我们只需要在其中的一部分区域写入数据,如果用先写坐标,后写数据这样的方式来实现,则速度大打折扣。此时我们就可以通过这几个命令,在其中开辟一个区域,然后不停的丢数据,地址计数器就会根据R3的设置自动增加/减少,这样就不需要频繁的写地址了,大大提高了刷新的速度。

//--------------------------------------------------------------------------------------------------------

我们接下来看看要如何才能驱动ALIENTEK TFTLCD模块,TFTLCD显示需要的相关设置步骤如下:

1)设置STM32与TFTLCD模块相连接的IO。

这一步,先将我们与TFTLCD模块相连的IO口设置为输出,具体使用哪些IO口,这里需要根据连接电路以及TFTLCD模块的设置来确定。

2)初始化TFTLCD模块。

其实这里就是上和上面OLED模块的初始化过程差不多。通过向TFTLCD写入一系列的设置,来启动TFTLCD的显示。为后续显示字符和数字做准备。

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


MiniSTM32开发板的IO口对应关系如下:

LCD_LED对应PC10;

LCD_CS对应PC9;

LCD _RS对应PC8;

LCD _WR对应PC7;

LCD _RD对应PC6;

LCD _D[17:1]对应PB[15:0];


基本GUI接口函数简介(一)


80并口时序图:

(一) :

//------写数据函数---------这里我们采用了宏定义的方式,以提高速度(由于显示图像写入读出频繁):

#define LCD_WR_DATA(data){


LCD_RS_SET; //选择数据

LCD_CS_CLR; //选择片

DATAOUT(data); //把数据放入端口

LCD_WR_CLR; //WR写数据来个上升沿(将数据写入)

LCD_WR_SET;

LCD_CS_SET; //CS上升沿 写入数据完成

}

上面函数中的‘’是C语言中的一个转义字符,用来连接上下文,因为宏定义只能是一个串,而当你的串过长(超过一行的时候),就需要换行了,此时就必须通过反斜杠来连接上下文。这里的‘’正是起这个作用

(二):

因为该函数使用频率不是很高,不使用宏定义

//----向寄存器发送指令函数------

void LCD_WR_REG(u8 data)

{

LCD_RS_CLR; //选择指令

LCD_CS_CLR; //选中芯片

DATAOUT(data); //端口放上指令

LCD_WR_CLR; //WR写数据来个上升沿(将数据写入)

LCD_WR_SET;

LCD_CS_SET; //CS上啦完成操作

}

(三) :

由下面2个寄存器设置快速IO


//-------读取寄存器值函数---------

u16 LCD_ReadReg(u8 LCD_Reg)

{

u16 t;

LCD_WR_REG(LCD_Reg); //写入要读的寄存器号

GPIOB->CRL=0x88888888; //将端口PORTB设置成输入模式

GPIOB->CRH=0x88888888;

GPIOB->ODR=0xffff; //端口上拉预备输入

#ifdef LCD_FAST_IO //判断快速IO口是否宏定义过

LCD_RS_SET; //运用快速IO口 (例:#define LCD_CS_SETGPIOC->BSRR=1<<9 //片选口PC9)

LCD_CS_CLR;

LCD_RD_CLR;

LCD_RD_SET; //RD脚产生上升沿

t=DATAIN;

LCD_CS_SET;

#endif

GPIOB->CRL=0x33333333; //恢复输出状态

GPIOB->CRH=0x33333333;

GPIOB->ODR=0xffff;

return t;

}


推荐阅读

史海拾趣

GE Solid State公司的发展小趣事
由于声音信号的模糊性和主观性,可能无法精确反映曝光量的细微变化。
AiT Semiconductor Inc公司的发展小趣事

AiT公司的创立源自一群对半导体技术充满热情的工程师。他们看到了半导体行业巨大的市场潜力和技术挑战,决心成立一家公司,专注于半导体产品的研发和生产。在创立初期,公司面临资金短缺、市场竞争激烈等诸多困难,但凭借着对技术的执着追求和不懈努力,他们成功开发出了一系列高性能、高品质的半导体产品,逐渐在市场中站稳脚跟。

Coiltronics公司的发展小趣事

在电子行业中,产品质量是企业生存的关键。Coiltronics公司深知这一点,因此在生产过程中始终坚持严格的质量管理。公司引进先进的生产设备和技术,建立完善的质量检测体系,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得Coiltronics的产品在市场上赢得了良好的口碑,吸引了大量忠实客户。

BELDEN公司的发展小趣事

在20世纪初,BELDEN公司在技术创新方面取得了显著突破。公司不仅将塑料绝缘材料应用于电线和电缆制造,还着眼于精密和高质量产品的需求,致力于高附加值的绝缘材料、电缆、防护和护套材料的生产。这些技术创新使得BELDEN的产品在性能和质量上都有了显著提升,进一步巩固了公司在市场中的地位。同时,公司还不断扩大产品线,增加了橡胶绝缘材料等多种新产品,满足了不同客户的需求。

Dawn Electronics Inc公司的发展小趣事

Dawn Electronics Inc公司成立于上世纪末,当时电子市场竞争激烈,新公司难以立足。公司创始人凭借对技术的热爱和对市场的敏锐洞察,决定专注于研发高性能的定制电子元件。初创期,公司面临着资金紧张、人才短缺的困境,但创始人带领团队日夜兼程,攻克技术难题,终于在市场上推出了具有竞争力的产品,赢得了客户的认可。

E-San Electronic Co Ltd公司的发展小趣事

E-San Electronic Co Ltd的创始人李明,在电子科技行业摸爬滚打多年后,决定创立自己的公司。创业初期,公司面临着资金短缺、技术瓶颈和市场竞争激烈的挑战。李明凭借对电子技术的深刻理解和敏锐的市场洞察力,带领团队成功研发出了一款具有创新性的电子产品,并成功打入市场。这款产品以其高性价比和稳定的性能赢得了消费者的青睐,为公司带来了第一笔可观的收入,也为后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

塑封料发展状况及其工艺选择

[ip]塑封料发展状况及其工艺选择 上海常祥实业有限公司   刘志:13611616628 引言 塑封料,又称环氧塑封料(EMC,Epoxy Molding Compound)以其高可靠性、低成本、生产工艺简单、适合大规模生产等特点,占据了整个微电子封装材料97%以上的市场。 ...…

查看全部问答>

日本常用三极管

这是在我的硬盘里的资料,拿出来共享一下。希望能对大家有参考价值。…

查看全部问答>

智能手机的操作系统,哪个比较人性化?

最好把塞班 WM linux 黑莓OS...乱七八糟的挨个试用一遍,哈哈 你们觉得呢?…

查看全部问答>

99SE中写PCB中文字体

1、解压后将此文件放入C盘   2、在放入C盘后,在FONT.EXE文件中编辑你所要放的汉字   3、编辑好汉字后,在PROTEL99SE的PCB状态下,找到你放入PROTELHZ文件夹的路径,导入PCBHZ.LIB文件      采用以上步 ...…

查看全部问答>

一种简易高精度频率信号发生器的设计与实现

一种简易高精度频率信号发生器的设计与实现…

查看全部问答>

WinCE6.0修改.cpl文件属性

包括去掉文件保护,只读,隐藏等。(用代码的哦)…

查看全部问答>

飞行体验项目——看看这样的项目谁能作

项目:飞行体验项目 说明:         飞行体验装置由现时屏幕和控制器两部分组成,控制器为飞鸟外形,小朋友们可以俯卧在控制器上操作飞行器,电脑模拟的飞行场景以及小朋友的操作结果会在显示屏幕上显示  &n ...…

查看全部问答>

IAR5.XX关于实时查看变量变化的功能

在STVD(调试STM8)里watch变量有"ON THE FLY"可以实时查看变量的变化。 在IAR5.XX调试STM32F103XXX不知道有没有这样的功能??? 或者类似的功能也行啊??? 请IAR EARM 高手指点!!!…

查看全部问答>

关于NE555的问题。当输入高电平,输出低电平不够低怎么办?量出来2.7。

做单稳电路。高电平3.7,低电平2.7。 [ 本帖最后由 huang91 于 2011-11-10 15:49 编辑 ]…

查看全部问答>