随着图形点阵液晶显示模块在各行各业的逐步使用,使得人机界面变得越来越直观,尤其对于国内大多数需要有汉字和图形显示的用户来说,显示界面的友好与否,将直接影响到其产品的形象和市场竞争力,但一般涉及有关图形点阵液晶模块显示界面开发的技术人员由于缺乏经验而往往感到力不从心,尤其当用户的控制电路资源非常缺乏的条件下(如家用电器),图形点阵液晶模块则更是望尘莫及,而市面上所能见到的仍是那些“不顾客户死活而又自认清高”的传统型液晶显示模块,虽然其成本已经降到普遍能接受的地步,但还是因其控制方法的特殊性和复杂性严重阻碍液晶显示器的推广应用。
针对目前的这种状况,深圳联合电子有限公司开发出一种图形点阵液晶模块,将LCD所有的底层操作集成于模块内的MCU中,这样其控制就变得极为容易,占用户资源最少,并且所有显示界面的编辑及调试全部在电脑上独立完程,整个过程一目了然,极大地方便用户编写显示界面的控制软件,从而也提高了LCD液晶显示模块在产品中的附加值。
可视化编程LCD模组技术特性:
1.模块显示点阵数(分辨率)128X64,192X64,256X64三种可选;
2.内含高速MCU及64KB用户显示资料现场可编程FLASH;
3.标准RS232串行通讯控制,只占用户两根口线,小马拉大车成为可能;
4.配备仿真调试软件,在电脑上独立完成显示界面的编辑,资料下载,仿真调试;
5.简单又丰富的控制命令使模块显示的控制易如控制一只LED;
6.用户可随时改写显示资料,现场编程易如反掌,显示界面无限升级;
7.模块提供忙信号输出,以检测模块状态;
用户首先在电脑上完成LCD显示界面的编辑,资料下载及仿真调试工作,所配仿真调试软件可使用户方便的进行上述工作,在硬件上除可视化编程LCD模组之外还配有一块电脑RS232电平转换转接板,此板负责模块与电脑联接和对模块的供电,模块与电脑联接图示如下。
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" src="http://www.weeqoo.com/uploadfile/2009/10/20/2009102014133229011.jpg" border=0>
图1 模块与电脑的联接
将所配仿真调试软件Visual LCM1.0安装在电脑上(运行附带软盘中INSTALL.BAT),安装前注意要先将电脑里正在运行且占用串口的程序关闭,安装完毕屏幕上即出现如下软件主界面:
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" src="http://www.weeqoo.com/uploadfile/2009/10/20/200910201413323928.jpg" border=0>
图2 仿真调试软件主画面
当鼠标移动到某可操作对象上停留一会儿,就会有相应的操作提示,建议操作前请先将各功能浏览一遍,以便先对操作有个感性认识。
在模块与电脑联接之前,用“图文编辑”将LCD预显示位图画好存档,注意所作位图必需是黑白的单色位图且需旋转270度,将画好的位图通过“添加”一一列入“下载位图排序”中,把模块设为编程模式(JP1选择)与电脑由RS232转换板相接并通电,在“串口选择”中选好模块所接串口,用“状态测试”检查连线和串口号及电源是否正常,若联机成功,模块资料下载界面则显示“联机测试OK!”,同时主画面中“下载资料”xx,点击后电脑将排序列表中的位图按序号由小到大一一下载到模块内FLASH中,下载时间与列表中位图总和大小成正比,结束时模块显示“下载资料OK!”,此时将模块断电
, 设其为正常模式再加电,用“状态测试”告电脑模块此时已为正常模式,通过点击“浏览资料”可在LCD屏上以点(00,00)为顶点一一观察刚刚下载的所有位图,且顺序与排序列表中的相同,也可直接点击排序列表中的位图进行浏览,所有位图无误后,可进行LCD显示界面的仿真调试。
LCD显示界面的生成用六种命令来实现,在主画面的“发送命令”下边的命令列表框中罗列出这六种命令的含义及语法规则,若输入错误的命令将会提示错误信息,命令及各参数说明如下:
以下是针对图三以及相应程序的参数定义和说明:
命 令 格 式 功 能 说 明 :
1 BMPnxy 在以点(x,y)为顶点处显示位图n
2 CLR xx屏上所有显示
3 CLSxywh xx以点(x,y)为顶点,宽w高h的距形
4 INVxywh 反色以点(x,y)为顶点,宽w高h的距形
5 SDTxy (CDTxy) 在点(x,y)处画点(在点(x,y)处灭点)
n 0=x 0=y 0=w 0h 0各参数在128X64LCD显示屏上图示如下:
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" src="http://www.weeqoo.com/uploadfile/2009/10/20/2009102014133295208.jpg" border=0>
图3 命令参数在128X64模块显示屏上示意
在主画面的“发送命令”左边的命令输入框中输入正确的命令后点击“发送命令”,此时LCD屏上会有相应的显示动作,若在调试过程中发现要修改某位图时可以用“图文编辑”
重新修改后按前述步骤再一次下载位图,直到对显示界面满意为止。
最终要将模块脱离电脑通过模块上的SIO接入用户控制电路中运行,SIO定义如下:
PIN1:模块背光电极1(LED背光时为负极,EL背光时为交流驱动电极1);
PIN2:模块背光电极2(LED背光时为直流正5伏,EL背光时为交流驱动电极2);
PIN3,PIN5:模块逻辑电源地;
PIN4:模块逻辑电源直流正5伏;
PIN6:模块内MCU外部复位,高有效,防死机时用;
PIN7:模块忙信号,低为忙,高为闲;
PIN8:模块显示控制命令串行输入,通讯协议为(9600,n,8,1),即9600波特率,无校验位,8个数据位,1个停止位。
现举例说明模块如何与单片机AT89C2051接口,为保证波特率的准确,建议AT89C2051用11.0592MHz的晶体,联接图示如下:
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" src="http://www.weeqoo.com/uploadfile/2009/10/20/2009102014133214726.jpg" border=0>
图4 单片机AT89C2051与模块128X64的联接
在编写单片机AT89C2051的控制软件时需注意以下事项:
1.串行口模式设为模式1(1个起始位,8个数据位,1个停止位);
2.波特率设为9600(TH1=TL1=0FDH,SMOD=0;TH1=TL1=0FAH,SMOD=1);
3.在发送命令之前需检测模块为闲态(PIN7=1),否则所发的命令可能失效;
4.串口发送的必须是完整命令的ASCII码,如命令“BMP0B0C0D”,实际由串口发送的内容是“424D50304230433044”,顺序为 “B->M->P->0->B->0->C->0->D”;
5.在每条命令末尾还要加上命令结束码“0D”,以表明命令结束。
6.若单片机AT89C2051的串口已被占为他用,那么用一根口线来摸拟生成一个软串口即可。
7.模块SIO接口中PIN6的作用是当模块内MCU由于干扰死机时,用户控制电路可强行外部复位,使模块脱离死机状态,判断模块是否死机可通过向其发送正确的显示命令后,PIN7电平是否有变化来得知,实际上模块在完成每条命令内部操作后即进入睡眠状态,死机的机率是极低的。在下面的软件中未考虑死机的情况。
用MCS-51汇编语言编写简单的显示控制源程序如下(实际运行已通过):
BUSY BIT P3.0 ;定义忙信号口线,当然也可定义为其他口线
X_V EQU 30H ;定义各参数单元
Y_V EQU 31H
NUBER EQU 32H
WIDTH EQU 33H
HIGHT EQU 34H
REG_ASC_XH EQU 35H ;定义参数x高位ASCII码单元
REG_ASC_XL EQU 36H ;定义参数x低位ASCII码单元
REG_ASC_YH EQU 37H ;定义参数y高位ASCII码单元
REG_ASC_YL EQU 38H ;定义参数y低位ASCII码单元
REG_ASC_NH EQU 39H ;定义参数n高位ASCII码单元
REG_ASC_NL EQU 3AH ;定义参数n低位ASCII码单元
REG_ASC_WH EQU 3BH ;定义参数w高位ASCII码单元
REG_ASC_WL EQU 3CH ;定义参数w低位ASCII码单元
REG_ASC_HH EQU 3DH ;定义参数h高位ASCII码单元
REG_ASC_HL EQU 3EH ;定义参数h低位ASCII码单元
ORG 00H ;程序开始
AJMP MAIN
ORG 30H
MAIN:
MOV SP,#60H ;设堆栈指针
LCALL INIT_SIO ;初始化串口
MOV X_V, #0CH ;在x=12,y=13为顶点处显示位图11
MOV Y_V, #0DH
MOV NUBER, #0BH
LCALL ORDER_BMP ;发送位图显示子程,其它命令类似
AJMP $ ;观察LCD显示屏
INIT_SIO:
MOV SCON,#50H ;串行口:方式1
MOV TMOD,#21H ;定时器T1为波特率发生器,方式2
MOV TH1,#0FDH ;波特率=9600, Fosc=11.0592MHz
MOV TL1,#0FDH ;SMOD=0
SETB TR1 ;启动T1
RET
ORDER_BMP: MOV A,X_V
MOV R0, #REG_ASC_XH
LCALL H_ASC ;将参数x转换为两个字节的ASCII码
MOV A,Y_V
MOV R0, #REG_ASC_YH
LCALL H_ASC ;将参数y转换为两个字节的ASCII码
MOV A,NUBER
MOV R0, #REG_ASC_NH
LCALL H_ASC ;将参数n转换为两个字节的ASCII码
LCALL BUSY_CK ;检测模块状态
MOV A, #“B” ;先发送命令码BMP的ASCII码
MOV SBUF, A
JNB TI, $
CLR TI
MOV A,#“M”
MOV SBUF, A
JNB TI, $
CLR TI
MOV A, #“P”
MOV SBUF, A
JNB TI, $
CLR TI
MOV R0, #REG_ASC_NH
LCALL SEND_CS ;发参数n的ASCII码
MOV R0, #REG_ASC_XH
LCALL SEND_CS ;发参数x的ASCII码
MOV R0, #REG_ASC_YH
LCALL SEND_CS ;发参数y的ASCII码
MOV A,#0DH
MOV SBUF, A ;发送命令结束标志“0DH”
JNB TI, $
CLR TI
RET
BUSY_CK: JNB BUSY, $ ;等待模块为闲状态
RET
SEND_CS: MOV A,@R0
MOV SBUF, A
JNB TI, $
CLR TI
INC R0
MOV SBUF, A
JNB TI, $
CLR TI
RET
H_ASC: MOV B, A ;将一字节的十六进制数转换为两字节的ASCII码
ANL A, #0F0H
SWAP A
CJNE A, #9, PD_G
XY9: ADD A, #30H
TURN_LOW: MOV @R0, A
AJMP LOW_BIT
PD_G: JC XY9
ADD A, #37H
AJMP TURN_LOW
LOW_BIT: MOV A, B
ANL A, #0FH
CJNE A, #9, PD_G1
XY_9: ADD A, #30H
TURN_LOW1: MOV @R0, A
RET
PD_G1: JC XY_9
ADD A, #37H
AJMP TURN_LOW1
END
结束语:对那些正准备用图形点阵模块来完善人机界面和提高产品档次的广大用户来说,我们真诚盼望您的产品构思能迅速变成实物,其实这也正是您所希望的,可视化编程LCD模块必然能助您一臂之力。