目录
LCD读ID指令(0XDA00、0XDB00 和 0XDC00)
TFTLCD简介
TFTLCD即薄膜晶体管液晶显示器。它与无源TNLCD, STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。
TFTLCD具有:亮度好、对比度高、层次感强、颜色鲜艳等特点。是目前最主流的LCD显示器。广泛应用于电视、手机、电脑、平板等各种电子产品。
ALINETEK TFTLCD模块介绍
ALIENTEK提供丰富的TFTLCD模块型号,供大家选择,目前有以下型号可选:
1, ATK-2.8寸 TFTLCD模块分辨率:240*320,驱动IC: ILI9341,电阻触摸屏,16位并口驱动
2, ATK-3. 5寸 TFTLCD模块分辨率: 320*480,驱动IC: NT35310,电阻触摸屏,16位并口驱动
3, ATK-4.3寸TFTLCD模块分辨率: 480*800,驱动IC: NT35510,电容触摸屏, 16位并口驱动
4, ATK-7寸 TFTLCD模块(V1版本)分辨率: 480*800,驱动IC: CPLD+SDRAM,电容触摸屏,16位并口驱动
5, ATK-7寸TFTLCD模块(V2版本)分辨率: 480*800,驱动IC: SSD1963,电容触摸屏,8/9/12/16位并口驱动
ATK-4.3寸TFTLCD模块特点:
高分辨率: 800*480,显示更清晰细腻;
自带驱动,无需外加驱动器,单片机直接使用;
速度超快,理论上最高刷屏速度可达78.9帧/秒;
采用电容触摸屏,最大支持5点同时触摸,操控效果佳;
板载背光电路,只需要3.3V&5V供电即可,无需外加高压;
接口简单(LCD采用16位8080并口,触摸屏采用IIC接口),使用方便:
ATK-4.3寸TFTLCD模块硬件连接图
模块的8080并口读/写的过程为:先根据要写入/读取的数据的类型,设置RS为高(数据)/低(命令),然后拉低片选,选中屏幕,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:
1.读数据:在RD的上升沿,读取数据线上的数据(D[15:0])
2写数据:在WR的上升沿,使数据写入到屏幕里面
从上表可以看出,模块的写周期是非常快的,只需要 33ns 即可,理论上最大速度可以
达到:3030W 像素每秒,即刷屏速度可以达到每秒钟 78.9 帧。模块的读取速度相对较慢:
读 ID(RD(ID))周期是160ns,读显存周期是 400ns(RD(FM))。
TFTLCD驱动流程
1.先要对LCD硬件复位
2.初始化序列这是厂家提供的,不同的厂家有不同的初始化序列
3.如果要画点就是先设置坐标,然后写GRAM指令,写入颜色,LCD显示
4.如果要读点就是先设置坐标,然后读GRAM指令,读出颜色,单片机处理
RGB565格式说明
模块对外接口采用16位并口,颜色深度为16位,格式为RGB565,关系如下图:
16 位数据中,最低 5 位代表蓝色,中间 6 位为绿色,最高 5 位为红色。数值越 大,表示该颜色越深。另外,特别注意 NT35510 的指令是 16 位宽,数据除了 GRAM 读写 的时候是 16 位宽,其他都是 8 位宽的(高 8 位无效)。
LCD读ID指令(0XDA00、0XDB00 和 0XDC00)
这三条指令是读 ID1,ID2,ID3 指令,也就是用于读取 LCD 控制器的 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。
存储访问控制指令0x3600
这是存储访问控制指令,可以控制NT35510存储器的读写方向,简单的说,就是在连续写GRAM的时候,可以控制GRAM指针的增长方向,从而控制显示方式(读GRAM也是一样)
从上表可以看出,0X3600 指令后面,紧跟一个参数,这里我们主要关注:MY、MX、
MV 这三个位,通过这三个位的设置,我们可以控制整个NT35510的全部扫描方向。
这样,我们在利用NT35510显示内容的时候,就有很大灵活性了,如果设置 LCD 扫描方向为从左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往LCD填充颜色数据即可,这样可以大大提高显示速度。
列地址设置指令0X2A00~0X2A03
这几个是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置横坐标(x 坐标)
页地址设置指令0X2B00~0X2B03
在默认扫描方式时,这4个指令用于设置 y 坐标,每条指令带有1个参数,实际上总共就是2个坐标值:SP 和EP(SP 和 EP都是16位的,由2个8位组成)即页地址的起始值和结束值,SP 必须小于等于 EP,且 0≤SP/EP≤799。一般在设置 y 坐标的时候,我们只需要带0X2B00 和 0X2B01 两条指令即可,也就是设置 SP 即可,因为如果EP没有变化,我们只需要设置一次即可(在初始化 NT35510 的时候设置),从而提高速度。
写 GRAM 指令0X2C00
该指令是写 GRAM 指令,在发送该指令之后,我们便可以往LCD的GRAM里面写入颜色数据了,该指令支持连续写。
从上表可知,在收到指令0X2C00之后,数据有效位宽变为16位,我们可以连续写入 LCD GRAM 值,而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。例如:假设设置的是从左到右,从上到下的扫描方式,那么设置好起始坐标(通过SC,SP设置)后,每写入一个颜色值,GRAM地址将会自动自增 1(SC++),如果碰到EC,则回到SC,同时SP++,一直到坐标:EC,EP结束,其间无需再次设置的坐标,从而大大提高写入速度。
读 GRAM 指令0X2E00
该指令是读 GRAM 指令,用于读取NT35510的显存(GRAM)
NT35510 在收到该指令后,第一次输出的是dummy 数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标:SC,SP 开始)输出规律为:每个颜色分量占8个位,一次输出2个颜色分量。比如:第 一次输出是R1G1,随后的规律为B1R2→G2B2→R3G3→B3R4→G4B4→R5G5... 以此类推。 如果我们只需要读取一个点的颜色值,那么只需要接收到参数 3 即可,如果要连续读取(利用GRAM地址自增,方法同上),那么就按照上述规律去接收颜色数据。R1G1B1代表同一个像素点。