您的位置 首页 ADAS

STM32之TFT-LCD液晶

TFT-LCD即薄膜晶体管液晶显示器。其英文全称为:ThinFilmTransistor-LiquidCrystalDisplay。TFT-LCD与无源TN-LCD、STN-LCD的简单矩…

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个adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=beac235ac5bc9a59&k=%BC%C4%B4%E6%C6%F7&k0=%BC%C4%B4%E6%C6%F7&kdi0=0&luki=5&mcpm=0&n=10&p=baidu&q=98059059_cpr&rb=0&rs=1&seller_id=1&sid=599abcc55a23acbe&ssp2=1&stid=0&t=tpclicked3_hc&td=1831118&tu=u1831118&u=http%3A%2F%2Fwww%2E51hei%2Ecom%2Fbbs%2Fdpj%2D33647%2D1%2Ehtml&urlid=0″ id=”0_nwl” mpid=”0″ rel=”nofollow” target=”_blank”>寄存器设置快速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;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/272475.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部