TFTLCD 16位并口屏幕驱动
工作中LCD OLED是经常用到的,恰巧手里STM32F103ZET6开发板有个TFTLCD 2.8寸屏16位并口屏幕接下来我通过FSMC来驱动。
原理图
CS: TFTLCD 片选信号。
WR:向 TFTLCD 写入数据。
RD:从 TFTLCD 读取数据。
D[15: 0]: 16 位双向数据线。
RST:硬复位 TFTLCD。
RS:命令/数据标志(0,读写命令; 1,读写数据)。
T开头是触摸屏用的暂不解释
注意:
1.写数据,RS管脚高电平写数据,片选CS管脚拉低, WR上升沿去读取0-15位数据。
2.读数据,RS管脚高电平写数据,片选CS管脚拉低, RD上升沿去读取0-15位数据。
驱动流程
1.硬复位 拉低 LCD_RST 等待100ms 然后拉高。
2.初始化序列去读屏幕ID。
3.向ILI9341写指令写数据画图,或者读指令读当前屏幕数据单片机处理。
ILI9341
液晶屏幕是通过这个芯片来驱动的所以先了解下他的特性。
ILI9341 液晶控制器自带显存,其显存总大小为 172800(24032018/8),即 18 位模式(26
万色)下的显存量。在 16 位模式下, ILI9341 采用 RGB565 格式存储颜色数据。
RGB565就是指红色5bit控制 绿色6bit控制 蓝色5bit。
控制命令
0XD3:这个是读 ID4 指令,用于读取 LCD 控制器的 ID。通过读ID进行初始化。
0X36:这是存储访问控制指令,可以控制 ILI9341 存储器的读写方向,简
单的说,就是在连续写 GRAM 的时候,可以控制 GRAM 指针的增长方向,从而控制显示方式。
其中最重要的是 MY、MX、MV、三个位,通过这三个位的设置,我们可以控制整个 ILI9341 的全部扫描方向,
例如:MY,MX,MV为0时从0.0坐标开始画点依次0.1 ,0.2,0.3… 0.239向下画点1.0.,1.1…1.239。以此类推画点。
0X2C:该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD的 GRAM 里面写入颜色数据了,该指令支持连续写。
0X2E:该指令是读 GRAM 指令,用于读取 ILI9341 的显存(GRAM),该指令在 ILI9341 的数据手册上面的描述是有误的。
ILI9341 在收到该指令后,第一次输出的是dummy 数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标:SC, SP 开始),输出规律为:每个颜色分量占 8 个位,一次输出 2 个颜色分量。比如:第一次输出是 R1G1,随后的规律为: B1R2G2B2R3G3B3R4G4B4R5G5… 以此类推。如果我们只需要读取一个点的颜色值,那么只需要接收到参数 3 即可,如果要连续读取(利用 GRAM
地址自增,方法同上),那么就按照上述规律去接收颜色数据。
以上指令我们就可以通过单片机驱动ILI9341从而进行屏幕数据显示读取了。
ILI9341时序与FSMC的驱动
软件实现
未完待续。。。。