屏幕篇—如何最快速驱动LCD屏

这篇具有很好参考价值的文章主要介绍了屏幕篇—如何最快速驱动LCD屏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

屏幕篇—如何最快速驱动LCD屏

前言
LCD屏的驱动对于新手来说,这是一个很大的拦路虎。学完基础外设后,在这里就不知道怎么下手了。一个完整的LCD驱动包含的内容是非常多的,最基础的描点,画线,显示字符,后面还有一些UI。在这里,尽量以最浅显的方式驱动LCD,一步一步带大家熟悉掌握LCD屏幕的驱动。

首先,我们先了解一下LCD(Liquid Crystal Display),即液晶显示器,主要由玻璃基板、背光、驱动IC组成,具体如下图。
屏幕篇—如何最快速驱动LCD屏

全彩LCD,是一种全彩显示屏,一个像素点可以是RGB565或者RGB888格式(R红色、G绿色、B蓝色就是常说的三基色),可以显示各种颜色。
至于LCD的显示原理,我们这里就不说了,大家可以通过以下网址进行查看:https://zhuanlan.zhihu.com/p/133306648。
通过上图可以清楚看到,单片机要实现LCD的显示,主要是与驱动IC进行通信。想要进行通信,必须得知道是什么接口,这时候得看LCD模块给你引出什么接口,这是裸屏已经决定了。LCD接口可以大致分为三种:MCU接口、RGB接口与MIPI接口,具体区别如下:
屏幕篇—如何最快速驱动LCD屏

不同接口的屏幕支持的分辨率都不一样。我们这里主要讲解的是MCU屏—正点原子2.8寸LCD屏,该屏自带SRAM,驱动简单,大部分单片机都能驱动。其实还有一类是SPI接口的支持更小分辨率的屏幕。
为什么说裸屏已经决定了屏幕的接口,我们以正点原子的2.8寸屏为例,该屏的驱动IC是ILI9341,是支持多种通信接口:MCU接口(8/9/16/18位)、3/4线SPI接口、RGB接口(6/16/18位)。我们可以看一下ILI9341芯片框架图。
屏幕篇—如何最快速驱动LCD屏

通过手册查阅,可以发现IM[3:0]引脚可以选择接口,这就需要结合2.8寸LCD屏原理图进行查看了。
屏幕篇—如何最快速驱动LCD屏

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

简单来说,LCD屏(MCU接口)驱动的核心:驱动LCD驱动芯片。
这里我们就需要一些基本的LCD驱动知识:
① 8080时序,LCD驱动芯片一般使用8080时序控制,实现数据写入/读取。
② 初始化序列(数组),屏厂提供,用于初始化特定屏幕,不同屏幕厂家不完全相同!
③ 画点函数、读点函数(非必须),基于这两个函数可以实现各种绘图功能!
把上面的梳理一下,就是LCD驱动的一般过程了。屏幕篇—如何最快速驱动LCD屏

只要我们把每一步都了解清楚,就相当于掌握了LCD屏幕的驱动了。

第一步:掌握8080时序
8080时序,称为并口总线时序,常用于MCU屏驱动IC的访问,由Inter提出,也叫英特尔总线。
接下来,我们来看看LCD 8080时序信号的说明,具体如下表:
屏幕篇—如何最快速驱动LCD屏

简单来说,这里就是我们用来驱动LCD屏幕用到的引脚。在了解引脚的功能后,就可以通过查看手册的时序图,写出读写函数了。
8080写时序
屏幕篇—如何最快速驱动LCD屏

首先拉低CS线选中器件,然后根据写入的内容是数据(RS=1)还是命令(RS=1)进行拉低或拉高RS线,在WR的上升沿,把内容写入LCD驱动IC中,最后拉高CS线释放片选,而RD是读信号保持高电平即可。
屏幕篇—如何最快速驱动LCD屏

8080读时序
屏幕篇—如何最快速驱动LCD屏

首先拉低CS线选中器件,然后根据操作的内容是数据(RS=1)还是命令(RS=1)进行拉低或拉高RS线,在RD的上升沿,把内容读取到MCU,最后拉高CS线释放片选,而WR是写信号保持高电平即可。
屏幕篇—如何最快速驱动LCD屏

从这里可以知道,我们8080时序操作可分为写数据、写命令、读数据、读命令(没用到)四种。基于写数据,写命令就可以完成初始化LCD操作,也就是发送初始化序列。
第二步:掌握LCD驱动芯片的必用指令
LCD驱动芯片用于控制LCD的各种显示功能和效果,整体功能比较复杂,不过我们想要实现基本使用只需要6条指令即可。
屏幕篇—如何最快速驱动LCD屏

通常我们想验证一下我们的读写函数是否正确,看看能否读取到器件的ID。
屏幕篇—如何最快速驱动LCD屏

发送完0xD3指令后,后面跟了4个参数,最后2个参数才是有用的,读出的是0x93和0x41,刚好是我们控制器ILI9341数字部分。这里特别注意:不同芯片读取ID的指令是不一样的,不要张冠李戴。
指令0x36是存储访问控制指令,控制ILI9341存储器的读写方向。简单来说,就是在连续写GRAM的时候,可以控制GRAM指针的增长方向,从而控制显示方式(读GRAM也是一样)。
屏幕篇—如何最快速驱动LCD屏

发送完0x36指令后,紧跟一个参数,参数里的MX/MY/MV共同控制GRAM的扫描方向以及BGR控制RGB/BGR顺序。默认LCD扫描方向为从左到右,从上到下。
屏幕篇—如何最快速驱动LCD屏

当我们设置好LCD扫描方向后,显示内容时就有很大灵活性,只需要设置一次坐标,然后不停往LCD填充颜色数据即可,大大提高了显示速度。
设置坐标的指令分为X轴和Y轴,官方一点就是设置列地址指令和设置页地址设置指令。首先来看,0x2A即列地址设置指令。
屏幕篇—如何最快速驱动LCD屏

0x2A指令带有4个参数,这里就是2个坐标值SC和EC,也就是列地址的起始值和结束值。其实在设置x坐标时,我们可以只带2个参数即设置SC即可,因为EC没有变化时,我们只设置一次即可,从而提高了速度,不用每次都多发两次数据。
0x2B指令的用法跟0x2A很类似。
屏幕篇—如何最快速驱动LCD屏

0x2B指令也是带有4个参数,这里就是2个坐标值SP和EP,也就是页地址的起始值和结束值。其实在设置y坐标时,我们可以只带2个参数即设置SP即可,因为EP没有变化时,我们只设置一次即可,从而提高了速度,不用每次都多发两次数据。
0x2C指令是写GRAM指令,在发送该指令之后,便可以往LCD的GRAM里面写入颜色数据,并且该指令支持连续写即地址自增。
屏幕篇—如何最快速驱动LCD屏

当发送0x2C指令之后,数据线变为16位,可以开始写入GRAM数据,即把一个个像素点的颜色值写入。在默认扫描方向(从左到右,从上到下),设置好起始坐标后(0x2A设置SC,0x2B设置SP),每写入一个颜色值,GRAM地址将会自动自增1(SC++),如果碰到EC,则回到SC,同时SP++,一直到坐标(EC,EP)结束,期间不需要再次设置坐标,大大提高了写入速度。
当我们只需要实现画点操作时,以上指令学习已经够了,不过在GUI使用的时候,还是会经常用到读点,也就是0x2E指令。
0x2E指令是读GRAM指令,在发送该指令之后,便可以读取GRAM的数据。
屏幕篇—如何最快速驱动LCD屏

当ILI9341收到0x2E指令后,第一次输出的是dummy数据,也就是无效数据,从第二次开始,读取的才是有效的GRAM数据(需要通过0x2A和0x2B设置位置),输出规律如上图:R1G1B1R2G2B2R3G3…。如果我们只需要读取一个点的颜色值,只需要接收到参数3即可;连续读取的话,就按上述规律去接收即可。
在这里,我们已经算是把需要了解的各部分都了解到了。接下来,我们就要把这一块一块零散的知识串一起,也就是我们的LCD最基本驱动步骤。
1、确定IO连接关系(通过LCD模块原理图,开发板液晶接口原理图查看)
2、初始化IO口(初始化连接LCD的各个IO口)
3、编写8080接口函数(写数据、写命令、读数据)
4、编写LCD初始化函数(完成初始化序列配置,设置扫描方向,设置EP/EC,点亮背光)
5、编写LCD画点函数(实现LCD任意位置画点)
后面就是对源码的讲解了,而这一部分我想让大家静下心来,看着附件工程进行理解,这样子对知识的理解才更加透彻。后面也跟大家分享如何使用FSMC模拟8080时序驱动LCD屏幕。文章来源地址https://www.toymoban.com/news/detail-400903.html

到了这里,关于屏幕篇—如何最快速驱动LCD屏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32驱动st7789 TFT-LCD屏幕显示

    一切程序以最后百度网盘链接的程序为准,可能在写文章的时候有些地方有改动。 主控:STM32F103C8T6 1.69 TFT-LCD(st7789驱动) 1.1接线说明 1.2硬件初始化 TFT-LCD是采用SPI通信的,这里使用stm32f103c8t6的SPI1,初始化代码如下 1.3驱动初始化 在原有的驱动基础上增加了几个宏去控制显

    2024年02月16日
    浏览(52)
  • STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 屏幕引脚配置 2.3 项目生成  3、KEIL端程序整合 3.1 LCD驱动添加 3.2 函数修改 3.2.1 lcd.h修改 3.2.2 lcd_innit.h 修改  3.2.3 lcd.c修改  3.2.4 lcd_inut.c修改  3.3 主函数代码 3.3.1 添加头文件 3.3.2 LCD进行初始化

    2024年02月16日
    浏览(45)
  • stm32 hal库硬件spi(软件spi)驱动1.8寸tft—lcd屏幕

    屏幕是嵌入式开发中的一个重要的部分,cdsn上有许多解释原理的,还有很多是采用正点原子的屏幕来驱动的,对于刚刚入门不久的我们可能没有资金去购买较为昂贵的屏幕。而对于底层原理我们暂时也不必了解的那么深入,能点亮屏幕就是我们最大的快乐。 除了中景园的资

    2024年02月03日
    浏览(53)
  • 荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示bmp图片

    了解 framebuffer 字符设备 了解 bmp图片格式 通过操作 /dev/fb0 字符设备来实现在 RGB LCD 屏幕上显示 bmp 图片。 显示设备例如 LCD,在 Linux 中用 Framebuffer 来表征, Framebuffer 翻译过来就是帧缓冲,简称 fb,在 /dev 目录下显示设备一般表示成这样: /dev/fbn ,应用程序通过访问这个设备

    2024年02月11日
    浏览(42)
  • 单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕

    说明:此篇为学习记录。可能存在错误或者不足。如有问题请指出。 主控芯片:STM32F411CEU6 主控开发板:WeAct STM32F411CEU6最小系统板 TFT-LCD屏幕:合宙1.8寸TFT-LCD,驱动为ST7735s MDK版本:5,32 HAL库版本:1.27.1 STM32CubeMX版本:6.7.0 ST7735s支持8080并口,3线和4线串行接口,模块的驱动方

    2024年02月03日
    浏览(59)
  • 【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    ✨虽然STM32CubeIDE也是基于HAL库,但是还是不能直接转Keil MDK工程,本驱动案例从GitHub下载来的,原始工程使用的是较老版本的STM32CubeIDE配置的,没法在继续在新版本上程序配置,工程只是做了初始化配置。程序并不能直接被点亮,重新配置了lcd初始化函数以及复位函数后,才

    2024年02月12日
    浏览(41)
  • STM32F1基于STM32CubeMX配置硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕

    📌相关篇《【STM32CubeIDE】STM32F103硬件SPI驱动1.8寸TFT LCD128X160 ST7735S屏幕》 ✨驱动效果就不做演示了,和上面的相关篇一样,主要是为了方便使用MDK Keil开发的使用。所以花了点时间从上面的工程当中做了分离,重新使用STM32CubeMX配置一个方便二次开发移植使用和配置的工程。本

    2024年02月03日
    浏览(50)
  • LCD屏幕汉字及图形显示

    目录 软件准备 1. PCtoLCD2002 2. Img2Lcd 3. 下载地址 中文取模 1. 打开PCtoLCD2002 2. 选择模式 - 字符模式 3. 点击选项,进行设置 4. 设置如下,点阵内的数字手动输入999,然后点击确定。 5. 生成汉字数组(以12x12大小的汉字为例)  6. 在程序中使用 图形取模  1.  利用image2lcd软件将图

    2024年02月02日
    浏览(23)
  • TFT-LCD屏幕显示图片

    TFT_LCD显示图片时,图片大小选择要适配屏幕大小,如果要竖屏显示的话,则屏幕宽x高为240x320,所以图片也要找240x320的, 如果是横屏显示,则屏幕宽x高为320x240,所以图片也要找320x240的 图片取模软件 —— Image2Lcd v2.9 因为本次实验是竖屏显示,所以先在网上找一张240x320的图

    2024年02月02日
    浏览(41)
  • LCD1602屏幕简介(全网最详细教程)

    目录 1.接线说明 2.LCD1602显示原理 3.LCD1602时序分析 4.LCD1602显示一个字符  5.LCD1602显示一行 第1引脚:GND为电源地 第2引脚:VCC接5V电源正极 第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通

    2024年01月21日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包