技术中心
 
 

虚拟LCD显示模块的设计

   日期:2011-04-29     来源:互联网    
核心提示:LCD在人们生活中的应用越来越广泛,手机、车载系统及工业测量设备等都把LCD作为重要的人机接口,将使用者需要的信息显示出来。这种方
LCD在人们生活中的应用越来越广泛,手机、车载系统及工业测量设备等都把LCD作为重要的人机接口,将使用者需要的信息显示出来。这种方法是通过微处理器如单片机输出图形数据,再由LCD显示模块根据该图形数据进行显示[1-3]。其缺点是需要在LCD的像素排列和程序逻辑设计中花费大量的时间,而且在进行不同LCD显示模块的驱动设计时,要根据该LCD的驱动模块重写驱动程序,导致系统开发周期长、成本增加[4]。
本文介绍一种使用虚拟技术实现LCD显示模块的方法以弥补前述方法的不足。该方法通过在单片机的RAM中建立缓冲区数组并对虚拟LCD的显示数据进行存储后,将显示数据传递给PC机,再对这些数据进行处理后构建虚拟LCD以显示字符或者图形。
1 虚拟LCD显示模块的结构
虚拟LCD显示模块的功能结构如图1所示。虚拟LCD显示模块主要由4×4按键输入单元、缓冲区单元、串口通信单元、数据接收单元、显示数据处理单元、虚拟LCD界面组成。其中,4×4按键输入单元负责选择需要的虚拟LCD界面的大小及输入显示数据,这些信息由BTF020单片机存储在缓冲区单元中;缓冲区单元通过所建的二维数组将数据分配给不同的存储单元;串口通信单元根据BTF020单片机的命令负责将缓冲区单元中的数据发送给PC机;PC机中的数据接收单元负责接收串口通信单元发出的数据;显示数据处理单元根据数据接收单元送出的数据进行数据转换和处理,以便构建虚拟LCD界面;虚拟LCD界面负责将送入的字符或者图形数据显示出来。 2 虚拟LCD显示数据的处理
2.1显示缓冲区及数组的建立

虚拟LCD的分辨率可根据BTF020发送的数据确定并采用分页纵向显示。在BTF020中建立一个缓冲区来存放需要显示的数据,然后将这个缓冲区中的数据发送给PC机,由PC机将接收到的BYTE类型数据还原成8位二进制码,然后再对该二进制码进行逐位解析并按顺序进行处理和显示。当虚拟LCD的分辨率确定为256×256,显示色为单色时,串口传输的数据为8位二进制码,因此建立一个二维数组LCDdata[31][255]作为虚拟LCD的字符显示缓冲区,共32页(0~31)、256列(0~255)。该虚拟LCD的显示缓冲区分布如图2所示。
2.2 字符的处理与显示
虚拟LCD显示汉字前需先取模。汉字的字模分成上下两个部分,当显示规格为16×16点阵的汉字时,取模走向为纵向且高位在前。可先对上半部分从左到右取模,然后对下半部分从左到右取模,再将该汉字所占的像素点标为“1”,其余标为“0”,从左到右开始取字模的结果并以十六进制表示。以同样的方法,再对下半部分取模,其结果仍以十六进制表示。此时,将这两次的结果结合起来就可得该汉字的字模。在取完字模后,把该字的字模预先存储到一个一维数组中,然后确定汉字显示于屏幕的位置。由于汉字显示是以页和列为定位坐标,单个汉字不跨页显示,因此可以调用汉字显示函数来显示汉字,这样通过替换显示缓冲区中的数据就可以达到显示汉字的目的。该汉字显示函数为:
void Write_word(int y,int x, unsigned char word [ ]
其中,y代表页,x代表列,word代表希望显示的字的字模。图3为汉字显示流程。虚拟LCD显示规格为8×16点阵的数字0~9时,取模走向为纵向,高位在前,点阵格式为阴码,取模方式为行列式。
通过调用数字显示函数进行显示,这样通过替换显示缓冲区中的数据就可以达到显示数字的目的。该数字显示函数为:
void Write_num(int y,int x,int number)
2.3 点、直线和矩形的处理与显示
汉字在纵向的显示处理是按页计算,而点在纵向的显示处理是按行计算,其计算方式与列的计算方式相同。把整个虚拟LCD屏幕分成255行、255列,则该虚拟LCD的图形显示缓冲区分布如图4所示。
按照以上分布规则,通过调用画点函数可在屏幕上画点。该画点函数为:
void Point(int x,int y)
该函数中横坐标可被系统识别,而纵坐标须转换成页的表示形式才能被系统识别。将纵坐标转换成页地址时先确定画点所在页,由于一页中纵方向上有8个坐标点,因此可用整除的方式得到确定的页地址。表1表示一页中点亮像素点的数据与整除y时得到的余数的关系。 设:点亮像素点的数据为add值,LCDdata [ ][ ]为显示缓冲区数组,y/8为页地址,x为列地址,则可得到显示缓冲区。该显示缓冲区的数据为:
LCDdata[y/8][x]=add+LCDdata[y/8][x]
按上述方法得到画点的坐标后,再根据虚拟LCD显示线段的坐标,在确定的方向上依次进行点的显示。画横线的函数定义为:
void HLine(int x1,int x2,int y)
式中,x1、x2分别为横线的横坐标起始、结束点,y为纵坐标。
画竖线的函数定义为:
void SLine(int x,int y1,int y2)
式中,x为竖线的横坐标,y1、y2分别为竖线纵坐标起始、结束点。
画矩形的函数定义为:
void Rectangle(int x1,int y1,int x2,int y2)
式中,x1为矩形左上角横坐标,y1为矩形左上角纵坐标,x2为矩形右下角横坐标,y2为矩形右下角纵坐标。
3 实验
进行实验时采用VB6.0语言编程,图5是用上述方法虚拟的分辨率为256×256的LCD显示界面,该虚拟LCD界面的左上角的坐标为(0,0),右下角的坐标为(255,255)。界面中像素点以一个方格表示,初始界面由绿色方格组成,当期望的像素点进行点亮显示时该位置为黑色方格。 完成上述界面中字符和图形显示功能的语句为
Rectangle(50,30,200,100); 画边框
Write_word(6,128,peng); 写“鹏”
Write_num(8,111,0); 写“0”
Write_num(8,119,5); 写“5”
Write_num(8,127,2); 写“2”
Write_num(8,135,2); 写“2”
Write_comm( ); 缓冲区发送到PC
通过显示缓冲区的数组存储虚拟LCD的显示数据,然后将数据传送给PC机,再用VB6.0语言对这些数据进行处理并构建虚拟LCD的显示界面,可以正确显示字符、点、线和矩形等图形。所建的虚拟LCD显示模块具有开发简便、快速、通用性强的特点。
参考文献
[1] 刘冬生,曾晓雁. 液晶显示控制器SED1330/SED1335/SED1336/E1330的应用[J].电子技术应用,2004,30(2):
71-73.
[2] 吴捷,陆锋,左剑. 图形液品显示控制器SI D13503在单片机系统中的应用[J].信息化研究,2009,35(11):54-56.
[3] 潘敏,焦生杰,翁寅生. 基于DSP和ST7920的液晶显示模块的实现. 电子技术应用, 2007,33(6):48-50.
[4] 王震, 谢丁龙. 点阵LCD 显示模块通用驱动程序的开发[J]. 许昌学院学报, 2005,24(5):84-87
 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢