stm32(十八)TFT-LCD

1、TFT-LCD屏简介

LCD( Liquid Crystal Display),即液晶显示器,可分为被动矩阵式和主动矩阵式两种不同的控制方式,主动矩阵式也称为 TFT( Thin Film Transistor)。 主动式 TFT 型的液晶显示器的结构较为复杂包括了:背光管、导光板、偏光板、滤光板、玻璃基板、配向膜、液晶材料和薄模式晶体管等等。

一个完整的 LCD 显示系统由三部分组成:主控系统、 LCD 显示控制器、 LCD 显示屏。市场上,高端一点的主控系统一般内部集成有 LCD 显示控制器;一般的单片机内部往往都是不集成有 LCD 显示控制器。主控内部没有集成 LCD 控制器的,一般需要外置 LCD 控制器或者使用自带有控制器的 LCD 显示屏。



2、LCD屏的参数

  • 分辨率:屏幕上能显示的像素点的个数,包括水平分辨率和垂直分辨率。我的开发板上面用的LCD屏的分辨率是固定的,固定为横向320x纵向480。即:水平方向有 320 个像素点,垂直方向有480个像素点。
  • LCD屏每一个像素点的颜色都是彩色的,可以理解每一个像素点都有3个彩色灯:红色、绿色、蓝色,将红绿蓝以不同的色彩强度进行混合就可以产生千变万化的彩色。
  • 颜色位深:表示 RGB (红绿蓝)颜色的二进制位数,常见的有 16BPP(bit per pixel)如: 16BPP 表示一个像素点的颜色使用 16 个二进制位表示。,总共是16位。
  • RGB565,用5位来表示红色、6位来表示绿色、5位来表示蓝色,关系如下图:

电脑的屏是24BPP的。

颜色位越大则可以显示的颜色的种类越多。

3、TFT-LCD控制器的原理

TFT-LCD控制器的型号是ILI9486,每一款屏都有一个数据手册来描述屏基本的原理。

 ILI9486和CPU通讯的接口有很多,而我们选择用的接口是16位的并口,即需要16个数据管脚来传输数据。

 

3.1、ILI9486接口

 

  • IM[2:0]  选择接口模式的管脚

当IM2管脚接低电平,IM1管脚接高电平,IM0管脚接低电平,则选择的数据通讯接口是8080的16位并口通信接口

  • RESX 复位管脚

硬件复位TFT-LCD控制器

已经直接连接到RC复位电路

 

  • CSX CS:chip select

8080并口通讯的芯片选择管脚,简称片选脚

低电平:ILI9486被选中,并且可访问

高电平:ILI9486未被选中,不可访问、

  •   DCX  数据命令

数据命令管脚,用于控制ILI9486接收到的16进制数是用于设置参数,还是用于显示在LCD屏上。

低电平:命令

高电平:数据(参数)

  • RDX  8080并口通讯的读数据时钟管脚

读信号管脚:主控在RDX的上升沿读取数据

  • WRX 8080并口通讯写数据时钟管脚

写信号管脚,主控在WRX的上升沿是发送数据。

  • DB[17:0]  总线管脚

8080并口通讯数据传输管脚,用于发送数据给ILI9486,也用于从ILI9486中读取数据。

由于我们选择的是RGB565的像素格式,只需要16个管脚即可传输16位数据。

我们只用到DB[15:0]

4、8080并口通信的原理

8080并口通信接口的简介8080并口传输位数可选:8/9/16/18,我们选择用16位并口传输。主要需要的管脚如下:

CSX:用于使能或者禁止ILI9486

WRX:写信号(写时钟),每一个时钟信号,主控发送16位数据

RDX:读信号(读时钟),每一个时钟信号,主控读取16位数据

DC  : 数据命令管脚,决定DB[15:0]的位数据是写到显存还是写到命令寄存器。

DB[15:0]:并口通信管脚

补充知识点:显存:水池存储水,显存是存储线显示图像文字字符数据的,显存越大可以存储的图像信息越多,显示效果越好。主控写图像文字数据到ILI9486时,其实就是写到显存中。

5、8080并口写时序

8080接口传输16位数据的时序图如下图所示:

①操作ILI9486时,必须将CSX管脚拉低

②在写数据或者写命令时,WRX通过拉低在拉高来模拟产生一个上升沿

③在写数据或者写命令时,RDX不产生脉冲该信号,而是保持为高电平

④下图中,一个WRX脉冲时钟可以传输16位数据

⑤DC是数据命令控制管脚,DB[15:0]的位数据是写到命令寄存器,还是写到显存,就是用DC管脚电平高低来进行区分的

该时序对应的伪代码如下:

(1)主控写命令的伪代码
   //CS管脚输出低电平
   //DC管脚拉低电平
   //WRX管脚拉电平
   //DB[15:0] 准备16位数据
   //WRX拉高电平
(2)主控写数据的伪代码
   //CS管脚输出低电平
   //DC管脚拉高电平
   //WRX管脚拉电平
   //DB[15:0] 准备16位数据
   //WRX拉高电平

8080 接口写像素点(数据)的时序

(1)一次传输传输一个像素点数据,一个像素点数据有16位

(2)最高的数据通过D15管脚输出,最低位的数据通过D0输出

(3)红色是高5位;绿色是中间6位,蓝色是最低5位

ILI9486的常用命令

1、主控发送0x01命令到ILI9486可以让ILI9486进行软件复位。发送命令的时序要求是:DC低电平,RDX保持高电平,WRX产生一个上升沿,D[15:8]的数值是无效的,D[7:0]的值是有效

2、列地址设置命令:

   设置一个显示窗口的列地址。列地址的取值范围是[0:319]。

   主控在设置列地址时的步骤如下:

   ①主控发送发送一条命令:0x2A

   ②主控发送列地址的起始地址(SC:start column),16位的起始地址分两次发送

   ③主控发送列地址的结束地址(EC:end column),16位的结束地址分两次发送

3、页(行)地址设置命令:

 设置一个显示窗口的页(行)地址。页(行)地址的取值范围是[0:479]。

   主控在设置页(行)地址时的步骤如下:

   ①主控发送发送一条命令:0x2B

   ②主控发送页(行)地址的起始地址(SP:start page),16位的起始地址分两次发送

   ③主控发送页(行)地址的结束地址(EP:end page),16位的结束地址分两次发送

4、写像素点数据到显存中:

  主控首先发送命令0x2C,告诉ILI9486,主控即将发送像素点数据。主控可以连续地写像素点数据到TFT-LCD屏中的显存即上图中的D1[15:0]~Dx[15:0]~Dn[15:0]。

  主控连续写像素点数据到显存中时,显存保存了一个像素点的数据后地址会自动递增来准备接收下一个像素点的数据

5、显存访问控制命令:

   用于设置显存的增长方向,常用的是MY为0,MX为0,MV为0的模式

6、软件设计

原理图

其中注释的为库函数的配置

#include "stm32f4xx.h"
//常用的颜色
#define					WHITE         		0xFFFF
#define					BLACK         	 	0x0000	  
#define					BLUE         	    0x001F  
#define					BRED              0xF81F
#define					GRED 	         		0xFFE0
#define					GBLUE		 					0x07FF
#define					RED           	 	0xF800
#define					MAGENTA       		0xF81F
#define					GREEN         	 	0x07E0
#define					CYAN          	 	0x7FFF
#define					YELLOW        	 	0xFFE0
#define					BROWN 		 				0xBC40 //棕色
#define					BRRED 		 				0xFC07 //棕红色
#define					GRAY  		 				0x8430 //灰色
//字体取模
const unsigned char chinese_1[] =
{

0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,/*"中",0*/
/* (16 X 16 , 宋体 )*/

};

const unsigned char chinese_2[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x08,0x01,0x80,0x30,
0x0F,0xFF,0xFF,0xF0,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,
0x0F,0xFF,0xFF,0xE0,0x0C,0x01,0x80,0x20,0x0C,0x01,0x80,0x20,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,
0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/*"中",0*/
/* (32 X 32 , 宋体 )*/

};

const unsigned char chinese_3[] =
{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值