TFT-LCD

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

该模块有以下特色:函数

  1. 2.4’/2.8’/3.5’/4.3’/7’ 5 种大小的屏幕可选。
  2. 320×240 的分辨率(3.5’分辨率为:320*480,4.3’和 7’分辨率为:800*480)。
  3. 16 位真彩显示。
  4. 自带触摸屏,能够用来做为控制输入。

 

本章,咱们以 2.8 寸的 ALIENTEK TFTLCD 模块为例介绍,该模块支持 65K 色显示,显示分辨率为 320×240,接口为 16 位的 80 并口,自带触摸屏。ui

 

L 丨 、 T K  2 / 24 ' LCD MODULE

 

模块原理图如图 18.1.1.2 所示:spa

 

妥 三  9180  •Ig CIND  -IH  OSIIX  I 」  S• 1 二  「 -80  1 -80  IS  9180  山 「 HO  11a0  「 1a0

 

TFTLCD 模块采用 2*17 的 2.54 公排针与外部链接,接口定义如图所示:设计

 

LCT) CS  LCD  LCD RSV  DB2  DB4  DB6  DBS  DBII  DB13  DBIS  DB17  LCDI  LCD CS  RSV  DB2  DB4  11  DB6  13  DBS  15  DBII  17  DB13  19  DBF  21  DB17  BL CTRS  RD  DB3  DBS  DB7  DBIO  DB12  DB14  DB16  GND  VDD3.3  GND  GND  T MISO  T PEN  T CS  VDD3.3  27  GND BL VDD  29  MISO  31  T PEN  T CS  TET LCD  MOSI  MO  CLK  10  12  14  16  18  20  22  24  26  28  30  32  34  LCD RS  LCD RD  OBI  DBS  DBS  DBIO  DB12  DB14  DB16  GND  vccs.3  GND  BL VDD  T MOSI  T CLR

 

从图能够看出,ALIENTEK TFTLCD 模块采用 16 位的并方式与外部链接,之因此不采用 8 位的方式,是由于彩屏的数据量比较大,尤为在显示图片的时候,若是用 8 位数据线,就会比 16 位方式慢一倍以上,咱们固然但愿速度越快越好,因此咱们选择 16 位的接口。3d

该模块的 80 并口有以下一些信号线:指针

  • CS:TFTLCD 片选信号。
  • WR:向 TFTLCD 写入数据。
  • RD:从 TFTLCD 读取数据。
  • D[15:0]:16 位双向数据线。
  • RST:硬复位 TFTLCD。
  • RS:命令/数据标志(0,读写命令;1,读写数据)

 

须要说明的是,TFTLCD模块的RST信号线是直接接到STM32的复位脚上,并不禁软件控制,这样能够省下来一个 IO口。另外咱们还须要一个背光控制线来控制TFTLCD 的背光。因此,咱们总共须要的 IO口数目为 21 个。这里还须要注意,咱们标注的DB1~DB8,DB10~DB17,是相对于 LCD 控制 IC 标注的,实际上你们能够把他们就等同于 D0~D15,这样理解起来就比较简单一点。xml

 

ILI9341 液晶控制器自带显存,其显存总大小为 172800(240*320*18/8),即 18 位模式(26万色)下的显存量。在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341的 18 位数据线与 MCU 的 16 位数据线以及 LCD GRAM 的对应关系如图所示:blog

 

计算机生成了可选文字: 93唼1总线 肥U数据 (吒位) LCDGRAM (16位) D15 D13 RC4]RC3]RC2]R[1]RCO] D17 D15 D16 DI唼 DI唼 D12 D13 D11 D12 NC D11 D10 DB 引GC4]GCS]GC2]G1]G0] BC4]BCS]BC2]B[1]ECO] D10 DB

 

从图中能够看出,ILI9341 在 16 位模式下面,数据线有用的是:D17~D13 和 D11~D1,D0和 D12 没有用到,实际上在咱们 LCD 模块里面,ILI9341 的 D0 和 D12 压根就没有引出来,这样,ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。接口

 

这样 MCU 的 16 位数据,最低 5 位表明蓝色,中间 6 位为绿色,最高 5 位为红色。数值越大,表示该颜色越深。另外,特别注意 ILI9341 全部的指令都是 8 位的(高 8 位无效且参数除了读写 GRAM 的时候是 16 位,其余操做参数,都是 8 位的,这个和 ILI9320 等驱动器不同,必须加以注意。

接下来,咱们介绍一下 ILI9341 的几个重要命令0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 条指令。

 

首先来看指令:0XD3,这个是读 ID4 指令,用于读取 LCD 控制器的 ID,该指令如图所示:

 

计算机生成了可选文字: 各位描述 顺序 指令 参数1 参数2 参数3 参数4 RS 0 1 1 1 1 RD WR D1五、D8 XX XX XX XX XX D7 X D6 X D5 X D4 X D3 X D2 X D1 X DO 1 X 0 1 HEX D3H 0OH 93H 41H

 

从上表能够看出,0XD3 指令后面跟了 4 个参数,最后 2 个参数,读出来是 0X93 和 0X41,恰好是咱们控制器 ILI9341 的数字部分,从而,经过该指令,便可判别所用的 LCD 驱动器是什么型号这样,咱们的代码,就能够根据控制器的型号去执行对应驱动 IC 的初始化代码,从而兼容不一样驱动 IC 的屏,使得一个代码支持多款 LCD。

 

接下来看指令:0X36,这是存储访问控制指令,能够控制 ILI9341 存储器的读写方向,简单的说,就是在连续写 GRAM 的时候,能够控制 GRAM 指针的增加方向,从而控制显示方式(读 GRAM 也是同样)。该指令如图所示:

计算机生成了可选文字: 各位描述 顺序 指令 0 控制 RD 1 WR 忄 D1五、D8 XX XX D7 0 MY D6 0 MX D5 1 MV D4 1 ML D3 0 BGR D2 1 MH DI 1 0 DO 0 0 HEX 36H 0

 

从上表能够看出,0X36 指令后面,紧跟一个参数,这里咱们主要关注:MY、MX、MV这三个位,经过这三个位的设置,咱们能够控制整个 ILI9341 的所有扫描方向,如所示:

计算机生成了可选文字: MY 0 1 0 1 0 0 1 1 控制位 从左到右,从上到下 从左到右,从下到上 从右到左,从上到下 从右到左,从下到上 从上到下,从左到右 从上到下,从右到左 从下到上,从左到右 从下到上,从右到左 效果 LCD扫描方向(GRAM自增方式) MX 0 0 1 1 0 1 0 1 MV 0 0 0 0 1 1 1 1

 

这样,咱们在利用 ILI9341 显示内容的时候,就有很大灵活性了,好比显示 BMP 图片,BMP 解码数据,就是从图片的左下角开始,慢慢显示到右上角若是设置 LCD 扫描方向为从左到右,从下到上,那么咱们只须要设置一次坐标,而后就不停的往 LCD 填充颜色数据便可,这样能够大大提升显示速度。

 

接下来看指令:0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置横坐标(x 坐标),该指令如所示:

计算机生成了可选文字: 各位描述 顺序 指令 参数1 参数2 参数3 参数4 RS 0 1 1 1 1 RD 1 1 1 1 1 WR 忄 忄 忄 忄 忄 D1五、D8 XX XX XX XX XX D7 0 SC15 SC7 EC15 EC7 D6 0 SC14 SC6 EC14 EC6 D5 1 SC13 SC5 EC13 EC5 D4 0 SC12 SC4 EC12 EC4 D3 1 SC11 SC3 EC11 EC3 D2 0 SCIO SC2 ECIO EC2 DI 1 SC9 SCI EC9 ECI DO 0 SC8 SCO EC8 ECO HEX 2AH SC EC

 

 

在默认扫描方式时,该指令用于设置 x 坐标,该指令带有 4 个参数,其实是 2 个坐标值:SC 和 EC,即列地址的起始值和结束值,SC必须小于等于 EC,且 0≤SC/EC≤239。通常在设置 x 坐标的时候,咱们只须要带 2 个参数便可,也就是设置 SC 便可,由于若是 EC 没有变化,咱们只须要设置一次便可(在初始化 ILI9341 的时候设置),从而提升速度。

 

指令:0X2B,与 0X2A 指令相似,是页地址设置指令在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标(y 坐标)该指令如所示:

各 位 描 述  顺 序  指 令  参 数 1  参 数 2  参 数 3  参 数 4  控 制  RD  RS  0  WR  D15 、 D8  XX  XX  D7  0  SP15  SP7  EP15  EP7  SP14  SP6  EP14  EP6  SP13  SP5  EP13  EP5  SP12  EP12  EP4  SPII  SP3  EPII  EP3  SPIO  SP2  EPIC)  EP2  SP9  SP 1  EP9  EP 1  2B 日  SP8  SP  SPO  EP8  EP  EPO

 

在默认扫描方式时,该指令用于设置 y 坐标,该指令带有 4 个参数,其实是 2 个坐标值:SP 和 EP,即页地址的起始值和结束值,SP 必须小于等于 EP,且 0≤SP/EP≤319。通常在设置y 坐标的时候,咱们只须要带 2 个参数便可,也就是设置 SP 便可,由于若是 EP 没有变化,咱们只须要设置一次便可(在初始化 ILI9341 的时候设置),从而提升速度。

 

接下来看指令:0X2C,该指令是写 GRAM 指令,在发送该指令以后,咱们即可以往 LCD的 GRAM 里面写入颜色数据了,该指令支持连续写,指令描述如所示:

RS  RD  ifi4  xx  o  DI  0  DO  0  o  Dn[15:  0]  HEX  2CH  xx  xx  xx

 

从上表可知,在收到指令0X2C以后,数据有效位宽变为16位,咱们能够连续写入 LCD-GRAM 值,而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。例如:假设设置的是从左到右,从上到下的扫描方式,那么设置好起始坐标(经过 SC,SP 设置)后,每写入一个颜色值,GRAM 地址将会自动自增 1(SC++),若是碰到 EC,则回到 SC,同时 SP++,一直到坐标:EC,EP 结束,其间无需再次设置的坐标,从而大大提升写入速度。

 

最后,来看看指令:0X2E,该指令是读 GRAM 指令,用于读取 ILI9341 的显存(GRAM),该指令在 ILI9341 的数据手册上面的描述是有误的,真实的输出状况如所示:

RS  0  RD  DIO  xx  1  R114:0]  BIC4:O]  D9  xx  xx  xx  xx  D8 D7 D6  0  0  xx  105  D2  0  Dl  1  xx  xx  xx  xx  DO  0  R2C4:O]  HEX  2EH  dummy  RIGI  BIR2  G2B2  R3G3

 

该指令用于读取 GRAM,如所示,ILI9341 在收到该指令后,第一次输出的是dummy 数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标:SC,SP 开始),输出规律为:每一个颜色份量占 8 个位,一次输出 2 个颜色份量。好比:第一次输出是 R1G1,随后的规律为:B1R2→G2B2→R3G3→B3R4→G4B4→R5G5... 以此类推。若是咱们只须要读取一个点的颜色值,那么只须要接收到参数 3 便可,若是要连续读取(利用 GRAM地址自增,方法同上),那么就按照上述规律去接收颜色数据。

 

以上,就是操做 ILI9341 经常使用的几个指令,经过这几个指令,咱们即可以很好的控制 ILI9341

显示咱们所要显示的内容了。

 

通常 TFTLCD 模块的使用流程如图:

硬 复 位  LCD RST=O;  delay_ms( 100L  LCD RST=I;  初 始 化 序 列  设 置 坐 标  写 GRAM 指 令  写 入 颜 色 数 据  LCD 显 示  读 GRAM 指 令  读 出 颜 色 数 据  单 片 机 处 理

 

任何 LCD,使用流程均可以简单的用以上流程图表示。其中硬复位和初始化序列,只须要执行一次便可。而画点流程就是:设置坐标→写 GRAM 指令→写入颜色数据,而后在 LCD 上面,咱们就能够看到对应的点显示咱们写入的颜色了。

读点流程为:设置坐标→读 GRAM 指令→读取颜色数据,这样就能够获取到对应点的颜色数据了。

 

以上只是最简单的操做,也是最经常使用的操做,有了这些操做,通常就能够正常使用 TFTLCD了。接下来咱们将该模块(2.8 寸屏模块)用来来显示字符和数字,经过以上介绍,咱们能够得出 TFTLCD 显示须要的相关设置步骤以下:

  1. 设置 STM32F1 与 与 TFTLCD 模块相链接的 IO 。

这一步,先将咱们与 TFTLCD 模块相连的 IO 口进行初始化,以便驱动 LCD。这里咱们用到的是 FSMC,FSMC 将在 18.1.2 节向你们详细介绍。

  1. 初始化 TFTLCD 模块。

即初始化序列,这里咱们没有硬复位 LCD,由于精英 STM32F103 的 LCD 接口,将 TFTLCD 的 RST 同 STM32F1 的 RESET 链接在一块儿了,只要按下开发板的 RESET 键,就会对 LCD 进行硬复位。初始化序列,就是向 LCD 控制器写入一系列的设置值(好比伽马校准),这些初始化序列通常 LCD 供应商会提供给客户,咱们直接使用这些序列便可,不须要深刻研究。在初始化以后,LCD 才能够正常使用。

经过函数将字符和数字显示到 TFTLCD 模块上。

  1. 这一步则经过图 18.1.1.5 左侧的流程,即:设置坐标→写 GRAM 指令→写 GRAM 来实现,可是这个步骤,只是一个点的处理,咱们要显示字符/数字,就必需要屡次使用这个步骤,从而达到显示字符/数字的目的,因此须要设计一个函数来实现数字/字符的显示,以后调用该函数,就能够实现数字/字符的显示了。
相关文章
相关标签/搜索