[整理].ILI9325 TFT驱动中文资料
整理自 weif40423p的帖子:TFT 9325驱动学习(版权系ourdev和weif40423p共同所有)
TFT 9325驱动学习
1、寄存器 03H
AM : 控制GRAM更新方向的控制位
AM = 0: 在水平方向更新地址
AM = 1: 在垂直方向更新地址
这个地方对AM的选择将直接影响img2lcd软件的扫描方式控制项,这一位就是控制扫描方式的。
I/D[1:0] : 当更新显示区域的一个像素点的时候,控制AC是增加1还是减少1,具体参考下图
I/D[1:0] 的正确设置才能正确的显示图片,比如有时候发现显示出来的图片和输入img2lcd的图片方向是左右方向是反的,或者上下 或者都是反的,那就是
需要修改这个的地方了,可以根据上面的方向来选择合适的I/D.
ORG : 当一个窗口的地址区域确定以后,根据上面I/D的设置,来移动原始地址。当高速写窗口地址域时,这个功能将被使能。
ORG = 0: 原始地址是不移动的。这种情况下,是通过指定地址来启动写操作的,这个地址是根据窗口显示区域的GRAM的地址表。
ORG = 1:原始地址是更加I/D的设置相应的移动的。
注意:1、当ORG =1 的时候,设置R20H,R21H,的原始地址的时候,只能设置0x0000
2、在RAM读操作时,要保证ORG = 0;
BGR 交换写数据中红和蓝
BGR = 0 : 根据RGB顺序写像素点的数据。
BGR = 1: 交换RGB数据为BGR,写入GRAM
TRI: 当TRI = 1的时候,在8位数据模式下是以 8bit * 3传输的,也就是传输三个字节到内部的RAM,同样也支持16位数据的模式,和使用SPI模式显示26万色,也就是说当RTI = 1 的时候,传输的字节数基本上都是三个。这一位在显示26万色的时候有用的,或者使用8位数据接口的时候,这个要看具体的应用来设置,但是注意如果不需要的时候,要设置为0.
DFI : 设置像内部RAM传输数据的的模式。这一位是要和TRI联合起来使用的。具体的参看下图。
2、寄存器 R04
寄存器图如下
RSZ[1:0] : 设置调整参数(RSZ的意思就是resizeing)
当设置了RSZ后,ILI9325将会根据RSZ设置的参数来调整图片的大小,这个时候水平和垂直方向的区域都会改变。
根据上图,我们可以知道,设置RSZ相应的值就可以缩小为 1/(RSZ[1:0] - 1)。
RCH[1:0]: 当调整图像大小的时候设置水平余下的像素点的个数。实际上就是拿当前的图像的水平像素个数和缩小后水平像素个数取模,原因是由于你的图像不可能正好能被缩小1/2,或者1/4,比如你的图像水平像素点是15个,如果需要缩小为1/2,但是15除以2是有余数的,余数为1,RCH[1:0]这个时候就设置为1,实际上就是保证你的原始图像水平减去几个像素点正好能被RSZ除尽。
RCV[1:0]:同上面的RCH原理是一样的,这个是来保证垂直方向上减去几个像素点正好能被RSZ除尽。
在这里我把后面的要讲的东西提到这里。
怎么调整图像?
首先我们在显示的时候屏的坐标原点要确定,是左上角为(0,0),如下图。X = 240 ,Y = 320.
所以显示图像的时候应该是这样的。
当然我们也可以旋转一下角度,但是注意 X Y 和原点的位置,这样看可能更符合我们的思维方式,因为数学上大部分都是这样画的。
扯了半天好像没有在正题上,普及一下知识,怕刚刚接触的不知道,反正我开始的时候真不知道。弄了好久才明白的。生性愚钝,人品不好啊!
下面我们以调整为1/2为例,要注意一下,调整图像是9325自己调整的,但是你仍然需要把原始图像的数据全部写入到9325,只不过是9325不一定全部把数据都写入内部的GRAM,而是根据调整因子有选择的把原始图像的数据写入GRAM。如下图所示
从上图可以看到9325在进行1/2调整的时候,行列上都是隔行或列取数据,同理可以推导1/4调整。
下面以一副猫的图像显示为例
调整大小的时候,需要注意设置起始水平和垂直方向的起始地址和结束地址。这个时候设置水平和垂直方向的起始地址和结束地址是为了控制显示区域,起始地址和结束地址是在整个屏上的地址,比如你想把缩小一半的图片,大小比如为120 * 160 显示到(100,100)这个点上,起始地址都要设置为100,水平结束地址设置为219,垂直结束地址为259,这样就不会把图片写过头,也就是用水平和垂直起始和结束地址控制显示区域。这样你写图片的数据的时候9325就不会写到其他的地方,也就是限定了更新数据在屏上的区域范围。还要记得设置R20H,R21H,这两个值就确定了你写的数据更新开始的坐标,也就是通过R20H和R21H确定的坐标点那个地方开始更新数据,更新数据的范围是上面水平和垂直方向的起始地址和结束地址确定的。注意R20H和R21H确定的坐标点一定要在现实的区域内,否则图片是不能显示的。比如你可以吧R20H和R21H设置为100,但是如果设置为99,坐标点(99,99)不在我们刚刚确定的区域内,所以图片就不能显示。
img2lcd取模
以这下图为例,这个是我在img2lcd中取模时候的设置。
从上面img2lcd的设置可以知道,扫描方式是垂直扫描,可以知道,R03H中的 AM = 1,这个是需要注意的地方。
1) I/D[1:0] = 00 时,
配置代码如下
最终显示出来的结果如下,这个对图像进行了1/2调整,由于是晚上拍的,在加上手机拍的,质量不是太好,图像我想显示在以(10,50)为起点,(119,209)位为终点的范围内。
大家仔细的看图像,虽然有点不清楚,但是应该可以看到图片和img2lcd中的图像是左右相反的,看腿的方向就知道了。这个原因是为什么呢?
我解释一下
从I/D的设置上可以看出来垂直方向上是递减的,所以垂直方向的坐标点应该定到图像的最高点,并且从AM =1 ,I/D = 00来看水平坐标是增大的,所以水平坐标应该是起点的位置
同理其他的也就是这么推导出来的