首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年8月19日星期一
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
点阵式液晶任意图片显示的实现
Realization of Display Random Photograph for Dot Matrix LCD

长江大学电子信息学院 孙先松


本文在分析传统Windows BMP图片格式和LCM图像显示原理的基础上, 详细地设计了BMP图片到LCM图片数据格式转换程序、LCM模拟显示程序和LCM显示控制程序,实现了对任意图片在液晶上的显示, 为广大电子设计人员设计液晶界面找到了一条简单、实用、高效的途径。



引言

液晶显示器(Liquid Crystal Display,LCD )具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示无法比拟的优点,不仅可以显示数字、字符,还可以显示汉字及各种图形、图片,可实现屏幕上下左右滚动、动画、反转显示、显示闪烁多种功能,日益成为智能仪器仪表和测试设备的首选显示器件。目前常用的LCM12864系列的液晶模块,一般都没有图形驱动模块,而图形作为一种更为生动的表现方式,是用户需求的重点和设计的亮点。如何在这种点阵式液晶显示器中显示任意静态图片以及动画, 成为困扰设计者大量应用LCD的问题。我们现在可以通过互联网、图形处理软件及扫描仪等很方便地获得各种各样的图像、图片,这样可以通过比较简单的方法把任意图片移植到液晶显示器LCD上。文章通过分析BMP图像的存储格式和128 64点阵LCD上图像显示的原理,设计了一个LCD图片数据转换及模拟显示的软件,并介绍了实现LCD意图片的显示方法。


BMP图片格式及LCD显示原理

BMP位图是微软公司(Microsoft)和国际商用机器公司(IBM)共同倡导的一种图片格式。它按点阵排列顺序,将每个像素的色彩值以规定的方式把整个图片记录下来。根据色彩位深度不同,Windows BMP文件像素描述部分差别较大,如256色每个像素需要8位(即1个字节)来描述,而16色的图片每个像素描述者只需4 位(即半个字节)。对于绝大部分电子设计者来说,最常用的是黑白二色的点阵式液晶显示器。因此,这里仅分析对Microsoft Windows类型1位(Bit)描述的黑白二色BMP图片文件的处理。

一幅128 64点阵的黑白BMP图片文件的总长度为1086字节,前62个字节是文件头,用于表示文件类别、长度、图像的行数以及列数等信息,地址为00H~3DH;后1024字节则对应画面的点阵数据,地址为3EH~43DH。BMP文件的中字节排列与点阵数据对应关系如图1 所示,BMP点阵数据块第0个字节对应图片中左下角第63行的第0到7列,第15个字节对应图片中第63行的第112到127列,也就是按照从左至右,从下到上的顺序,BMP数据块最后一个字节对应第0行的112到127列。因此,要想实现将BMP图片文件转化为供模块直接显示的数据,不但涉及到各个数据排列的先后顺序,还涉及到字节中各个位的重组。

对于RT12864HZ汉字图形点阵液晶显示模块,它可显示汉字及图形,内置8192个中文汉字(16 16点阵)、128个字(8 16点阵)及绘图显示RAM(GDRAM)。绘图显示RAM提供128 8个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会自动加一;在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM的步骤如下:

(1) 关闭绘图显示功能。
(2) 先将水平的位元组坐标(X)写入绘图RAM地址;再将垂直的坐标(Y)写入绘图RAM地址;将D15~D8写入到RAM中;将D7~D0写入到RAM中。
(3) 打开绘图显示功能。

绘图显示的缓冲区与图形点阵对应分布参考图2所示(水平方向X以字节单位,垂直方向Y以位为单位)。

图1 位图BMP文件中点阵数据顺序与图形点阵关系图(略)

图2 图形显示坐标与GDRAM映射关系图(略)


点阵式液晶任意图片显示的实现

用DELPHI语言转换BMP图片数据

Windows中的画图软件为图片编辑提供了放大、网格、旋转、定位、定幅等强大、实用而灵活的功能,同时有输入各种字体及大小的汉字的功能,是编辑画面的理想工具。打开菜单[图像]下的[属性]项,设置任意图片宽度为128,高度为64,单位为像素,颜色为黑白。保存的BMP文件经过下面DELPHI编写的函数s_copyfile()便可转换为LCD模块显示的点阵数据,数据以单片机数据表定义的格式放在Memo1中,可以直接拷贝至LCM控制汇编程序中当数据表用,如图3所示。另外使用了heckBox1控件来使图片反白。

图3 BMP图片转换为LCM点阵显示的数据表(略)

函数s_copyfile()的源程序如下[4]:
function s_copyfile(filesou:string;filedes:string):boolean;
var
FromF, ToF: file;
s,t:string;
i,j,NumRead, NumWritten: Integer;
tem: array[1..62] of Char;
Buf: array[1..16] of Char;
begin
{$I-}
s_copyfile:=false;
if not fileexists(filesou) then
begin
showmessage('没有发现源文件'+#13+filesou);
exit;
end;
assignfile(fromf,filesou);
assignfile(tof,filedes);
Reset(FromF,1);{ Record size = 1 }
main.Memo1.Clear;
main.Memo3.Clear;
BlockRead(FromF, tem, SizeOf(tem), j);
j:=1;
repeat
s:=' DB ';
t:='';
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
for i:=1 to NumRead do
begin
if main.CheckBox1.Checked then buf[i]:=chr
(255-ord(buf[i]));
appendstr(t,IntToHex(ord(buf[i]),2));
if ord(buf[i])>159 then
AppendStr(s,'0'+IntToHex(ord(buf[i]),2)
+'H,')
else
AppendStr(s,IntToHex(ord(buf[i]),2)
+'H,');
end;
delete(s,length(s),1);
main.memo1.Lines.Append(s);
main.memo3.Lines.Append(t);
inc(j);
until (NumRead = 0);
main.Memo1.Lines.Delete(main.Memo1.Lines.
Capacity-1);
CloseFile(FromF);
CloseFile(ToF);
s_copyfile:=true;
end;

LCD模拟显示

图4 原始的BMP图片(略)

图5 BMP图片正常的模拟显示图(略)

图6 BMP图片反白的模拟显示图(略)

对于如图4所示的一张128 64的BMP图片,其模拟显示如图5所示,反白后显示如图6所示。

有的LCM数据是奇偶行交错的,也可以通过使用隔行来改变。模拟显示的源程序主要是采用在画布上画矩形框的方法,语句如下:

Image1.Canvas.FillRect(rect(16*S_col+4*i,
4*S_row,16*S_col+4*i+3,4*S_row+3));
其中S_col为行坐标(1~64),S_row为列坐标(0~31),每个字节分高4位与低4位分别来画矩形框。当高4位或低4位值为1~F时,对应的i分别如表1所示。

表1:数据高4位/低4位的值与绘图语句中i的取值对应表(略)

LCD显示控制程序设计

LCM内部带有8K字节的RAM缓存区,往RAM缓存区写入数据,则在LCD 显示屏上产生显示。通过改变显示缓存区首地址可实现屏幕滚动、屏幕换页等功能。

GRAPHIC_DISP:

LCALL CLEAR_GRAPHIC ;清除图形显示RAM单元(GDRAM)
MOV G_ROW, #80H ;设定图形显示起始行单元
MOV G_COLUMN, #80H ;设定图形显示起始列单元

GRA_DISP:

MOV A, #34H ;选择扩充指令集,关闭图形显示
LCALL INPUT
MOV A, G_ROW ;输入图形显示起始行地址
LCALL INPUT
MOV A, G_COLUMN ;输入图形显示起始列地址
LCALL INPUT
MOV A, #30H ;重新选择基本指令集
LCALL INPUT
CLR A
MOVC A, @A+DPTR ;输入显示数据(横向高8位数据)
LCALL DISPL
INC DPTR
CLR A
MOVC A, @A+DPTR ;输入显示数据(横向低8位数据)
LCALL DISPL
INC DPTR
INC G_COLUMN ;列地址加一
MOV A, G_COLUMN
CJNE A, #90H, GRA_DISP ;最后一列地址为90H(共计16列)
MOV G_COLUMN, #80H
INC G_ROW ;行地址加一
MOV A, G_ROW
CJNE A, #0A0H, GRA_DISP ;最后行地址为0A0H
MOV G_COLUMN, #80H
MOV G_ROW, #80H
MOV A, #36H ;打开图形显示
LCALL INPUT
RET

在上面程序中,是与图2所示的GRAM映射的点阵坐标一样,分成0~15列,每列写2个字节数据,共有32行。CLEAR_GRAPHIC为清除图形显示CGRAM的子程序,INPUT为写指令子程序,DISPL为写数据子程序,这里不再详细列出。另外硬件设计时,注意空脚(NC)应悬空,不能接地。调试时,适当调整液晶显示偏压信号V0,使之在一合适电压,这一电压若设置不当,LCM 无法正常工作。


结束语

按照上面分析的方法,可以方便的在液晶上显示任意图片。点阵的LCD模块还可实现屏幕合成、滚动、动画、闪烁等功能,正越来越受到广泛的应用和关注。需要指出的是,由点阵液晶显示器件与相应的控制器、驱动器装配成的显示模块的种类较多,其功能、指令、接口定义及引脚并无统一标准,具体使用时应加以选择。

《世界电子元器件》2005.8
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com