我们购买的LCD一般包含两部分:
LCD的面板
LCD的驱动芯片
我们的处理器并不是直接驱动LCD面板,而是驱动LCD的驱动芯片,再由驱动芯片驱动LCD面板上的各个像素点。
所以我们要想使LCD显示某些内容需要考虑两点:
处理器通过什么通讯总线和协议与控制芯片通信
将显示数据以哪种数据格式传输给控制芯片
与控制芯片通讯的总线形式
有的LCD使用并行总线通讯,有的是使用串行总线进行通讯。
并行总线通讯要考虑:
总线上的数据什么时候被锁存
如何区分指令数据和显示数据
是否存在多个控制芯片的片选信号
串行总线通讯要考虑:
SPI还是I2C总线等
通讯的速率等参数
总之我们要知道处理器以怎样的通讯方式能够使LCD的控制芯片接收到数据。
显示数据的传输格式
每个LCD的控制芯片内部都有一个RAM,RAM中每个数据位对应的LCD上相应的像素点。例如128*32的LCD控制芯片对应的内部RAM是128*32位的RAM。RAM中某个位是0则LCD上对应的像素点不显示,1则显示。
上图是122*32点阵LCD的控制芯片的RAM的地址映射(上图的LCD使用两个控制芯片,所以其列地址由两个0-60组成)。RAM就像对应的LCD一样也是使用类似于行列的形式指示某个像素的位置,不过在RAM中行对应的是页地址,列对应的是列地址。通常在RAM中一个列中紧邻的8个位凑成1个字节来表示,例如128*32位的RAM以数组表示就是LCD_RAM_DATA[4][128]。而且称列上紧邻的8位对应的一行为1页,如上图所示的页地址。也就是说上面的数组中LCD_RAM_DATA[0][*],为页地址是0的数据,LCD_RAM_DATA[2][*],为页地址是2的数据。列地址就好理解了,就是对应的列的值。如数组中LCD_RAM_DATA[1][10]对应的就是页地址为1,列地址为10的8个像素点。
不同的LCD使用的控制芯片不一样,个数也不一样。这要看LCD对应的手册,来知道LCD的控制芯片是怎么连接的。有的屏幕使用的是一个控制芯片驱动LCD,也有的芯片使用多个控制芯片来驱动LCD。如下图分别列出使用1个控制芯片和使用2个控制芯片的LCD框图。
使用一个控制芯片的LCD,其RAM内容对应的就是整个LCD。
使用多个控制芯片的则是将屏幕分成了若干个部分,每个控制芯片对应的一块区域。如两个驱动IC的就是将屏幕分成了左右两半部分。因此修改此类LCD,就需要根据像素点的位置修改对应控制芯片的RAM了。与含有多个控制芯片的LCD进行通讯时还要考虑到通过不同控制芯片的片选信号,来控制对应的控制芯片获取数据。根本上,使用多个控制芯片的和使用一个控制芯片的原理是一样的,只是将一个RAM分到了多个控制芯片的RAM中了。
总结
最后呈现到LCD上的画面就是RAM中的数据。要使LCD显示不同的内容,最终还是修改各个控制芯片的RAM。因此最主要的操作都是围绕着对RAM的操作的。例如设置RAM的写入或读取的页地址和列地址,以及写入或读出指定地址的RAM的数据。