TFTLCD的关键指令以及硬件连接

LCD的硬件连接

从图中可以看出来,LCD的16位数据线由D[15:11],D[10:5],D[4:0]组成。与MCU的D[15:0]数据线一一对应。我们会有疑问:NT35510的24位RGB色如何转化成16位的RGB色呢?

  1. 将8位R值右移3位,变为了5位;
  2. 8位G值右移2位,变成了6位;
  3. 8位B值右移3位,变成了5位;

通过此种转换,我们最后就得到了对应的16位RGB色彩:RRRRRGGGGGGBBBBB。

特别注意NT35510的指令是16位宽,数据除了GRAM读写的时候是16位宽,其他都是8位有效宽度的(最然是16位,但是高8位无效),这个和ILI9320等驱动器不一样,必须加以注意。

几个重要的NT35510的指令

  1. 读ID指令

NT35510的ID有3个字节,我们需要读三次才可以完成读ID操作,ID由上述三部分组成:

  1. 模块制造商的ID;
  2. 模块驱动版本的ID;
  3. 模块的ID;

从上表可以看出,LCD读ID,总共由3个指令(0XDA00、0XDB00和0XDC00)构成,每个指令输出一个参数,每个ID以8位数据(即指令后的参数)的形式输出(高8位固定为0),不过这里输出的ID,并不包含5510这样的字样,仅有指令0XDB00会输出ID:0X80,其他两个指令读到的ID都是0。将3个指令的输出,组合在一起,可以得到NT35510的ID为:0X8000。

通过这个ID,即可判别所用的LCD驱动器是什么型号,这样,我们的代码,就可以根据控制器的型号去执行对应驱动IC的初始化代码,从而兼容不同驱动IC的屏,使得一个代码支持多款LCD。

  1. 存储器访问指令:0X3600

可以控制NT35510存储器的读写方向,简单的说,就是在连续写GRAM的时候,可以控制GRAM指针的增长方向,从而控制显示方式(读GRAM也是一样)。除了读写存储器的方向,该寄存器也可以控制GRAM扫描刷新的方向。

返回参数含义如下:

表格1

参数名称

参数含义

MY

这3位控制接口到内存的写入/读取方向。图案更改后立即显示。

MX

MV

ML

控制TFTLCD的垂直刷新方向

RGB

控制R,G,B的排列顺序,0(RGB)/1(BGR)

MH

水平刷新方向

RSMX

左右反转图像(高电平有效)

RSMY

上下反转图像(高电平有效)

  1. MH控制效果:

  1. ML控制效果:

  1. MY,MX,MV控制效果:

这个参数到底有什么用呢?我们在显示一张方形图片时,图片的填充肯定按照一定方向,就例如BMP图像,解码BMP(显示BMP)就是从图片的左下角开始,慢慢显示到右上角,如果设置LCD扫描方向为从左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往LCD填充颜色数据即可,这样可以大大提高显示速度。如下所示为MX,MY,MV的全部组合:

图中的关键参数及其含义如下:

表格2

参数名称

说明

H/WPosition

硬件初始地址

X,Yaddress

X,Y坐标轴的坐标原点,即像素点开始扫描写入的起始点(软件初始地址)

CASET(columnaxisset)

行初始扫描坐标设置

RASET(rowaxisset)

列初始扫描坐标设置

  1. 列地址设置:0X2A00~0X2A03

我们的4.3寸LCD的分辨率为480*800,因此根据NT35510给出的X,Y轴坐标的限制,X,Y坐标取值范围如下:

参数读写如下所示:

图中,1st,2nd,3rd,4th分别表示接下来所要输入的4个参数,正好是4个指令对应4个输入参数,对应关系如下:

在默认扫描方式时,这4个指令用于设置x坐标,每条指令带有1个参数,实际上总共就是2个坐标值:SC和EC(SC和EC都是16位的,由2个8位组成),即列地址的起始值和结束值,SC必须小于等于EC,且0≤SC/EC≤479。一般在设置x坐标的时候,我们只需要0X2A00和0X2A01两条指令即可,也就是设置SC即可,因为如果EC没有变化,我们只需要设置一次即可(在初始化NT35510的时候设置),从而提高速度。

设置后,坐标自增的效果如下所示:

  1. 行地址设置:0X2B00~0X2B03

我们的4.3寸LCD的分辨率为480*800,因此根据NT35510给出的X,Y轴坐标的限制,X,Y坐标取值范围如下:

参数读写如下所示:

图中,1st,2nd,3rd,4th分别表示接下来所要输入的4个参数,正好是4个指令对应4个输入参数,对应关系如下:

在默认扫描方式时,这4个指令用于设置y坐标,每条指令带有1个参数(这一点与ILI9341不同),实际上总共就是2个坐标值:SP和EP(SP和EP都是16位的,由2个8位组成),即页地址的起始值和结束值,SP必须小于等于EP,且0≤SP/EP≤799。一般在设置y坐标的时候,我们只需要带0X2B00和0X2B01两条指令即可,也就是设置SP即可,因为如果EP没有变化,我们只需要设置一次即可(在初始化NT35510的时候设置),从而提高速度。

设置后,坐标自增的效果如下所示:

  1. 在指定坐标位置填充颜色:0X2C00

当我们输入指令0X2C00之后,我们可以肆无忌惮地输入颜色数据,GRAM会按照我们既定好的扫描顺序对颜色点进行填充。当达到(Xmax,Ymax)时,GRAM会回到(X=0,Y=0)重新进行自增并进行颜色填充操作。

其实我们可以将3,4,5布看作一整个配置步骤,总的配置流程如下:

RAWAR是“RAMWrite”的缩写。

第一步:先配置颜色自增时的X轴的上下界;

第二步:然后,配置颜色自增时的Y轴的上下界;

第三步:最后,当我们不断写入RGB565的数据,GRAM会按照我们配置的既定自增方式进行颜色填充。其中,16位颜色数据=5位R+6位G+5位B。

  1. 从GRAM中读取颜色点信息的指令:0X2E00

除了写GRAM的颜色数据时使用的是16位有效数据,其他全为8位有效(虽然是16位数据,但高8位无效)数据。因此,我们需要将我们读取出来的8位有效数据进行整理,最后得出RGB565的16位数据。

配置流程如下:

我们知道NT35510是24位的,即RGB=8+8+8,但是存储在帧存储器中的D[23:0]数据不可以一下子送出来只能半字半字的从16位并行数据线中传输出来。像如下图所示的那样:

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

4.3寸TFTLCD之NT35510关键指令解析相关推荐

  1. STM32 利用cubemx配置正点原子4.3寸TFT-LCD 驱动芯片NT35510

    主控芯片是STM32F103ZET6 利用CUBEMX配置可以省去初始化函数中的初始化GPIO.FSMC和时钟等步骤 原理图 4.3寸的也是通用的 # CUBEMX配置 特别注意,除了配置这些外,还要 ...

  2. OllyDbg笔记-寄存器以及各种关键指令解析(含简单程序破解)

    目录 基本概念 代码与实例 基本概念 CPU中的9个寄存器: EAX:扩展累加寄存器 EBX:扩展基址寄存器 ECX:扩展计数寄存器 EDX:扩展数据寄存器 ESI:扩展来源寄存器 EDI:扩展目标寄 ...

  3. STM32学习笔记(13)通过FSMC控制TFTLCD(NT35510芯片)

    文章目录 TFTLCD简介 颜色相关 NT35510常用指令 0xDA00~0xDC00 0x3600 0x2A00~0x2A03 0x2B00~0x2B03 0x2C00 0x2E00 数据传输 使 ...

  4. STM32F103ZET6:CubeMX配置FSMC接口驱动SSD1963-7寸 TFTLCD

    配置方法 FSMC接口驱动SSD1963-7寸 TFTLCD 芯片:STM32F103ZET6 引脚: LCD_RS----PF0(FSMC_A0) LCD_CS----PG12(FSMC_NE4) ...

  5. 物联网开发笔记(63)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:显示中文

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程的第一步:显示中文. 二.环境 ESP32 + 3.2寸 ILI9341触 ...

  6. 物联网开发笔记(62)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:环境搭建

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程的第一步:环境搭建. 关键字:3.2寸SPI串口TFT液晶显示屏模块 IL ...

  7. 物联网开发笔记(64)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示. 二.环境 ESP32 + ILI9341 3.2寸TFT-L ...

  8. 解读乐鑫 AT 指令解析器,解锁你不知道的用法

    文章首发于 『物联网学前班』公众号,欢迎关注.星标获取即时信息. 由于近期正好在做这个事情,所以今天就以乐鑫的 AT 指令为例,讲讲 AT 解析器设计有哪些事情,也算是个自己近期的学习总结了. 往期文 ...

  9. 记: 对于SCPI指令以及相同类型指令解析器的指令压缩方式

    0x10 前言 SCPI是一个对人或者说用户十分友好的语言,采用了人性化的抽象与对于用户很友善的组成方式. 但是对于某些机器的设计就会很难受,而且当前的机器会在日后的不停更新导致当前的程序越来越呈现一 ...

最新文章

  1. fork/join 并行编程
  2. 源码解读:KubeVela 是如何将 appfile 转换为 K8s 特定资源对象的
  3. T T[] toArray(T[] a);
  4. AngularJS:应用
  5. linux环境下远程访问ftp
  6. 【高并发】JUC中的Executor框架详解2
  7. PAT1070. 结绳
  8. SPA(单页面应用)和MPA(多页面应用)
  9. Android应用开发提高篇(1)-----获取本地IP
  10. IOS:static和extern的使用
  11. 计算机相关技术汇报ppt模板,计算机硕士开题报告ppt模板.doc
  12. ImageAI训练自定义数据总结
  13. cadz轴归零命令_cadz轴归零(cad全部z轴归零)
  14. 基于Transformer的时空融合网络地铁客流预测模型
  15. Bing 必应突然不能用了(2021 年 17 日最新情况),怎么办?问题已解决
  16. 详解:淘宝大秒杀系统是如何设计的?
  17. Echarts实现图表下钻
  18. QC新旧七图汇总连载9——亲和图
  19. StoneDB完成华为鲲鹏国产处理器适配认证!
  20. Python实现图像去噪(中值去噪和均值去噪)

热门文章

  1. iOS RAC 的使用总结 (转载)
  2. 空调负荷需求响应matlab
  3. 要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9) 也不相同,每个字符串长度为10;
  4. Android自定义View初探(二)——仿360垃圾清理
  5. 关于Android Camera的曝光补偿(Exposure Compensation)
  6. QQ号码存在双主号被要求输验证码解决方法
  7. C语言数字图像处理进阶---13 Ins1977滤镜
  8. 【MATLAB】数值计算:计算黄金分割比的N种方法
  9. 大型圆弧怎么处理_大型弧形墙施工方法
  10. GJB 5000B与GJB 5000A的区别