一、LCD屏
液晶显示器,简称 LCD(Liquid Crystal Display),相对于上一代 CRT 显示器(阴极射线管显示器), LCD 显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。
液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态,但是它的分子排列却和固体晶体一样非常规则,因此取名液晶。 如果给液晶施加电场,会改变它的分子排列, 从而改变光线的传播方向, 配合偏振光片,它就具有控制光线透过率的作用,再配合彩色滤光片,改变加给液晶电压大小,就能改变某一颜色透光量的多少。 利用这种原理,做出可控红、绿、蓝光输出强度的显示结构,把三种显示结构组成一个显示单位,通过控制红绿蓝的强度,可以使该单位混合输出不同的色彩,这样的一个显示单位被称为像素。常说的1个像素点,就代表着一个RGB三色排列。
LCD屏六层结构:
1.前偏光片(Front Polarizer):位于显示屏前端,用于调整光线的偏振方向。
2.彩色滤光片(Color Filter):在前偏光片后面,将光分成红、绿、蓝三色。
3.液晶层(Liquid Crystal Layer):控制光的透过率,通过电场调节液晶分子的排列。
4.薄膜晶体管(TFT)层:用于控制每个像素的电流开关状态。
5.背光源(Backlight):提供光源,通常是LED或CCFL。
6.背偏光片(Back Polarizer):位于背光源前,用于调整光的偏振方向,以确保光线正确地通过液晶层。
基本参数 :
- 像素(Pixel)
定义:像素是显示屏幕上的最小图像单元。每个像素由三个子像素组成,分别发出红、绿、蓝光(RGB),通过组合这些颜色来显示各种图像。
作用:像素的数量和排列决定了图像的细节和清晰度。像素越多,图像通常越细腻。 - 分辨率(Resolution)
定义:分辨率表示屏幕显示图像的精细程度,通常以水平和垂直方向上的像素数表示,例如1920x1080(1080p),意味着屏幕宽度有1920个像素,高度有1080个像素。
作用:分辨率越高,显示的图像越清晰,因为更多的像素能够显示更多的细节。 - 色彩深度(Color Depth)
定义:色彩深度,也称为颜色位数或位深度,是每个像素可以显示的颜色数量。通常以比特(bit)为单位,常见的有8位、10位、12位等。
8位色彩深度:每种颜色(红、绿、蓝)可以显示256种不同的色调,总共显示约1677万种颜色(24位色深)。
10位色彩深度:每种颜色显示1024种色调,总共显示约10.7亿种颜色。
作用:色彩深度越大,能够显示的颜色越丰富,使图像更自然、过渡更平滑。 - 点距(Pixel Pitch)
定义:点距是相邻像素中心之间的距离,通常以毫米(mm)为单位。点距小表示像素间隔小,显示的图像更细腻。
作用:点距越小,屏幕的分辨率和图像清晰度通常越高,因为像素密度更高。 - 尺寸(Size)
定义:尺寸是指显示屏对角线的长度,通常以英寸(inch)为单位。尺寸影响屏幕的可视面积和观看体验。
作用:屏幕尺寸越大,可以显示更多的内容,但也会影响显示器的分辨率需求和显示效果。大尺寸屏幕需要较高的分辨率才能保持清晰度,否则图像可能会显得模糊。
在STM32中,常见的LCD屏幕模块的构成:液晶显示面板、触摸面板和 PCB 底板。
数据传输方式:
芯片不同,传输和连接的方式也不同。
二、8080接口
1.ILI9341液晶屏驱动
在讲8080接口之前,要先了解一下ILI9341液晶屏驱动芯片(控制器)。 MCU芯片可以通过 SPI、 8080 接口或 RGB 接口与ILI9341 进行通讯,从而访问它的控制寄存器(CR)、地址计数器(AC)、及 GRAM最终实现对LCD屏幕的配置与控制。
ILI9341 控制器根据自身的 IM[3:0]信号线电平决定它与 MCU 的通讯方式,它本身支持 SPI 及 8080 通讯方式,液晶屏的 ILI9341 控制器在出厂前就已经按固定配置好(内部已连接硬件电路),它被配置为通过 8080 接口通讯,使用 16 根数据线的 RGB565 格式。内部硬件电路连接完, 剩下的其它信号线被引出到 FPC 排线,最后该排线由 PCB 底板引出到排针,排针再与实验板上的 STM32 芯片连接。
信号线(8080 通讯接口) | ILI9341的引脚 | 说明 |
---|---|---|
DB[15:0] | D[15:0] | 数据传输 |
RD | RDX | 低电平有效,读取数据 |
RS | D/CX | 数据/命令信号。高电平时, D[15:0]表示的是数据(RGB像素数据或命令数据。低电平时, D[15:0]表示控制命令。 |
RST | RESX | 复位,低电平有效 |
WR | WRX | 写数据,低电平有效 |
LCD_CS | CSX | 片选,低电平有效 |
LCD_BK | - - | 屏幕背光,低电平点亮 |
引脚带X的,均表示低电平有效。 STM32 通过8080接口与 ILI9341屏幕驱动芯片进行通信,最终实现对液晶屏的控制。通讯的内容主要包括命令和显存数据,显存数据即各个像素点的 RGB565 内容;命令是指对 ILI9341 的控制指令, MCU 可通过 8080 接口发送命令编码控制 ILI9341 的工作方式,例如复位指令、设置光标指令、睡眠模式指令等等,具体的指令在数据手册均有详细说明。
通信时序图:
2. 8080接口的起源与接口
8080接口,其实并不是专用于LCD的接口,而是由早期的处理器发展而来的,用于CPU与外部的数据的快速传输(CPU外扩RAM、ROM),后来也被用于LCD和打印机数据传输领域。
1974年,英特尔推出了第二款8位的处理器Intel 8080,它是Intel 8008的后继产品,但是8080 还在其指令集中添加了一些 16 位操作,可以使用16位地址总线,使其能够访问64KB的内存,它的指令集比 8008 增强了不少。
随着技术的不断迭代,Intel8080处理器早已被淘汰,但由于8080的并行总线协议具有高速,近距离传输的优点,很多追求高速,近距离的接口和传输方式依然使8080总线,比如CPU扩展外部的RAM和ROM,LCD、打印机等广泛使用。
8080接口 | 作用 |
---|---|
CS | 片选信号——(如果有多片可接译码器,通过地址进行访问) |
WR | 写入数据控制信号——(连接CPU的RD或IOR) |
RD | 读取数据控制信号——(连接CPU的WR或IOW) |
D[7:0] | 8 位双向数据线——(连接CPU数据总线) |
RST(RES) | 复位线——(连接系统总线RESET) |
D/I(DC) | 命令/数据标志(0,读写命令;1,读写数据) |
8080 是通过 “读使能(RE)” 和 “写使能(WE)” 两条控制线进行读写操作。
三、FSMC
ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟,但这样效率太低,为此STM32提供了一种特别的控制方法——使用FSMC接口实现8080时序。(如果芯片硬件少于100脚,是无法使用FSMC来控制液晶屏,只能使用SPI的方式来控制)
FSMC 是 Flexible Static Memory Controller 的缩写,译为灵活的静态存储控制器。它可以用于驱动包括 SRAM、 NOR FLASH 以及 NAND FLSAH 类型的存储器。
由上图可以看到,FSMC分为四个区域,分别为:NOR/PSRAM信号、公用信号、NAND信号以及PC卡信号。
模拟8080是利用STM32的FSMC外设,在NOR/PSRAM模式下,特别是借鉴了NOR_FLASH类型的模式B的时序配置,来模拟ILI9341液晶屏所需的8080接口时序,从而实现对液晶屏的控制。
模拟8080时序,我们将FSMC的A0地址线(可以使用A1/A2等地址线)和ili9341芯片8080接口的D/CX信号线连接,当A0为高电平时(即D/CX为高电平)数据线D[15:0]的信号会被ili9341理解为数值,当A0为低电平时(即D/CX为低电平)信号会被理解为命令。
因为FSMC会自动产生地址信号,所以当FSMC向0x6xxxxxx1,0x6xxxxxx3,0x6xxxxxx5等这些 奇数 地址写入数据时,地址最低位的值均为1,所以它会控制地址线A0(D/CX)输出高电平,此时通过数据线传输的信号就会被理解为数值。当向0x6xxxxxx0,0x6xxxxxx2,0x6xxxxxx4等这些偶数地址写入数据时,地址最低位的值均为0,所以它会控制地址线A0(D/CX)输出低电平,这个时候通过数据线传输的信号会被理解为命令。
有了以上的了解,只要配置好了FSMC外设,在代码中利用指针变量,向不同的地址单元中写入数据,就能够由 FSMC 模拟出的 8080 接口向 ILI9341 写入控制命令或 GRAM(图形内存)的数据了。