基于ILI9341的TFT-LCD屏幕显示要点总结

目录

LCD常用引脚及其功能

LCD驱动流程

RGB565

关键指令

GRAM自增方向

设置开始坐标和结束坐标

写GRAM指令

读GRAM指令


本文主要参考视频如下:

第37讲 LCD-TFTLCD原理与配置介绍-M4_哔哩哔哩_bilibili
说明:

目前,市面上常见的TFT-LCD驱动芯片的原理都是大同小异的,这篇文章是基于驱动芯片ILI9341来说的。其实,只要弄懂了一种IC的原理,其他的都是差不多的,具体差异看一下具体芯片的数据手册就能明白了。

另外,对于TFT-LCD来说,使用并口刷新肯定是更优的选择,但是也有很多小屏幕用的是SPI接口。这篇文章参考的视频里用的是并口。

关于接口,可以参考这篇文章:LCD常见接口总结_lcd接口-CSDN博客

LCD常用引脚及其功能

常用引脚如下:

其中:

CS片选是选中芯片;

RD读信号和WR写信号决定当前是读还是写;

RS命令/数据决定当前是写入命令还是写入数据。

这里的DB是16位并口,但是也有的是使用SPI接口,具体看数据手册和硬件连接即可。

LCD驱动流程

说明,大部分TFT-LCD的驱动流程都是一样的,比较另类的可能也不常用。

流程如下:

复位部分一般都可以找厂家要,自己写的话,麻烦而且容易出错。

设置坐标,然后发一个写GRAM指令;

然后就可以开始写入颜色数据;

LCD显示;

要明确一个问题,那就是LCD显示,关键点其实就是坐标和颜色数据,任何图案都是在某个坐标上刷新颜色值(更底层是驱动LED亮),所以设置坐标后,发写GRAM指令,然后写入颜色数据,LCD就会在对应坐标位置显示给定的颜色了。

RGB565

如下图:

比如0xF800,对应二进制就是1111 1000 0000 0000,高5位都是1,其他位都是0,也就是说全是红色分量,没有另外两种颜色的分量,因此0xF800表示的就是纯红色。

关键指令

这里有个细节问题需要注意下,虽然所有指令和大部分操作参数都是8位的,但是它们整体是16位的,只是高8位无效而已,另外,RGB565的颜色数据也是16位的,而且,颜色数据是主要的数据源,所以我们在使用DMA时,可以将操作的数据位数设置成16位的,从而实现统一操作,省得又是8位又是16位。具体得看IC芯片是否支持。

以读ID指令为例说明下

顺序这一列说明的是发指令还是发参数;

控制这一列,是表示发送当前数据时,各控制位需要处于什么样的状态,比如第一行发送指令时,RS要置0,RD要置高,WR是有效的并且会在上升沿时写入;

再后面就是各位的描述以及对应的HEX码。

后面的参数行的WR置1,RD有向上的箭头,表示这四行数据是读出来的参数。

剩下的几条指令同理。

GRAM自增方向

这里的三种关键控制位MY MX MV,决定了GRAM自增的方向,也就是LCD的扫描方向。

这个指令很重要。

正常我们如果想要往LCD上刷个像素点,就设置该点的坐标,然后刷上颜色值。

但是如果是想要刷一个区域的点呢?

最基础的方式就是设置一下坐标,刷一个点,再设置一下坐标,再刷一个点......如此循环往复,一次刷一个点,每次都要设置坐标。

但是这个GRAM自增指令就能让我们只用设置一个整体区域的开始和结束坐标,然后发送颜色数据时,GRAM坐标就会自动增长。这也是我们实现批量发送颜色数据的重要基础,我们可以通过DMA将数据批量发送出去,LCD收到数据时,就会按照设置好的坐标来刷新屏幕。

设置开始坐标和结束坐标

设置x的开始和x的结束坐标

设置y的开始和y的结束坐标

这里有个问题千万要注意,那就是最大的坐标会比屏幕的宽高各少1,因为坐标是从0开始的,和数组是一样的道理。

写GRAM指令

注意,GRAM是否自增是这个指令决定的,上面的0x36设置的是自增的方向。

读GRAM指令

注意,我们读数据时每读三个字节就要合成一个16位的颜色数据。
可以结合如下文章加深理解:

STM32实战总结:HAL之FSMC控制TFT-LCD_CSDN博客

TFT驱动ST7789使用总结-CSDN博客

LCD常见接口总结_lcd接口-CSDN博客

相关推荐
螺丝钉的扭矩一瞬间产生高能蛋白1 小时前
基于FreeRTOS和STM32的微波炉
stm32·单片机·嵌入式硬件
Aspiring Q1 小时前
vscode+keil嵌入式软件开发全流程
vscode·stm32·单片机
努力创造奇迹2 小时前
STM32 HAL库 内部传感器驱动实现
stm32·单片机·嵌入式硬件
田甲5 小时前
【STM32】STemWin库,使用template API
stm32·单片机·嵌入式硬件
四夕白告木贞5 小时前
stm32week11
stm32·单片机·嵌入式硬件·学习
the sun346 小时前
深入理解单片机的运行流程
stm32·单片机·嵌入式硬件
努力创造奇迹6 小时前
STM32 HAL库 低功耗的实现
stm32·单片机·嵌入式硬件
Despacito0o6 小时前
FreeRTOS二值信号量详解与实战教程
驱动开发·stm32·单片机·嵌入式硬件·mcu·51单片机·嵌入式实时数据库
强化学习与机器人控制仿真7 小时前
ROS & ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)
开发语言·人工智能·stm32·深度学习·机器人·自动驾驶
技术干货贩卖机9 小时前
0基础 | 开发环境 |51单片机编译环境 Keil C251和C51,STM32的编译环境Keil 5 MDK-ARM
arm开发·stm32·嵌入式硬件