我们采用LCD模块为显尚光电的DST2001PH TFTLCD,它的控制器为ILI9320,
它采用26万色的TFT屏,分辨率为320×240,采用16位的80并口与外部连接。
该模块的80并口有如下一些信号线:
CS/PC9:TFTLCD片选信号。 片选拉低时,表示选中。
RS/PC8:命令/数据标志(0,读写命令;1,读写数据)。
WR/PC7:向 TFTLCD写入数据。在WR的上升沿,使数据写入到LCD芯片里;
RD/PC6:从 TFTLCD读取数据。 在RD的上升沿,使数据锁存到数据线上;
D[15:0]:16位双向数据线。
RST:硬复位TFTLCD。
RST信号线,是直接接到 STM32的复位脚上,并不由软件控制,这样可以省下来一个IO端口。
另外,还需要一个背光控制线来制TFTLCD的背光。所以,总共需要的IO口数目为21个。
控制器自带显存,其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。
模块的16位数据线与显寸的对应关系为565方式,如下图所示:
最低5位代表蓝色,中间6位为绿色,最高5位为红色。数值越大,表示该颜色越深。
接下来,介绍一下ILI9320的几个重要命令,因为ILI9320的命令很多,不可能一一介绍。
有兴趣的大家可以找到ILI9320的Datasheet看看,里面对这些命令有详细的介绍。
这里我们要介绍的命令列表如下:
R0,这个命令,有两个功能,如果对它写,则最低位为 OSC,用于开启或关闭振荡器。而如果对它读操作,则返回的是控制器的型号。
R3,入口模式命令。我们重点关注的是 I/D0、I/D1、AM 这 3 个位,因为这 3 个位控制了屏幕的显示方向。
AM:控制 GRAM 更新方向。当 AM=0 的时候,地址以行方向更新。当 AM=1 的时候,地址以列方向更新。
I/D[1:0]:当更新了一个数据之后,根据这两个位的设置来控制行地址和列地址计数器自减或自增。
R7,显示控制命令。该命令 CL 位用来控制是 8 位彩色,还是 26 万色。为 0 时 26 万色,为 1 时八位色。D1、D0、BASEE 这三个位用来控制显示开关与否的。当全部设置为 1 的时候开启显示,全 0 是关闭。我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。
R32,R33,设置 GRAM 的行地址和列地址。R32 用于设置列地址(X 坐标,0~239),R33 用于设置行地址(Y坐标,0~319)。当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了。
R34,写数据到 GRAM 命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数。
R80~R83,行列 GRAM 地址位置设置。这几个命令用于设定你显示区域的大小,我们整个屏的大小为 240*320,但是有时候我们只需要在其中的一部分区域写入数据,如果用先写坐标,后写数据这样的方式来实现,则速度大打折扣。此时我们就可以通过这几个命令,在其中开辟一个区域,然后不停的丢数据,地址计数器就会根据 R3 的设置自动增加/减少,这样就不需要频繁的写地址了,大大提高了刷新的速度。
TFTLCD显示需要的相关设置步骤如下:
1)设置STM32与TFTLCD模块相连接的IO端口。
这一步,先将我们与TFTLCD模块相连的IO端口设置为输出,具体使用哪些IO端口,需要根据连接电路以及TFTLCD模块的设置来确定。
2)初始化TFTLCD模块。
通过向 TFTLCD写入一系列的设置,来启动TFTLCD的显示。为后续显示字符和数字做准备。
3)通过函数将字符和数字显示到TFTLCD模块上。
这里就是通过我们设计的程序,将要显示的字符送到TFTLCD模块就可以了。