目录
一.LCD介绍
显示器属于计算机的 I/O 设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有 CRT 显示器、液晶显示器、LED 点阵显示器及OLED 显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量
二.显示器的基本参数
不管是哪一种显示器,都有一定的参数用于描述它们的特性,各个参数介绍如下:
(1)像素
像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点,即前面讲解液晶原理中提到的一个显示单元。
(2)分辨率
一些嵌入式设备的显示器常常以“行像素值x列像素值”表示屏幕的分辨率。如分辨率800x480表示该显示器的每一行有800个像素点,每一列有480个像素点,也可理解为有800列,480行。
(3)色彩深度
色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位”(bit)来表示。如单色屏的每个像素点能表示亮或灭两种状态(即实际上能显示2种颜色),用1个数据位就可以表示像素点的所有状态,所以它的色彩深度为1bit,其它常见的显示屏色深为16bit(RGB565)、24bit(RGB888,即RGB每个颜色的范围都是0-255)。
(4)显示器尺寸
显示器的大小一般以英寸表示,如5英寸、21英寸、24英寸等,这个长度是指屏幕对角线的长度, 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。
(5)点距
点距指两个相邻像素点之间的距离,它会影响画质的细腻度及观看距离,相同尺寸的屏幕,若分辨率越高,则点距越小,画质越细腻。如现在有些手机的屏幕分辨率比电脑显示器的还大,这是手机屏幕点距小的原因;LED点阵显示屏的点距一般都比较大,所以适合远距离观看。
三.图像处理单元
LTDC 框图标号表示的是图像处理单元,它通过“AHB 接口”获取显存中的数据,然后按分层把
数据分别发送到两个“层 FIFO”缓存,每个 FIFO 可缓存 64x32 位的数据,接着从缓存中获取数
据交给“PFC”(像素格式转换器),它把数据从像素格式转换成字 (ARGB8888) 的格式,再经过
“混合单元”把两层数据合并起来,最终混合得到的是单层要显示的数据,通过信号线输出到液
晶面板。这部分结构与 DMA2D 的很类似,我们在下一小节详细讲解。
在输出前混合单元的数据还经过一个“抖动单元”,它的作用是当像素数据格式的色深大于液晶
面板实际色深时,对像素数据颜色进行舍入操作,如向 18 位显示器上显示 24 位数据时,抖动单
元把像素数据的低 6 位与阈值比较,若大于阈值,则向数据的第 7 位进 1,否则直接舍掉低 6 位。
四.初始化
首先要进行屏幕初始化和屏幕显示层初始化和LTCD外设初始化
LCD_Init(); //屏幕初始化
LCD_LayerInit(); //屏幕显示层初始化LTDC_Cmd(ENABLE); //LTCD外设初始化
五.切换字体大小格式
液晶显示中,文字内容占据了很大部分,显示文字需要有“字模数据”配合。关于字
模的知识我们在下一章节讲解,在这里只简单介绍一下基本概念。字模是一个个像素
点阵方块,如上述代码中的 sFont 结构体,包含了指向字模数据的指针以及每个字模
的像素宽度、高度,即字体的大小。本实验的工程中提供了像素格式为 16x24、12x12、
8x12、8x8 的英文字模。为了方便选择字模,定义了全局指针变量 LCD_Currentfonts
用来存储当前选择的字模格式,实际显示时根据该指针指向的字模格式来显示文字,
可以使用下面的 LCD_SetFont 函数切换指针指向的字模格式,该函数的可输入参数
为: Font16x24/ Font12x12/ Font8x12/ Font8x8。
LCD_SetFont(&Font16x24);
六.切换字体颜色和字体背景颜色
很多时候我们还希望文字能以不同的色彩显示,为此定义了全局变量 CurrentTextColor
和 CurrentBackColor 用于设定要显示字体的颜色和字体背景颜色,如:字体为红色和
字体背景为蓝色
使用函数 LCD_SetColors、LCD_SetTextColor 以及 LCD_SetBackColor 可以方便修改这
两个全局变量的值。若液晶的像素格式支持透明,可把字体背景设置为透明值,实现
弹幕显示的效果 (文字浮在图片之上,透过文字可看到背景图片)
LCD_SetLayer(LCD_BACKGROUND_LAYER); //把背景层刷黑色,选定控制背景层
LCD_Clear(LCD_COLOR_BLACK); //清除屏幕并用黑色填充
LCD_SetLayer(LCD_FOREGROUND_LAYER);
LCD_SetTransparency(0xFF);
LCD_Clear(LCD_COLOR_BLACK); //清除屏幕并用黑色填充
可以根据所写的内容定义按键的数让所选文字不一
LCD_SetColors(LCD_COLOR_BLACK,LCD_COLOR_WHITE);//选择时的颜色
LCD_DisplayStringLine(LINE(3),(uint8_t*)"BEEP");//选中内容
LCD_SetColors(LCD_COLOR_WHITE,LCD_COLOR_BLACK);//不选中的颜色
除此之外,还可以利用其它函数画其他东西,例如椭圆,在括号里填上该对象的大小即可。切记不要超过屏幕大小,不然不会显示在屏幕内。以下是我画的一些参考
LCD_DrawCircle(400,200,50);//圆
LCD_DrawRect(300,200,100,100);//长方形
LCD_DrawUniLine(200, 200, 300, 100); //三角形
LCD_DrawUniLine(200, 200, 300,300 );
LCD_DrawUniLine(300, 100, 300,300 );
// LCD_FillTriangle ();//三角形