陈涵深,姚明海,张建方
(浙江工业大学 信息工程学院,浙江 杭州 310015)
近些年来,随着光电技术和嵌入式技术的快速发展,液晶显示模块已广泛应用于不同场合,同时显示效果较好的TFT-LCD已越来越多被采用,但对于价格敏感的低端产品或在一些特殊场合,由于STN-LCD[1]和TFT-LCD[2]价格相差较大,所以还在大量使用单色或灰度液晶屏,许多企业往往不得不开发2套软硬件平台,分别用于不同价格和档次的同类产品。考虑到目前许多嵌入式芯片往往集成了LCD控制器,市售的LCD控制模块一般都同时支持STN-LCD和TFT-LCD显示,在软硬件设计上同时支持两种类型的液晶屏,将大大提高开发效能和方便生产管理。本文以嵌入式ARM为硬件平台,提出了同时兼容STN-LCD和TFT-LCD两类液晶屏的通用软硬件设计方案,在硬件上采用一个跳线,软件上采用同一个程序来实现两种不同类型的液晶屏兼容显示。
本文选择高性能的32位NXP公司LPC2478 ARM7作为主控芯片。LPC2478处理器是一款具有极高集成度并以ARM7TDMI-S为内核的微控制器,支持实时仿真和嵌入式跟踪,处理器时钟高达72 MHz。片内集成资源丰富,该芯片的成本和功耗都比较低。所有的这些特性使LPC2478系列ARM特别适用于工业控制和医疗系统方面[3]。
LPC2478片内集成LCD控制器,直接为多种彩色和单色LCD显示屏的接口提供了所有必需的控制信号。显示分辨力最高支持1 024×768。LCD控制器用于将像素编码数据转换成所需格式,并产生相应的时序以驱动各种单屏或双屏的单色和彩色LCD显示屏。该LCD控制还具有两个独立的DMA FIFO缓存器,采用了DMA FIFO后,SDRAM中的帧缓存中的图像数据以DMA方式传输到LCD控制器数据缓冲器FIFO,不占用系统总线时间[4]。
单色STN-LCD选用夏普LM057QB1T07,它是一款5.7 in的蓝底白字的STN液晶屏,分辨力为320×240,亮度是400 cd/m2,背光为LED,接口类型为FFC[5]。TFT-LCD选用夏普LQ057Q3DC12,它是一款5.7 in的QVGA TFT液晶显示器件,分辨力为320×240,色彩为26万色,亮度是500 cd/m2,背光为1×CCFL灯管,接口类型为TTL[6]。
液晶屏硬件接口部分原理如图1所示,液晶模块驱动器采用LPC2478内部自带的LCD控制器。J1为单色STN-LCD LM057QB1T07接口,J2为TFT-LCD LQ057Q3DC12接口。
以字符“LCD”开头的管脚标号均为LPC2478的液晶控制脚,并可通过设置寄存器来使每个引脚工作在不同的方式,以便适用于不同类型的LCD显示屏。升压电路采用MAX629芯片及其外围元器件组成,输出16~32 V的正电压作为单色STN-LCD的显示驱动电源电路。因LQ057Q3DC12内部带有显示驱动电源电路,所以TFT-LCD无须外加该电路。电阻R1为液晶显示程序的跳线电阻,连接到LPC2478的P2_15脚。不焊上R1时,P2_15口为低电平,电路为单色STN-LCD显示方式;焊上R1时,P2_15口为高电平,电路为TFT-LCD显示方式。
本文软件的开发环境为RealView MDK-ARM 4.14,在图形用户界面程序设计开发上,充分考虑其通用性和可移植性,使用C语言和部分汇编语言编写。
从图2中可以看出,只要在GUI底层做一些修改和应用程序中定义使用的颜色值,就能实现一个代码工程兼容双屏显示功能,详见如下说明。
ColorDispEn位变量表示当前液晶选择状态。开机上电后,需检测液晶跳线脚的电平,如果是高电平,表示为TFT-LCD显示方式,使ColorDispEn置位;如果是低电平,表示为单色STN-LCD显示方式,ColorDispEn清零。程序段如下:
因两款液晶显示器像素都为320×240,所以像素定义如下:
液晶显示缓冲区定义成一个二维数组。对于单色STN屏,每个点像素只对应1 bit;对于16 bit的TFT屏,每个点像素对应于2 byte。所以缓冲区定义如下:
在颜色的处理上,对于不同的液晶显示模块,定义不同的颜色数据类型TCOLOR。考虑到程序的通用性和芯片存储空间的有限,笔者设置LQ057Q3DC12工作在16 bit/pixel(比特/像素),5∶6∶5 RGB色彩模式,所以定义为无符号的16位数。
在人机界面的中间层和应用软件设计上,均按彩色界面方式进行程序编写,但为了在单色显示时能区分开前景和背景的不同,彩色显示时又不影响显示效果,需要把用到的所有前景颜色值定义到DispColorUsed[]数组,把背景颜色值定义到BakColorUsed[]数组,并做一定的计算后存放在BakColor[]数组中,具体计算流程如图3所示。
具体思路如下:如果有背景颜色与某前景颜色相同,G分量值为零,则把对应的背景颜色G分量值加1;如果G分量值大于零,则减1。笔者用GetBkColor()函数来计算当前的背景值,用InitBakColor()函数来初始化Bak⁃Color[]数组。
笔者参考μC/GUI[8]的设计,再移植了部分ZLG/GUI代码,开发了自己的轻量级CH/GUI代码库,能很好地支持双屏兼容显示。以下为各种文本、图形的测试代码和显示效果(见图4)。
显示效果如图4所示,图4左边为没有焊R1的STN-LCD LM057QB1T07显示效果,右边为焊上R1后的TFT-LCD LQ057Q3DC12显示效果,结果令人满意。
考虑到兼容双屏显示处理会占用一定的系统资源,笔者在RealView MDK-ARM软件,LPC2478主频72 MHz的仿真条件下,对测试代码的CPU运行时间进行测试,结果如表1所示。
表1 2种方法的CPU运行时间对比
测试结果证明,双屏兼容显示会占用一定的CPU时间,但考虑当前CPU的运行速度,实际影响效果是有限的,符合一般场合的应用。笔者已在此平台上为客户开发了一种人机界面控制系统,在系统中实现了文本、图形和选单等显示功能,效果如图5所示。
通过LPC2478芯片、LM057QB1T07和LM057QB1T07相互结合的应用实例,验证了其方法的可行性。本文设计方法已经成功应用于某广播电视设备厂家的人机界面控制系统中,根据客户的需求,一套软硬件平台就可装配两种不同的液晶显示屏,系统工作可靠,显示效果令人满意。另外,该方法也适合不同的软硬件平台,只需对其作稍微的修改,即可实现不同规格的双屏或多屏之间的兼容显示,因此本方案具有一定的实际应用价值。
[1]吴腾奇.黑白液晶显示技术[J].电视技术,1997,21(9):78-79.
[2]周咸春,梁维铭.大尺寸TFT-LCD驱动芯片分析与展望[J].电视技术,2006,30(10):33-35.
[3]NXP Semiconductors.LPC24××user manual[EB/OL].[2011-04-03].http://www.nxp.com/#/pip/pip=[pip=LPC2478]|pp=[t=pip,i=LPC2478]:3-4.
[4]李俊,张团善.LPC2478彩色模拟TFT-LCD的显示驱动设计[J].液晶显示,2010(8):35-36.
[5]SHARP Corporation.LM057QB1T07 LCD specification[EB/OL].[2011-04-03].http://www.sharpsma.com/Page.aspx/americas/en/part/LM057 QB1T07/:5-6.
[6]SHARP Corporation.LQ057Q3DC12 LCD specification[EB/OL].[2011-04-10].http://www.sharpsma.com/Page.aspx/americas/en/part/LQ057Q 3DC12/:2.
[7]ARM Ltd and ARM Germany GmbH.ARM development tools help files[EB/OL].[2011-04-12].https://www.keil.com/cmsis/download/.
[8]Micrium Technologies Corporation.μC/GUI User manual[EB/OL].[2011-04-15].http://micrium.com/page/downloads/windows_gui_trial.