登录站点

用户名

密码

LCD模块设计

1已有 1019 次阅读  2009-09-27 16:41   标签LCD  模块  设计 

LCD液晶显示器由于具有体积小、重量轻、低电压、低功耗等特点,因此适合于结合大规模集成电路开发出各种便携式显示产品,具有十分广阔的市场前景。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上,LCD是实现人机交互的一个重要通道。

1实例说明

ARM内置的LCD控制器,可以支持规格为每像素2位(4级灰度)或每像素4位(16级灰度)的黑白LCD,也可以支持每像素8位(256级颜色)的彩色液晶屏。它可以实现的功能有:

(1)把定位在系统存储器中的视频缓冲区的LCD图像数据传输到LCD驱动器,并产生必需的LCD控制信号。

(2)使用时间抖动算法和帧速率控制方法,支持在灰白LCD上的单色、4级灰度(每点占两位)、16级灰度(每点占4位)显示,也能与彩色LCD接口支持最大256色(每点占8位)的显示。

(3)可以编程支持不同水平和垂直点数、不同数据线宽度、不同的接口时序和刷新速率的LCD,支持4位双扫描、4位单扫描、8位单扫描的LCD显示器,并支持水平/垂直卷动,用来支持更大的屏幕显示。

本实例的LCD设计主要实现与ARM的交互界面,显示时序发生和逻辑控制功能,显示各种条件下的控制和管理。

2 LCD工作原理

2.1 LCD显示模式

由基本的LCD显示原理可知,LCD显示一个点最重要的因素就是点的坐标和点的数据,在具体的程序中所涉及的不是一个一个的点,而是若干个有序排列的点的集合,这就是字模。LCD液品显示的一个例子如图12-1所示。

LCD的显示与字模数据密切相关,显示子程序的功能就是读取相应的字模数据送给LCD,由LCD将接收到的字模在相应的位置上显示出来。但字模数据的生成与程序基本无关,相关的只是字模数据的内容。

LCD可分为段位式LCD、字符式LCD和点阵式LCD 。其中,段位式LCD和字符式LCD 只能用于字符和数字的简单显示,不能满足图形、曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动、动画、分区开窗口、反转、闪烁等功能。这里采用的是点阵式LCD。

LCD点阵格式采用倒序,纵向取模,但是以半角为一个单位,如图12-2中所示为数字序号1~17这个字节在LCD中的位置。以半角为单位的原因是为了避免区分是中文点阵还是ASCⅡ。码点阵的麻烦,可以实现中文和西文字符字模的统一。


在文本显示方式下,液晶屏显示信息的管理单位是8×8点阵,称为一个文本显示单位,每个文本显示单位对应文本显示缓冲区中的8个连续存储单元。但是,文本显示方式时写入文本显示缓冲区的不是点阵状态信息,而是字符代码,其点阵状态信息(8×8)即字模存放在RAM中。当8×8的点阵不足以描述一个符号时,通常用多个字符组合来描述。如汉字,一般用16×16的点阵来描述,将它分为4个8×8的点阵,用4个字符代码来描述一个汉字,根据这4部分的位置关系将4个代码写入相应的文本显示缓冲区。

在图形显示方式下,可以显示任何形状的图形,包括字符。图形方式下LCD还提供对位的操作,即通过命令使液晶屏上任一个点显示或不显示。文本显示方式实际上是图形显示方式下的图形块(8×8)显示。在图形显示方式时,液晶屏显示单元的单位是8×l点阵,称为一个图形显示单位。每个图形显示单位对应图形显示缓冲区中的一个存储单元,将点阵状态信息写入这个存储单元,则在对应的位置显示出图形。

如果应用并行的128×64点阵结构的LCD,可以显示8×4个汉字。汉字是全角字符,其字模点阵为16×16,而数字、标点符号和字母都是半角字符,字模点阵为8×16。也就是说一个汉字字模数据为32 Bytes,而一个半角字符的字模数据为16 Bytes,因此显示子程序只考虑显示的半角字符的个数,显示汉字时把一个汉字当作两个半角字符来对待。

2.2 LCD显示地址

LCD要求提高显示质量和响应速度,具有低功耗、高密度安装、彩色显示等,因此LCD要求较多的控制性能。根据所驱动的LCD的大小及所需功能的多少,其驱动控制的复杂程度有所不同,主要体现在其内部RAM的大小、译码电路的复杂程度、内部的时序及电源电路等上面,对外可体现在驱动行和列端口的多少、与ARM的接口功能等上面。
LCD显示RAM的地址结构如图12-3所示。

 


液晶显示驱动模块是在液晶像素的两电极(行Row电极和列Column电极)之间建立交变电场。在点阵式液晶显示器中,像素的两电极是以矩阵方式排列的,由驱动电路循环地给每行电极施加电压,同时通过列电极给该行像素施加选择或非选择脉冲电压,以实现对像素的驱动。这种行扫描是按逐行顺序进行的,循环一周期为一帧。

2.2 LCD读写时序

点阵LCD控制的主要作用是为液晶显示器提供时序信号和显示数据,以及ARM与液晶显示系统之间的接口。这里根据需求选择的ARM内置控制驱动器对应的图形液晶显示模块,LCD液晶显示芯片型号为HYl2864。

HYl2864读、写数据指令每执行完一次读、写操作,列地址就自动增1。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据其写数据、读数据时的状态位如表12-1所示。


HYl2864的列驱动HD61202写时序如图12-4所示,首先给出DATA、RS、WR数据,然后CPU的R/W信号给出一个下降沿,也就是E的下降沿。由图中可以看出,写时序在R/W的上升沿,给出E的下降沿,将数据写入。

图12-4 LCD列驱动接口写时序

如图12-5所示是LCD列驱动接口读时序,R/W为高电平时,当给出E的高电平时读出数据。


3硬件电路设计

3.1  LCD显示电路

HYl2864为128×64点阵LCD,采用两片HD61202作为列驱动器,同时使用一片HD61203作为行驱动器的液晶模块,芯片的结构图如图12-6所示。HYl2864具有简单而功能较强的指令集,与微控制器的数据传输采用8位并行传输方式。片内Flash中存入了需要使用的字符库,通过调用LCD字符显示程序,可以显示中英文字符。

 


在HYl2864中,两片HD61202的ADC均接高电平,RST也接高电平,这样在使用HYl2864时就不必再考虑这两个引脚的作用了。CSA跟HD61202(1)的/CSl相连;/CSB跟HD61202(2)的CSl相连,因此CSA、CSB选通组合信号为CSA,CSB=01选通(1),CSA,CSB=10选通(2)。

  HYl2864对应的地址和功能分别如表12-2和表12-3所示。



3.2电路原理图

LCD液晶显示接口电路如图12-7所示。设计中是由LJ12的I/O口控制LCD的片选与读写,并通过LJ12的同步串行通信接口 SPI来传输LCD的显示数据。

如图12-7(a)所示,为了使串行口MOSI的串行输出能够转变为并行输出数据,从而可以被LCD的DB0~DB7接收,中间加了一个74HCl64芯片。它是将A、B引脚上的信号做与运算,作为串行输入的数据信号,并移位输出到QO-Q7引脚上;MR信号用于清除Q0~Q7的信号(全部输出低电平)。

LCD硬件部分包括对比度调节电路和背光控制电路,测试其功能也很简单,只是按照相关命令格式送入数据,屏幕上有没有显示,然后调节对比度调节电路中的可变电阻,使显示对比度达到最佳,给背光控制端口加上高电平看背光是否会亮。


4软件设计

4.1 LCD显示定位、结构与驱动

对软件设计而言,用户可以把帧缓冲区(-buffer)看成一块内存,用户既可以向这块内存中写入数据,也可以从其中读出数据。系统中帧缓冲区大小是用字节来计算的,-buffer中第一个字节的高四位表示LCD的一个像素点显示的数据,低四位则代表第二个像素点,按照这样的规律推算下去。其中LCD像素点顺序的定位和LCD的硬件设计有关,显示的起始点是固定的。由于LCD模块相对于ARM嵌入式处理器来说,为低速设备,因此对于这个外部设备的操作必须有等待时间。

LCD的像素点定位如图12-9所示。


LCD显示部分的程序结构是这样安排的:将屏幕的四行分开,第一行右半屏显示的是时间,位置刚好是8个半角字符,格式是00:00:00,表示时、分、秒,这是第一部分;第二行和第三行合在一起作为显示的第二部分,根据不同的状态分别显示不同的内容,这一部分显示的内容最多;第四行显示对应于键盘上功能键的功能。由于采用的接口和LCD在改进方案中没有做任何改动,因此显示子程序也不用作大的改动,需要改动的只是很小的一部分和显示的内容,即字模数据。

以下是其中一部分字符库的显示代码。


关于LCD驱动,拥有Linux内核之后就可以在这个内核的基础之上添加外设的驱动程序了。Linux提供了相当丰富的外设驱动,对于用户而言一般情况下只需要略微修改一下源代码,然后编译到内核中就可以运行起来。所以只需要将所选择的Machine结构加入到原先的驱动之中就可以了,驱动文件是/arm/kernel/Linux/drivers/video/clps7llxfb.c,在第608行加入以下几行代码:

 


4.2 LCD显示流程

在系统初始化后,首先是对LCD控制寄存器及地址寄存器进行改写,设置一些LCD的参数,配置Buffer的起始地址和。Buffer大小等一些参数;然后是清屏,最后是显示。

经过显示速度测试(12.4.3节)实现与LCD的速度匹配后,就可以实现对液晶的初始化、清屏和显示等操作了,而实现这些操作最基本的函数是对液晶控制器指令的操作函数,其显示实现过程如图12-10所示。

 


这些操作主要功能如下:

(1)LCD初始化。主要包括对控制器的显示频率、显示行数及显示缓冲区地址的设置。

(2)LCD清屏。由于系统上电时,显示缓冲区的数据是不固定的,显示出乱码,因此在液晶显示操作之前应将缓冲区清零。

(3)数据显示。液晶初始化结束后,系统将采集来的信号通过处理后用文字、图形等显示到LCD上。

4.3 LCD显示与测试

以下程序是显示程序,可以进行速度测试它清屏100次用时0s,写。。一个半角10000个使用时间20s。






对以上的程序分析如下:

     (1)主要指令有7个,对应宏定义的SC_CMD_…。对应不同的指令,有不同的RW和RS引脚电平要求,WR及RS线和CPU的P2口相连,这就是说,不同的指令对应不同的地址,将这些地址写入CommandAddr数组。访问不同的指令,可用以下的方式。

XBYTE[COmmandAddr[commandType]  Ⅰ  SC_LEFT_ADDR]

     (2)不同的指令有不同的数据形式要求,可以将用户数据和固定格式的数据相或得到要写入的数据,实现了不同指令读写的统一。例如:

XBYTE[CommandAddr[CommandType]  Ⅰ  SC_LEFT_ADDR]  =  Ⅰ  CommandVeil[C0mmandTYpe];

(3)SCInitial()为初始化函数,清屏函数为SCClearRAM(),它将所有的RAM清为O。

(4)设置显示内容函数为SCPutHalfLattic(),这个函数显示半角字符,取模方式为:纵向取模,字节倒序。设置显示内容时,首先设置page和yaddr,然后可以连续写64个字节,也就写满这个page的所有内容,写的过程中yaddr会自动增加。

(5)设置上下滚屏功能函数为SCSetStartRow()。它设置起始行的意义:整个屏幕向上平移n个像素。

4.4 LCD字模显示程序

系统中显示部分的子程序与字模数据结构互相关联,这里将ASCⅡ字符显示子程序和单独显示汉字字模的子程序列出来,根据这两个子程序也可以看出显示部分的显示程序实现原理。



在这个子程序中,x指的是汉字行,只能是0~3共4行;y指的是半角字符列,只能是0~15共16列,因而可以在屏幕任何一个半角字符位置上显示一个ASCⅡ半角字符。在处理汉字时是将汉字当作两个半角字符来处理的,显示时将一个汉字分左上、左下、右上、右下4个部分顺序显示出来,从下面的显示汉字字模子程序中可以看出这一点。


从程序中可以看出,当j=0时写的是第一个汉字的左上和左下,然后在j的循环过程中依次显示的是第一个汉字的右上、右下,第二个汉字的左上、左下,第二个汉字的右上、右下。实际上LCD的起始页,表示起始显示的8行,也就是表示一个半角字符的上半部分。就是显示部分汉字的显示过程。

5实例总结

随着液晶显示技术的发展,LCD液晶显示模块已成为家电、显示仪器仪表和其他电子产品的重要组成部分。本章给出了LCD液晶显示的设计实例,采用LCD模块显示的内容主要有字符、汉字和图形。对于文本方式显示,必须首先确定文本区首地址;而对于图形方式下的显示,则要先确定图形区首地址。如果设置了多个文本和图形缓冲区,则可以通过把首地址重新定位到这些缓冲区的方式来快速切换屏显内容。

   在LCD设计过程中,有下面几点值得注意。

  ·如果想调整液晶模块时,请注意正确接线,尤其是正、负电源的接线不能有错,否    则会烧坏电路上的芯片。
  ·液晶模块可选用带背光的型号,LED背光方式供电最好为3.8~4.3V的直流电源。

  ·采用的液晶如果是点阵结构,向液晶发送的汉字则必须用提取字模软件转换为点阵数组,才能在程序中使用。

上一篇: SDRAM模块设计 下一篇: 键盘模块设计

分享 举报