我们紧张谈论基于ILI9341的TFT液晶显示模组,但在正式谈论之前,还是得先理解一下TFT液晶显示器的彩色产生事理,它是基于大家都熟习的红(Red)、绿(Green)、蓝(Blue)三原色光稠浊事理,例如,绿色+赤色=黄色,绿色+蓝色=青色,赤色+蓝色+绿色=白色,如下图所示:
虽然上图仅显示了7种颜色,但是只要我们能够得到红、绿、蓝三种颜色(原色),然后调节它们的亮度比例,就可以得到你想要的五颜六色,而得到的颜色数量则称为色深(Color Depth)。
根据各原色的调节级数也可以分为很多颜色模式,比较常用的是三原色各占8位,即每种原色有2的8次方(256)种亮度变革,相应的色深为256256256=16777216(俗称16兆彩色),我们称其为RGB888模式。RGB配色常日利用RGB(rr,gg,bb)来表示,例如RGB(0xFF, 0x00, 0x00)表示赤色,RGB(0xFF, 0xFF, 0xFF)表示白色。在进行C源代码编程时,常常会利用宏来定义一些常用的颜色,部分RGB888颜色如下:

当然,并不是所有场合都须要这么多颜色,RGB565与RGB666模式也很常用(其它还有RGB332、RGB555等等),相应的色深分别为326432=65536(65千色)及646464=262144(262千色)。RGB666模式部分常用颜色的宏定义如下图所示:
现在的问题是:怎么产生三原色呢?看下图吧
教堂彩色玻璃上绘有各种人物图案,每一幅都是一个宗教故事,一些教会本地的传说也会作为主题涌现,以这种办法向民众宣扬教义,也造诣了它的艺术……这位同学你干嘛呢?在座的其它同学可都是有志于献身电子技能领域,并以“为社会钻营福祉”的目标而奋斗着,你假如喜好讲故事瞎说淡就赶紧学厨师当个裁缝比较好一些….等等,我还没说完(摔门的声音响起来了)。
呵呵!
宗教那啥的我不太懂,只知道上图已经见告我们如何产生三原色,那便是:利用一个红、绿、蓝色的薄膜对光源进行过滤就可以了。TFT液晶显示模组中总会有一个白光源(CCFL或LED,此处不赘述,详细事理及相应的驱动电路请参考《显示器件运用精粹》(以下简称“显示器件”)与一片彩色滤光膜。假设TFT屏当前正显示纯白的画面,你用放大镜去不雅观察,会创造有屏上有很多红、绿、蓝的方块,如下图那样:
我们把每一个点称为子像素(SubPixel),三个子像素组成一个显示像素。对付分辨率为240列320行的TFT屏,它须要2403=720个列驱动(320个行驱动)引脚。每个显示像素都会对应驱动芯片中显存(Graphics RAM, GRAM)里的一个地址,分辨率为240320的TFT屏对应的GRAM地址该当有240320=76800个,详细容量为多少则取决于芯片支持的RGB模式。例如,ILI9341有720列320行驱动输出,支持RGB565与RGB666模式,按最大位数(18位)来打算,相应的GRAM容量大小该当为24032018=138240bits(位)=172800bytes(字节),数据手册标记的特点如下图所示:
我们利用VisualCom软件平台中 “基于ILI9341的320X240的TFT液晶显示模组”来仿真一下,相应的效果如下图所示。
ILI9341的指令比较多,英文数据手册超过200页,涉及的寄存器数量也非常弘大,VisualCom软件平台按功能附近的原则将其划分为多个种别。由于这是我们第一次打仗TFT液晶显示模组,以是先给大家演示如何以最少的指令点亮TFT屏,后续文章会按种别详细谈论其它指令功能。
首先我们先把稳“属性”窗口的“高等”组合框中有三个选项,其一为起始页。“页”便是行,它与“列”是对GRAM地址的定位办法。ILI9341的GRAM共划分为320页,每页240列。在“单步运行”仿真模式下,“内存窗口”可以实时不雅观察GRAM空间的显示数据,但是由于320页的数据量太过弘大,为避免加载韶光过慢(不影响单步运行时数据的刷新韶光,只是当重新打开另一个文件或改换器件时,VisualCom软件平台须要对当前工程的内存与寄存器数据进行清理的韶光比较长),我们限定一次性只能加载8页内存(常日也不须要全部载入),你所须要做的便是指定起页始。上图指定的起始页为32,以是加载的内存页为32~39页。当然,在单步运行时,你可以随时变动起始页,内存窗口会不才一步运行时进行相应的刷新。
假设现在哀求显示一张图片,怎么办?由于ILI9341的GRAM空间太大,如果仍旧按以往的办法(预置数据)来写满GRAM,须要预置的数据至少为76800条,恐怕根本不会有人会这么做,即便像ST7920、KS0108B那样相对小一点的“黑白”点阵LCD驱动芯片,通过预置数据来连续写入显存的办法也并不谄媚。VisualCom软件平台当然不会只供应半套办理方案,它许可你指定一个.BMP图像文件对GRAM进行初始化,当你运行仿真之后,首先会利用指定的图片初始化ILI9341的GRAM,爽歪歪!
前面已经提过,ILI9341支持RGB565与RGB666两种像素格式。从“高等”属性中选择一种后,你刚才指定的图片会以相应像素格式写入到GRAM中。须要把稳的是:属性窗口里的“像素格式”只是用来掌握图片初始化到GRAM的显示数据,而不是用来设置ILI9341状态的(须要指令,后述)。
好的,现在咱们来看看须要哪些指令才能让屏幕有所显示呢?相应的预置数据如下图所示:
乖乖,我们只预置了两条指令,它首先退出了就寝模式,然后打开了显示。我们来看看数据手册中复位后的状态,如下图所示:
全体表格中,只有“就寝(Sleep)”与“显示(Display)”两项影响屏幕的显示,ILI9341上电复位后默认处于就寝模式(Sleep In),并且显示也是关闭的(Off)。“空闲(Idle)”模式下是可以显示的,只不过显示的颜色比较少(后述),更何况还并不在空闲模式下(Idle Off)。(其它是一些地址设置或读寄存器等等,咱们暂时忽略)
就寝模式是个虾米东东呢?不知道,还是翻翻数据手册吧!
个中有一条“进入就寝模式”指令,如下图所示:
哦!
原来就寝模式紧张是为了省电,此时内部电荷泵升压(Pump DC/DC Converter)电路(有关硬件电路事理请参考《显示器件》)、系统振荡器都会关闭(但是已经写入到GRAM的数据仍旧保持不变),那这个屏幕还显示个毛线,以是实行“退出就寝模式”指令是让屏幕能够显示GRAM数据前必须要做的一步。我们再来看看相应的指令,如下图所示:
可以看到,“退出就寝”指令为0x11,这也是我们预置的第一条指令,接下来利用“打开显示”指令0x29,咱们指定的初始化图片就显示出来了。在VisualCom软件的“寄存器窗口”中,SLEEP与DISPLAY位分别代表相应的模式(0为关闭,1为开启)。
值得一提的是:ILI9341仿真模型还添加了预置数据处理状态,在“输出”窗口的信息栏中可以显示当前预置数据的解析状态。例如,我在前述预置数据后再添加一条指令(0x14)与两条任意数据,如下图所示:
由于ILI9341不存在0x14对应的指令,以是信息栏中会显示相应指令为无效。同样,后面跟随的多个数据也是无效的,这样的实时信息反馈能够进一步帮助利用者应证自己对芯片指令浸染的理解(如果指令解析结果不是你须要的,肯定哪里出错了,而不像以往那样只能看屏幕、内存、寄存器窗口),相应的效果如下图所示。
那如何往指定的GRAM地址写入指定的显示数据呢?这与以往ST7920、KS0108B之类的驱动芯片还有点不太一样,我们下一期再见吧!