fpga显示256颜色_点阵式液晶屏的显示原理与驱动设计(一)

LCD(Liquid-crystal display)是一种非常常见的显示器件,大至各个行业的仪器仪表、机器设备,小至个人消费品的手机、电脑甚至穿戴设备,都有着非常广泛的应用。

cd5a79e449fa8a704ef1671408cce756.png

图 1 点阵式液晶屏

根据使用方法的不同,LCD可以分为笔画式的以及点阵式两种类型,虽然都是采用了液晶作为显示材料,但是在显示的控制以及驱动上,有着明显的不同。对于笔画式的LCD来说,除了显示材料有区别,显示原理、以及控制方法都跟数码管非常类似,这里不做过多阐述,着重介绍下点阵式LCD的原理以及驱动方法。

11d466ee3a8c5fdecca2ff01eae239bb.png

图 2 LCD以及控制器

从结构上来说,一块点阵式LCD一般分为两部分:液晶面板和控制器,面板跟控制器组合起来才能完成信息的显示功能。控制器是一块LCD的核心和桥梁:对于面板来说,控制器要完成点阵的驱动、背光的控制、以及显示信息的刷新;对于要输出显示信息的CPU来说,控制器要完成信息的接收、存储以及坐标变换等功能。

8cad30a7e7382d8c236bc795d7ef4e7d.png

图 3 控制器与显示点阵映射关系

从控制的角度来看,LCD控制器可以看作一块可以动态刷新的SRAM。SRAM存储单元的数据跟LCD的显示点阵之间有固定的映射关系。SRAM的存储和刷新是以字节为单位的,所以大部分LCD在做驱动的时候,面板的最小驱动单元是8个像素,而不是一般观念上的一个像素。对于单个点阵的控制,实际上是通过控制SRAM某个字节内的存储内容来实现的,SRAM存储数据的二进制1和0分别对应显示像素的亮和灭,或者对应彩色LCD的前景色和背景色。面板最小显示单元的像素排列可以是横向的8个像素,如图 3所示,也可以是竖向的8个像素。具体采用哪种方法,要看对应的控制器设计。有些控制器就设计的可以通过参数来选择是横向显示还是竖向显示。

应用在LCD的控制器上,这块SRAM叫做CGRAM,也就是Character Generation ram,对应的还有CGROM,存储一些固化的字符。

在做LCD驱动程序的时候,驱动API通常至少有三个参数:X坐标、Y坐标、以及显示内容,如果是彩色的LCD,还要加上颜色信息。驱动程序做的主要工作就是将应用程序的X、Y坐标转换成CGRAM的存储地址,然后通过并行或者串行的方式,将显示内容写到CGRAM中去。以字节为单位,一个字节一个字节的写入。

4d909e649d6c7a94a2e4dd3a1f47fe8c.png

图 4 128X16 LCD

以横向像素排列的128X16点阵的液晶屏为例:往液晶屏CGRAM写一个字节的数据,实际上就是在液晶屏上某个位置横向显示一个8*1的像素组合。这样在计算X坐标的时候就要注意,X坐标取值范围就不能是0~127,而是要0~15(128/8=16个),取值范围是0~15,也就是图 4显示的,只能横向显示16个8*8点阵的字符。

5c60826cbe199a1b5d537e189dd0f65d.png

图 5 像素点与SRAM映射

那么在计算的时候,最左边字符'A'的最上面一行就对应CGRAM存储地址0x00的存储内容,这里是0x68,字符B的最上面一行对应CGRAM的0x01地址的存储内容,以此类推,一直到第一行写满。到了写第二行的时候,Y坐标就不是0了,就变成了1,也就是说,Y坐标的计算仍然是以像素为单位计算的,因为横向显示的8个像素对应CGRAM的一个字节么。换句话第一行的1*128个像素,对应CGRAM的0~15(128/8=16)存储单元,如图 5所示。

这样很容易就得出X、Y坐标跟CGRAM存储地址之间的映射关系了,也就是ADDR=Y*16+X,即一行就代表CGRAM有16个字节,Y等于几就有几行,不满一行,就加上X的坐标。从左上角开始,第一组 8个像素对应CGRAM的地址0,然后往右数,数满一行,下一行从左边重新开始数,一直数到最下面一行的最右边8个像素,对应CGRAM的地址从0一直增长到255(字节),使用了256个字节来存储LCD上的所有显示信息。

至于有些图形驱动,必须以像素为单位计算X、Y坐标的,是实际上在驱动API内多了一个将像素坐标转换为CGRAM某字节存储数据的步骤,两个相邻像素的写入,先把原先像素所在的存储单元内容读出来,然后跟新的内容做逻辑运算,再重新写入,跟普通的CGRAM写入,并没有本质区别。

在设计LCD控制器的时候,由于分辨率越高,像素数就越多,导致驱动管脚就多。所以往往采用CPLD/FPGA的设计方案,但是核心的原理实际上是采用了一个双口RAM,可以通过两组接口来访问CGRAM里的内容。CPU输出显示信息到控制器的时候,使用一组接口,控制器输出CGRAM到LCD面板的时候,使用第二组端口。所以在写LCD驱动的时候,有些并行接口液晶手册要求在写入数据之前,读液晶BUSY线的状态,不忙的时候才能写。即使是串行接口的LCD控制器,在写入数据的时候,也有判断写入状态的要求,这种操作方式正是双口ram的典型操作方式。

关于LCD的控制器原理部分就写这么多,下一节介绍下汉字显示原理,LCD驱动是如何将一个汉字的数据转变成图形显示在面板上的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值