首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
LED技术
» 双缓冲实现图形液晶的快速显示
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
双缓冲实现图形液晶的快速显示
发短消息
加为好友
forsuccess
当前离线
UID
871057
帖子
6281
精华
0
积分
3141
阅读权限
90
在线时间
282 小时
注册时间
2012-2-21
最后登录
2015-6-23
论坛元老
UID
871057
性别
男
1
#
打印
字体大小:
t
T
forsuccess
发表于 2012-7-31 22:19
|
只看该作者
双缓冲实现图形液晶的快速显示
接口
,
嵌入式
,
控制器
摘要:液晶是嵌入式设备最常用的显示器件。本文详细介绍了用双缓冲的方式实现图形液晶的快速显示。
1. 引言
在嵌入式设备中,液晶已经成为显示器件的首选。液晶类型有字符和图形之分,字符液晶便宜且显示速度较快。在中文显示或者复杂图表显示的场合,需要使用图形液晶。
在液晶接口电路设计时,需要正确使用液晶控制器。典型应用时,特别是在嵌入式系统中,常常采用端口寻址的液晶控制器,如SED1335、T6963C等。这种寻址方式的好处是只占用很少的几个地址空间,并且控制方便。液晶控制器一方面通过外部总线和微处理器相连;一方面通过内部总线与显示缓冲RAM相连;还有一些驱动的控制线和数据线与液晶相连。微处理器通过液晶控制器,采用地址译码方式来执行液晶控制、显示、绘制,以及存贮操作等指令。常用指令有:初始化,显示方式,移动光标,光标处的数据读和写等等。更改显示RAM中的数据,也就更改了液晶屏的相应内容。
作为现在流行的显示器件,液晶有其固有的优越性,但也有严重不足之处。相对CRT等显示器件而言,最主要缺陷是视觉效果差,亮度不足,视角偏小,响应速度慢(“拖尾”现象)。同时,根据前面的叙述,我们可以看到:由于硬件系统的局限性,显示RAM通过内部总线与控制器相连,微处理器对液晶显示RAM 的寻址采用了间接的端口译码方式,而不是速度更快的直接内存寻址。译码的延时会进一步减缓显示速度。表现在用户界面上,很可能出现刷新的延迟,屏幕的闪烁,以及余辉现象,都会引起视觉的不舒适。一方面降低了产品的档次,另外用户长时间操作时会导致眼睛的疲劳,产生厌倦情绪。
2. 基本介绍
无论是LCD还是CRT,进行绘图,都是在“画布”上做清除旧位置的图和重新画新位置的图的操作。当程序执行速度不够快时,我们会看到清除的操作与重画的操作,这就造成了闪烁现象。解决这个问题的方法之一,就是把清除与重画的操作放在另一张“画布”上完成,等到画完后再复制到最后要显示的“画布”上。这种绘图方式就是双缓冲。
实际上,图形的双缓冲显示方式,对于Windows程序设计员来说,一点也不陌生。以MFC绘图机制来说,CPaintDC就是要显示的画布,如果我们使用另外一个兼容的DC来做清除与重画的操作,再把整个DC的图像复制到CPaintDC,就可以避免屏幕闪烁的问题。对于多数嵌入式设备来说,由于MCU的处理速度要慢许多,因此在软件设计中,更需借鉴这种方法,以期提高显示速度,最大限度地降低液晶的显示缺陷。
3. 实现方法
双缓冲方式不仅可以提高液晶显示速度,还可以改善软件模块的封装性和可移植性。实现时,就是在系统存贮器中开辟一块显示RAM 的镜像缓冲区域,此区域保存了预备显示图像的“快照”。当更改屏幕内容时,先更改镜像区域的内容;需要显示时,才把“快照”数据刷新到显示RAM。这样对于用户界面而言,显示速度只取决于“快照”的送入速度。
下面,我们以两种常用的液晶控制器(T6963C和SED1335)为例,说明如何使用双缓冲的方式进行液晶的快速显示。为了简单起见,我们直接选用内藏驱动和控制器的典型图形液晶显示模块。
1) 基于T963C的液晶显示模块SMG24064B
SMG24064B是显示点阵为240*64、控制器为T6963C的液晶显示模块,工作环境是5V/10mA,生产厂家为长沙太阳人。许多液晶生产厂家都有和这款相兼容的产品,如大连东显、深圳拓普微、台湾晶采等。其接口信号说明如下:
表1 SMG24064B信号线说明
SMG24064B应用时,可以采用总线方式或者模拟口线方式。双缓冲方式只能采用总线方式,通过端口译码来实现。下图是一种典型的接口电路。图中的GAL实现地址译码,当然也可以采用74138等完成译码。译码输出信号连接到T6963C控制器的片选使能端CE,而数据命令选择端C/D可以接地址线A0。
图1 SMG24064B与8031的总线连接
这样,就得到了两个译码端口,一个端口作为控制口,向T6963C送入命令;一个端口作为数据口,向T6963C送入数据。采用地址译码方式来执行液晶控制、显示、绘制,以及存贮操作等指令。
显而易见,240×64液晶的显示RAM 空间为240/8×64=1920字节。而T6963C控制器内部自带8KB的RAM缓冲区,其中显示缓冲区首地址寄存器对应的后续1920字节的内容就映射到LCD屏幕的相应位置。这样,我们从嵌入式系统MCU扩充的外部RAM中分配1920字节作为镜像显示缓冲(软件编程也就是从外部RAM中分配1920字节的数组),来实现双缓冲显示。对于应用系统而言,如果扩展的外部RAM较大(如32KB)时,分配不到2KB的镜像显示缓冲,开销不算大;但却可以大大改善显示的速度。
这样,LCD的绘图程序,比如画点、画线、填充、字符串显示等,都是在镜像缓冲RAM中操作的;只有两个程序,LCD的初始化程序InitLCD(初始化液晶,设置液晶的显示模式等)和显示程序DisplayLCD(把镜像缓冲数据刷新到T6963C内的显示RAM缓冲),与底层硬件相关。下面是显示程序DisplayLCD的实现流程:
1、 设置液晶显示的起始0地址(数据口写入数据0x00和0x00,命令口写入数据0x24);
2、 设置液晶连续写模式(命令口写入数据0xb0);
3、 把镜像缓冲中的1920个数据连续送入数据口(数据口写入显示数据);
4、 中止液晶连续写模式(命令口写入数据0xb2)。
上述命令指令含义请参见液晶模块或者控制器相关资料。显示程序只在要最终显示的时候才调用,它决定了显示速度,我们可以专门对它进行优化,或者用汇编代码完成,实现最快的显示速度。
当然,如果系统扩展的RAM空间足够时,我们还可以采用三缓冲的方式,也就是在系统RAM中分配两块镜像区域。一块缓冲保存当前显示图形数据,另一块保存下一个图形数据,然后交替地把缓冲区的数据送入显示RAM,完成显示。这种方式适用于以下情况:用户界面的更新多数只是局部更新,因此通过比较两块缓冲数据的不同,显示时只需要送入当前缓冲中不相同的部分数据,可以进一步提高显示速度。
2) 基于SED1335的液晶显示模块EDM320240-2
EDM320240-2是显示点阵为320*240、控制器为SED1335的液晶显示模块,RAM的显示容量为32KB,生产厂家为大连东显。许多320*240的液晶,如DMF50081、LM32019P/T等,都可采用SED1335控制器。 实际上,对于较大的图形液晶,通常采用SED1330/1335系列控制器。此控制器功能强大,具有丰富指令集,与MPU接口有较强的I/O缓冲器,可以管理64K显示缓冲区。具备文本/图形显示特性。可以显示文本区和三个图形显示区的内容(通过软件初始化实现),其中三个图形显示区L1、L2、L3可以单独显示,也可以合成显示。如下图所示:
图2 EDM320240-2的图形显示区
显而易见,320×240的图形液晶显示缓存至少需要320/8×240=9600字节。而利用三区显示特性时,通过内部总线需要扩充显示RAM为9600×3=28800字节。因此,对于液晶模块厂家来说,硬件设计时通常扩充了32K的显示RAM,如62256。实际上,多数时候我们只用单区来显示就足够了。
在嵌入式应用中,如果需要液晶显示程序有较好的移植性,并且系统RAM足够大,足够分配9600字节的镜像缓冲的话,那么,最好就象上面的T6963C应用示例一样处理吧。分配9600字节的镜像缓冲后,所有的画点、画线、位图等操作,都是在镜像缓冲RAM中完成,你只需要在显示的时候,把镜像缓冲RAM中数据送到显示区。
如果应用系统没有足够的RAM,也不要紧。我们可以巧妙地应用SED1335提供的特性,把显示区L1,L2当成双缓冲,同样实现双缓冲的显示,一样可以使得屏幕画面变化时没有延时和闪烁现象。不过,此时的画点画线操作都与硬件相关,软件模块的移植性不够好。
具体叙述如下:首先关闭显示区L1,L2,L3;在显示区L1上完成“快照”(即画点画线操作),然后打开L1,即单独显示L1;画面变化时,就把变化后的画面“快照”到L2。当需要刷新显示时,关闭L1,打开L2即可。下次再关闭L2,打开L1。如此交替反复。
当然,SED1335具备3个显示区,有效利用可以完成更加有趣的应用,在此不多谈。下图为定时刷新显示的示意图:
图3 EDM320240-2的图形显示
4. 结束语
采用这种方法,具有很多好处:
1. 显示内容更改快。表现在用户界面上,几乎感觉不到刷新和闪烁。
2. 软件模块封装好。菜单编程模块和刷新显示模块分开。菜单编程模块与具体硬件无关,只对镜像RAM操作。刷新模块才和硬件相关。软件的更改和移植方便。
3. 可以轻松完成许多特技效果,如画面的滚动,平移推拉,交错,百叶窗等。
4. 由于用户界面保存于镜像RAM中,还方便实现远程诊断等功能。
综上所述,双缓冲方式不仅可以实现液晶的快速显示,尽可能地避免屏幕闪烁,延迟,余辉等现象,还可以实现许多有趣和特殊的显示。这种思想也适用于文本型液晶的快速显示,同样也适用于CRT等其他有较大显示容量的显示器件。运用之妙,在乎各人了
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议