首页 » 通讯 » 教你若何快速驱动LCD屏_指令_接口

教你若何快速驱动LCD屏_指令_接口

落叶飘零 2025-01-02 00:37:56 0

扫一扫用手机浏览

文章目录 [+]

感谢各位的关注和支持,你们的支持是原子哥无限提高的动力。

教你如何快速驱动LCD屏

序言

教你若何快速驱动LCD屏_指令_接口 教你若何快速驱动LCD屏_指令_接口 通讯

LCD屏的驱动对付新手来说,这是一个很大的拦路虎。
学完根本外设后,在这里就不知道怎么下手了。
一个完全的LCD驱动包含的内容是非常多的,最根本的描点,画线,显示字符,后面还有一些UI。
在这里,只管即便以浅近的办法驱动LCD,一步一步带大家熟习节制LCD屏幕的驱动。

教你若何快速驱动LCD屏_指令_接口 教你若何快速驱动LCD屏_指令_接口 通讯
(图片来自网络侵删)

首先,我们先理解一下LCD(Liquid Crystal Display),即液晶显示器,紧张由玻璃基板、背光、驱动IC组成,详细如下图。

全彩LCD,是一种全彩显示屏,一个像素点可以是RGB565或者RGB888格式(R赤色、G绿色、B蓝色便是常说的三基色),可以显示各种颜色。

至于LCD的显示事理,我们这里就不说了,大家可以通过以下网址进行查看:https://zhuanlan.zhihu.com/p/133306648

通过上图可以清楚看到,单片机要实现LCD的显示,紧张是与驱动IC进行通信。
想要进行通信,必须得知道是什么接口,这时候得看LCD模块给你引出什么接口,这是裸屏已经决定了。
LCD接口可以大致分为三种:MCU接口、RGB接口与MIPI接口,详细差异如下:

不同接口的屏幕支持的分辨率都不一样。
我们这里紧张讲解的是MCU屏—正点原子2.8寸LCD屏,该屏自带SRAM,驱动大略,大部分单片机都能驱动。
实在还有一类是SPI接口的支持更小分辨率的屏幕。

为什么说裸屏已经决定了屏幕的接口,我们以正点原子的2.8寸屏为例,该屏的驱动IC是ILI9341,是支持多种通信接口:MCU接口(8/9/16/18位)、3/4线SPI接口、RGB接口(6/16/18位)。

ILI9341芯片框架图

通过手册查阅,可以创造IM[3:0]引脚可以选择接口,这就须要结合2.8寸LCD屏事理图进行查看了。

通过上图,我们就很清楚看到,我们的LCD屏幕是支持利用8位或者16位MCU接口的,不过默认的是16位。
以是说,我们的2.8寸LCD屏利用的是16位MCU接口。
利用16位MCU接口的显示速率比8位的要快一倍。
到这里,我们对付LCD的用什么接口已经很清楚了。

大略来说,LCD屏(MCU接口)驱动的核心:驱动LCD驱动芯片。

这里我们就须要一些基本的LCD驱动知识:

① 8080时序,LCD驱动芯片一样平常利用8080时序掌握,实现数据写入/读取。

② 初始化序列(数组),屏厂供应,用于初始化特定屏幕,不同屏幕厂家不完备相同!

③ 画点函数、读点函数(非必须),基于这两个函数可以实现各种绘图功能!

把上面的梳理一下,便是LCD驱动的一样平常过程了。

只要我们把每一步都理解清楚,就相称于节制了LCD屏幕的驱动了。

一.节制8080时序

8080时序,称为并口总线时序,常用于MCU屏驱动IC的访问,由Inter提出,也叫英特尔总线。

接下来,我们来看看LCD 8080时序旗子暗记的解释,详细如下表:

大略来说,这里便是我们用来驱动LCD屏幕用到的引脚。
在理解引脚的功能后,就可以通过查看手册的时序图,写出读写函数了。

8080写时序

首先拉低CS线选中器件,然后根据写入的内容是数据(RS=1)还是命令(RS=1)进行拉低或拉高RS线,在WR的上升沿,把内容写入LCD驱动IC中, 末了拉高CS线开释片选,而RD是读旗子暗记保持高电平即可。

8080读时序

首先拉低CS线选中器件,然后根据操作的内容是数据(RS=1)还是命令(RS=1)进行拉低或拉高RS线,在RD的上升沿,把内容读取到MCU,末了拉高CS线开释片选,而WR是写旗子暗记保持高电平即可。

从这里可以知道,我们8080时序操作可分为写数据、写命令、读数据、读命令(没用到)四种。
基于写数据,写命令就可以完成初始化LCD操作,也便是发送初始化序列。

二.节制芯片的必用指令

LCD驱动芯片用于掌握LCD的各种显示功能和效果,整体功能比较繁芜,不过我们想要实现基本利用只须要6条指令即可。

常日我们想验证一下我们的读写函数是否精确,看看能否读取到器件的ID。

发送完0xD3指令后,后面跟了4个参数,末了2个参数才是有用的,读出的是0x93和0x41,刚好是我们掌握器ILI9341数字部分。
这里特殊把稳:不同芯片读取ID的指令是不一样的,不要张冠李戴。

指令0x36是存储访问掌握指令,掌握ILI9341存储器的读写方向。
大略来说,便是在连续写GRAM的时候,可以掌握GRAM指针的增长方向,从而掌握显示办法(读GRAM也是一样)。

发送完0x36指令后,紧跟一个参数,参数里的MX/MY/MV共同掌握GRAM的扫描方向以及BGR掌握RGB/BGR顺序。
默认LCD扫描方向为从左到右,从上到下。

当我们设置好LCD扫描方向后,显示内容时就有很大灵巧性,只须要设置一次坐标,然后一直往LCD添补颜色数据即可,大大提高了显示速率。

设置坐标的指令分为X轴和Y轴,官方一点便是设置列地址指令和设置页地址设置指令。
首先来看,0x2A即列地址设置指令。

0x2A指令带有4个参数,这里便是2个坐标值SC和EC,也便是列地址的起始值和结束值。
其实在设置x坐标时,我们可以只带2个参数即设置SC即可,由于EC没有变革时,我们只设置一次即可,从而提高了速率,不用每次都多发两次数据。

0x2B指令的用法跟0x2A很类似。

0x2B指令也是带有4个参数,这里便是2个坐标值SP和EP,也便是页地址的起始值和结束值。
其实在设置y坐标时,我们可以只带2个参数即设置SP即可,由于EP没有变革时,我们只设置一次即可,从而提高了速率,不用每次都多发两次数据。

0x2C指令是写GRAM指令,在发送该指令之后,便可以往LCD的GRAM里面写入颜色数据,并且该指令支持连续写即地址自增。

当发送0x2C指令之后,数据线变为16位,可以开始写入GRAM数据,即把一个个像素点的颜色值写入。
在默认扫描方向(从左到右,从上到下),设置好起始坐标后(0x2A设置SC,0x2B设置SP),每写入一个颜色值,GRAM地址将会自动自增1(SC++),如果碰到EC,则回到SC,同时SP++,一贯到坐标(EC,EP)结束,期间不须要再次设置坐标,大大提高了写入速率。

当我们只须要实现画点操作时,以上指令学习已经够了,不过在GUI利用的时候,还是会常常用到读点,也便是0x2E指令。

0x2E指令是读GRAM指令,在发送该指令之后,便可以读取GRAM的数据。

当ILI9341收到0x2E指令后,第一次输出的是dummy数据,也便是无效数据,从第二次开始,读取的才是有效的GRAM数据(须要通过0x2A和0x2B设置位置),输出规律如上图:R1G1àB1R2àG2B2àR3G3…。
如果我们只须要读取一个点的颜色值,只须要吸收到参数3即可;连续读取的话,就按上述规律去吸收即可。

在这里,我们已经算是把须要理解的各部分都理解到了。
接下来,我们就要把这一块一块零散的知识串一起,也便是我们的LCD最基本驱动步骤。

1、确定IO连接关系(通过LCD模块事理图,开拓板液晶接口事理图查看)

2、初始化IO口(初始化连接LCD的各个IO口)

3、编写8080接口函数(写数据、写命令、读数据)

4、编写LCD初始化函数(完成初始化序列配置,设置扫描方向,设置EP/EC,点亮背光)

5、编写LCD画点函数(实现LCD任意位置画点)

后面便是对源码的讲解了,而这一部分我想让大家静下心来,看着附件工程进行理解,这样子对知识的理解才更加透彻。
后面也跟大家分享如何利用FSMC仿照8080时序驱动LCD屏幕。

标签:

相关文章