i3 9100 win7驱动 ili9341驱动( 二 )


文章插图
8080读时序

i3 9100 win7驱动 ili9341驱动

文章插图
首先拉低CS线选中器件,然后根据操作的内容是数据(RS=1)还是命令(RS=1)进行拉低或拉高RS线,在RD的上升沿,把内容读取到MCU,最后拉高CS线释放片选,而WR是写信号保持高电平即可 。
从这里可以知道,我们8080时序操作可分为写数据、写命令、读数据、读命令(没用到)四种 。基于写数据,写命令就可以完成初始化LCD操作,也就是发送初始化序列 。
二.掌握芯片的必用指令
LCD驱动芯片用于控制LCD的各种显示功能和效果,整体功能比较复杂,不过我们想要实现基本使用只需要6条指令即可 。
通常我们想验证一下我们的读写函数是否正确,看看能否读取到器件的ID 。
发送完0xD3指令后,后面跟了4个参数,最后2个参数才是有用的,读出的是0x93和0x41,刚好是我们控制器ILI9341数字部分 。这里特别注意:不同芯片读取ID的指令是不一样的,不要张冠李戴 。
指令0x36是存储访问控制指令,控制ILI9341存储器的读写方向 。简单来说,就是在连续写GRAM的时候,可以控制GRAM指针的增长方向,从而控制显示方式(读GRAM也是一样) 。
发送完0x36指令后,紧跟一个参数,参数里的MX/MY/MV共同控制GRAM的扫描方向以及BGR控制RGB/BGR顺序 。默认LCD扫描方向为从左到右,从上到下 。
当我们设置好LCD扫描方向后,显示内容时就有很大灵活性,只需要设置一次坐标,然后不停往LCD填充颜色数据即可,大大提高了显示速度 。
设置坐标的指令分为X轴和Y轴,官方一点就是设置列地址指令和设置页地址设置指令 。首先来看,0x2A即列地址设置指令 。
0x2A指令带有4个参数,这里就是2个坐标值SC和EC,也就是列地址的起始值和结束值 。其实在设置x坐标时,我们可以只带2个参数即设置SC即可,因为EC没有变化时,我们只设置一次即可,从而提高了速度,不用每次都多发两次数据 。
0x2B指令的用法跟0x2A很类似 。
0x2B指令也是带有4个参数,这里就是2个坐标值SP和EP,也就是页地址的起始值和结束值 。其实在设置y坐标时,我们可以只带2个参数即设置SP即可,因为EP没有变化时,我们只设置一次即可,从而提高了速度,不用每次都多发两次数据 。
0x2C指令是写GRAM指令,在发送该指令之后,便可以往LCD的GRAM里面写入颜色数据,并且该指令支持连续写即地址自增 。
当发送0x2C指令之后,数据线变为16位,可以开始写入GRAM数据,即把一个个像素点的颜色值写入 。在默认扫描方向(从左到右,从上到下),设置好起始坐标后(0x2A设置SC,0x2B设置SP),每写入一个颜色值,GRAM地址将会自动自增1(SC++),如果碰到EC,则回到SC,同时SP++,一直到坐标(EC,EP)结束,期间不需要再次设置坐标,大大提高了写入速度 。
当我们只需要实现画点操作时,以上指令学习已经够了,不过在GUI使用的时候,还是会经常用到读点,也就是0x2E指令 。
0x2E指令是读GRAM指令,在发送该指令之后,便可以读取GRAM的数据 。
当ILI9341收到0x2E指令后,第一次输出的是dummy数据,也就是无效数据,从第二次开始,读取的才是有效的GRAM数据(需要通过0x2A和0x2B设置位置),输出规律如上图:R1G1àB1R2àG2B2àR3G3… 。如果我们只需要读取一个点的颜色值,只需要接收到参数3即可;连续读取的话,就按上述规律去接收即可 。
在这里,我们已经算是把需要了解的各部分都了解到了 。接下来,我们就要把这一块一块零散的知识串一起,也就是我们的LCD最基本驱动步骤 。

推荐阅读