tft液晶屏显示驱动程序

光电显示

1051人已加入

描述

  根据液晶显示器件的写入机理以及显示像素电极的排布方式就可以确定对其进行驱动的基本条件了。液晶显示器件的种类很多,所以驱动的方法也各有不同。

  但是无论于是哪种类型的器件,还是说使用什么不同的驱动方法,它们都是以调整施加到像素电极上面的相位、电压、峰值、频率、时序、有效值、占空比等等一系列的参数、特性来建立起一定的驱动条件,从而实现显示。

  主要的驱动存在很多,在此仅仅介绍下TFT-LCD所采用的有源矩阵驱动法。

  由于TFT-LCD的有源矩阵液晶显示器件的每一个像素点上都会有一套有源器件,所以说对这种器件的驱动是对每一个像素点上的有源器件的驱动。

  TFT液晶显示屏是有源矩阵显示屏,因此,其驱动方式与TN、STN液晶显示屏截然不同,采用的是有源矩阵动态驱动法。TFT液晶显示屏的驱动方式及电路十分复杂,作为液晶彩电维修人员,没有必要对其驱动原理进行详细了解,因此,下面仅从图像色彩显示角度,对其驱动原理进行简要介绍。

  (1)液晶显示屏图像的显示

  下面以1024×768分辨率的液晶屏为例,归纳一下液晶显示屏显示图像的过程和容易混淆的问题。

  分辨率为1024×768的液晶屏,共需要1024x3x768个点来显示一幅画面。下图所示为1024x3×768液晶屏驱动框图。

  如果把一个液晶显示屏平面分成X-Y轴,分辨率为1024×768的屏幕,在X轴(水平方向)上会有1024x3=3072列,由8个384路输出的源极驱动器(如EK7402)负责驱动;而在Y轴上,会有768行,由3个256路输出栅极驱动器(如EK7309)负责驱动。

  在液晶显示屏中,每个TFT开关管的栅极连接至水平方向的扫描线,源极连接至垂直方向的数据线,而漏极连接至液晶像素电极和存储电容。显示屏一次只启动一条栅极扫描线,以将相应一行的TFT开关管打开。此时,垂直方向的数据线送入对应的视频信号,对液晶存储电容充电至适当的电压,便可显示一行的图像。

  液晶屏

  接着关闭TFT开关管,直到下次重新写入信号前,使得电荷保存在电容上,同时启动下一条水平扫描线,送人对应的视频信号。

  依次将整个画面的视频信号写入,再从第一条重新写入信号,此重复的频率称为帧频(刷新率),一般为60~70Hz。为便于理解,下图给出了1帧栅极扫描信号的波形图。

 液晶屏

  如前所述,对于1024x768分辨率的液晶显示屏来说,有768行和1024×3=3072列。一般液晶彩电的刷新频率为60Hz,此时,每一幅画面的显示时间约为11(60s)=16.67ms。由于画面的组成为768行栅极走线,所以分配给每一条栅极走线的开关时间约为16.67ms/768=21.7μs。因此,在栅极驱动器送出的波形中,是一个接着一个宽度为21.7μs的脉冲波,依序打开每一行的TFT开关管。而源极驱动器则在这21.7μs内,经由源极走线,将显示电极充放电到所需的电压,便可显示出相对应的图像内容。

  需要再次说明的是,加在液晶TFT管源极的驱动电压,不能像CRT显像管阴极那样是一个固定极性的直流信号。因为液晶显示屏内部的液晶分子如果处于单一极性的电场作用下,则会在直流电场中发生电解反应,使液晶分子按照不同的带电极性而分别趋向于正、负两极堆积发生极化作用,从而逐渐失去旋光特性而不能起到光阀作用,致使液晶屏工作寿命终止。因此,要正确使用液晶,不能采用显像管式的激励方式,而是既要向液晶施加电压以便调制对比度,又要保证所加电压符合液晶驱动要求,即不能有平均直流成分。具体的方法是在显示屏的源极上,加上极性相反、幅度大小相等的交流电压。由于交流电的极性不断变化倒相,故不会使液晶分子产生电解极化作用,而所加电压又能控制其透光度,从而达到调整对比度的目的。

  (2)液晶显示屏彩色的显示

  TFT液晶显示屏之所以能够显示出色彩逼真的彩色,是由其内部的彩色滤色片和TFT场效应管共同协调工作完成的。下面结合下图所示电路图进行说明。图中展示了液晶屏上一组三基色像素的示意图。

  液晶屏

  从图中可以看出,在t时刻,R、G、B三基色像素从源极驱动器输出,加到源极驱动电极n-l、n、n+l上,即各TFT管的源极S上,而此时(即t时刻),栅极驱动器输出的行驱动脉冲只出现在第m行,因此,第m行的所有TFT开关管导通,于是,R、G、B驱动电压vl、V2、V3分别通过第m行导通的TFT管加到漏电极像素电极上,故R、G、B三基色像素单元透光,送到彩色滤色片上,经混色后显示一个白色像素点。

  下图给出了显示三个连续白色像素点的示意图。显示的工作过程与前述类似,即在t,时刻,第m-l行的TFT管导通,于是在第m-l行的对应列处显示一个白色像素点;在t2时刻,第m行的TFT管导通,于是在第m行的对应列处显示一个白色像素点;在t3时刻,第m+l行的TFT管导通,于是在第m+l行的对应列处显示一个白色像素点;由于t1、t2、t3之间的间隔很小,因此,人眼看不到白色像素点的闪动,而看到的是三个竖着排放的白色像素点。

 液晶屏

  以上介绍的只是显示白色的情况,若显示其他颜色,原理是相同的。例如,若要显示黄色,只需要R、G两像素单元加上电压,使R、G透光显示出滤色片的颜色;同时,不给B像素单元加电压,因此,B像素单元不能透光而呈黑暗状态。也就是说,在三基色单元中,只有R、G两单元发光,故能呈现黄色。

  可见,如果将视频信号加到源极列线上,再通过栅极行线对TFT场效应管逐行选通,即可.控制液晶屏上每一组像素单元的发光与否及发光颜色,从而达到显示彩色图像的目的。各基色像素单元的源极列线,按照三基色的色彩不同而分为R、G、B三组,分别施加各基色的视频信号,就可以控制三基色的比例,从而使液晶屏显示出不同的色彩。

  TFT显示屏的程序

  一、 * 函数名: LCD_Init(void)

  * 参 数: 无

  * 返 回: 无

  *功 能: 初始化TFT显示器

  二、

  * 函数名: LCD_SetTextColor(__IO uint16_t Color)

  * 参 数: Color : 文本颜色

  * 返 回: 无

  * 功 能: 设置文本颜色,保存在全部变量s_TextColor

  三、

  * 函数名: LCD_ClearLine(uint8_t Line)

  * 参 数: Line : 文本行号0 - 9

  *返 回: 无

  * 功 能: 清除选定的文本行

  四、

  * 函数名: LCD_Clear(uint16_t Color)

  * 参 数: Color : 背景色

  *返 回: 无

  * 功 能: 根据输入的颜色值清屏

  五、

  * 函数名: LCD_SetCursor(uint16_t Xpos, uint16_t Ypos)

  * 参 数: Xpos : X坐标; Ypos: Y坐标

  * 返 回: 无

  *功 能: 设置光标位置

  六、

  * 函数名: LCD_SetTransparent(uint8_t _mode)

  * 参 数: _mode 透明标志,1表示透明 0 表示不透明

  * 返 回: 无

  *功 能: 设置坐标的形式

  七、

  * 函数名: LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint16_t *c)

  * 参 数:

  * Xpos : X坐标;

  * Ypos: Y坐标;

  *c : 指向字符点阵的指针

  *返 回: 无

  * 功 能: 在LCD上显示一个字符(16x24)

  八、 * 函数名: LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)

  * 参 数:

  * Xpos : X坐标);

  * Ypos : Y坐标)

  *Ascii : 字符的ASCII代码,在0x20和0x7E之间

  * 返 回: 无

  * 功 能: 在LCD上显示一个字符(16x24)

  九、

  * 函数名: LCD_DisplayString(uint16_t Xpos, uint16_t Ypos, uint8_t *ptr)

  * 参 数:

  * Xpos : X坐标 0 - 399

  *Ypos : Y坐标 0 - 239

  * ptr : 字符串指针;

  * 返 回: 无

  * 功 能: 在LCD指定文本行显示一个字符串

  十、

  *函数名: LCD_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_tWidth)

  * 参 数:

  * Xpos : 显示行号

  *Ypos : 字符串指针;

  * Height: 窗口高度

  * Width : 窗口宽度

  *返 回: 无

  * 功 能: 设置显示窗口

  十一、

  * 函数名: LCD_WindowModeDisable(void)

  * 参 数: 无

  * 返 回: 无

  *功 能: 退出窗口显示模式,变为全屏显示模式

  十二、

  * 函数名: LCD_DrawLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction)

  * 参 数: Xpos :X坐标

  * YPos :Y坐标

  * Length :长度

  * Direction :方向(Horizontal,Vertical)

  *返 回: 无

  * 功 能: 在LCD上画1条线

  十三、

  *函数名: LCD_DrawPoints(POINT_T _offset, POINT_T *_points, uint16_t _Size, uint16_t _Color)

  * 参 数: _points :点坐标数组

  * _offset : 偏移坐标

  *_Size : 点个数

  * _Color :颜色

  *返 回: 无

  * 功 能: 在LCD上画一组点

  十四、

  * 函数名: LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width)

  * 参 数: Xpos :X坐标

  * YPos :Y坐标

  * Height :高度

  * Width :宽度

  *返 回:无

  * 功 能: 在LCD上画一个矩形框

  十六、

  * 函数名: LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)

  * 参 数: Xpos :X坐标

  *Radius :圆的半径

  * 返 回: 无

  *功 能: 在LCD上画一个圆

  十七、

  * 函数名: LCD_DrawMonoPict(const uint32_t *Pict)

  * 参 数: Pict : 图片点阵指针

  *返 回: 无

  * 功 能: 在LCD上画一个单色图片

  十八、

  * 函数名: LCD_WriteBMP(const uint16_t *ptr)

  * 参 数: ptr : 图片点阵指针

  *返 回: 无

  * 功 能: 在LCD上显示一个BMP位图

  十九、

  * 函数名: LCD_WriteReg(__IO uint16_t LCD_Reg, uint16_t LCD_RegValue)

  * 参 数: LCD_Reg :寄存器地址; LCD_RegValue : 寄存器值

  * 返 回: 无

  *功 能: 修改LCD控制器的寄存器的值

  二十、

  * 函数名: LCD_ReadReg(__IO uint16_t LCD_Reg)

  * 参 数: LCD_Reg :寄存器地址

  * 返 回: 寄存器的值

  *功 能: 读LCD控制器的寄存器的值

  二十一、

  * 函数名: LCD_WriteRAM_Prepare(void

  * 参 数: 无

  * 返 回: 无

  *功 能: 写显存前的准备,即设置显存寄存器地址

  二十一、

  * 函数名: LCD_WriteRAM(uint16_t RGB_Code)

  * 参 数: RGB_Code : 颜色代码

  *返 回: 无

  * 功 能: 写显存,显存地址自动增加

  二十二、

  * 函数名: LCD_ReadRAM(void)

  * 参 数: 无

  * 返 回: 显存数据

  * 功 能: 读显存,地址自动增加

  二十三、

  * 函数名: LCD_DisplayOn(void)

  * 参 数: 无

  *返 回: 无

  * 功 能: 打开显示

  二十四

  * 函数名: LCD_DisplayOff(void)

  * 参 数: 无

  *返 回: 无

  * 功 能: 关闭显示

  二十五、

  * 函数名: LCD_CtrlLinesConfig(void)

  *参 数: 无

  * 返 回: 无

  * 功 能: 配置LCD控制口线,FSMC管脚设置为复用功能

  二十六

  * 函数名: LCD_FSMCConfig(void)

  * 参 数: 无

  * 返 回: 无

  *功 能: 配置FSMC并口访问时序

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分