关键词:图形液晶模块 中文字库 单片机
引 言
1 概 述
由于图形点阵液晶显示模块具有显示信息丰富(可显示汉字、字符、曲线、图形)、功耗低、体积小、质量轻、寿命长、不产生电磁辐射污染等优点,因而是单片机系统中理想的显示器件。近年来被广泛应用于单片机控制的智能仪器仪表、工业控制领域、通信器材和家用电器中。目前,国内在单片机系统中用于中文显示时,使用的液晶显示模块主要存在以下几方面的不足。
① 占用ROM空间大。以图形方式显示汉字,每个汉字将占用32字节的ROM空间,因此限制了显示汉字字符的数量。此点对内部Flash闪存数量较小的单片机,影响尤为严重。
② 与单片机的硬件接口电路复杂。该类型模块除使用8根数据线外,尚需使用片选、寄存器选择、读/写选择、使能控制等控制线,使得对单片机的硬件资源占用较为严重。
③ 接口时序复杂,软件编程繁复。
上述的几点内容限制了液晶显示技术在单片机系统中的应用。
这里介绍的OCMJ5X10是160×80点阵的中文图文液晶图形显示器模块。该模块的内部由于含有国标一级简体字库,使得汉字的显示异常方便;同时,该模块与单片机的硬件接口除数据总线外,仅使用了REQ/BUSY两根握手信号线,简化了与单片机的硬件接口电路设计。上述特点对软件、硬件资源均十分紧张的单片机系统来说是十分重要的。
图1 OCMJ5X10写汉字时序图
2 主要特点及引脚定义
以下是OCMJ5X10中文液晶显示模块的主要特性。
① OCMJ5X10中文液晶显示器模块内含 GB 2312 16×16点阵国标一级简体汉字和 ASCII 8×8(半高)及8×16(全高)点阵英文字库。用户输入区位码或 ASCII 码即可实现文本显示。
② OCMJ5X10中文液晶显示模块也可用作一般的点阵图形显示器,提供位点阵和字节点阵两种图形显示功能。用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的图形点阵模块。
③ OCMJ5X10中文液晶显示模块可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。
④ OCMJ5X10中文液晶显示模块具有上/下/左/右移动当前显示屏幕及清除屏幕的命令,一改传统的使用大量的设置命令进行初始化的方法。OCMJ5X10 中文模块所有的设置初始化工作都是在上电时自动完成的,实现了“即插即用”;同时,保留了一条专用的复位线供用户选择使用,可对工作中的模块进行软件或硬件强制复位。规划整齐的10个用户接口命令代码,非常容易记忆。标准用户硬件接口采用REQ/BUSY 握手协议,简单可靠。
⑤ OCMJ5X10中文液晶显示模块使用+5V单电源,同时由模块内部提供显示驱动负电压,简化了系统电源的设计。该模块还具有LED背光源。
OCMJ5X10中文图文液晶显示器的引脚说明如表1所列。
表1 OCMJ5X10引脚说明
引 脚 | 名 称 | 方 向 |
说 明 |
1 | VLED- | I | 背光源负极(LED-OV) |
2 | VLED+ | I | 背光源正极(LED+5V) |
3 | VSS | I | 地 |
4 | VDD | I | (+5V) |
5~12 | DB0~DB7 | I | 数据0~7 |
13 | BUSY | O | =1,已收到数据并正在处理中; =0,模块空闲,可接收数据 |
14 | REQ | I | 请求信号,高电平有效 |
15 | RES | I | 复位信号,低电平有效 |
16 | NC | ||
17 | RT1 | LCD灰度调整,外接电阻端 | |
18 | RT2 | LCD灰度调整,外接电阻端 |
3 硬件接口协议及接口时序
OCMJ5X10模块与CPU的接口除了使用DB0~DB7口8根数据线外,仅使用了REQ和BUSY两根控制线,构成请求/应答(REQ/BUSY)握手方式,省略了传统模块接口方式的片选、读写控制、指令/数据选择、使能控制等控制线,从而使硬件接口及软件时序变得非常简单。在硬件资源十分紧张的应用系统中,也可采用REQ单线延时控制方式,从而把硬件资源占用降至最低。接口协议如下:当BUSY线为高电平时(BUSY =1),表示模块忙于内部处理,不能接收用户命令;而BUSY为低电平时(BUSY =0),表示模块空闲,等待接收用户命令。CPU可在BUSY为低后的任意时刻开始发送命令。首先,把用户命令的当前字节放到数据线上,接着发送高电平REQ 信号,通知模块,请求处理当前数据线上的命令或数据。模块在收到外部的REQ高电平信号后,立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理。此时,用户对模块的写操作已经完成,可以撤消数据线上的信号并可做模块显示以外的其它工作,也可不断地查询BUSY是否为低。如果BUSY =0,说明模块对用户的写操作已经执行完毕,可以再送下一个数据。如向模块发出一个完整的显示汉字的命令,包括显示坐标及汉字代码在内共需5个字节,模块在接收到最后一个字节后,才开始执行整个命令的内部操作;因此,最后一个字节的应答BUSY 高电平(BUSY =1)持续时间较长。这里以写入汉字命令的时序为例,给出 图1所示的OCMJ5X10时序图,对应的具体时间参数说明如表2所列。
表2 OCMJ5X10模块时间参数
编 号 | 参数名称 | 最小值 | 最大值 |
说 明 |
1 | tr/μs | 0.4 | - | 数据线上数据稳定时间 |
2 | tb/μs | 2 | 20 | 最大模块响应时间 |
3 | trt/μs | 11 | - | 最小REQ保持时间 |
4 | ts1/μs | 20 | 45 | 最大数据接收时间 |
5 | ts2/ms | - | 30 | 最大命令指令处理时间 |
4 用户命令
OCMJ5X10模块共有3类10条命令,每条命令分为操作码和操作数两部分,操作数为十六进制数。下面介绍该模块的用户命令。
(1)显示国标汉字
命令格式 F0 XX YY QQ WW
XX:以汉字为单位的屏幕行坐标值。
YY:以汉字为单位的屏幕列坐标值。
QQ WW:坐标位置上要显示的GB 2312汉字区位码。
OCMJ5X10模块由于内部含有中文字库,因此中文字符的显示非常简单,只需给出该汉字的区位码即可显示该字。区位码表可参见GB2312字符集。
(2)显示8×8 ASCII字符
命令格式 F1 XX YY AS
该命令为4字节命令(最长执行时间为0.8ms,ts2= 0.8ms)。
XX:以ASCII码为单位的屏幕行坐标值。
YY:以ASCII码为单位的屏幕列坐标值。
AS:坐标位置上要显示的ASCII 字符码。
(3)显示8×16 ASCII字符
命令格式 F9 XX YY AS
操作数意义同上。
(4)显示位点阵
命令格式 F2 XX YY
该命令为3字节命令(最长执行时间为0.1ms,ts2= 0.1ms)。
(5)显示字节点阵
命令格式 F3 XX YY BT
该命令为4字节命令(最长执行时间为0.1ms,ts2= 0.1ms)。
(6)清 屏
命令格式 F4
该命令为单字节命令(最长执行时间为11ms,ts2=11ms),其功能为将屏幕清空。
(7)上 移
命令格式 F5
该命令为单字节命令(最长执行时间为25ms,ts2=25ms),其功能为将屏幕向上移动一个点阵行。
(8)下 移
命令格式 F6
该命令为单字节命令(最长执行时间为30ms,ts2=30ms),其功能为将屏幕向下移动一个点阵行。
(9)左 移
命令格式 F7
该命令为单字节命令(最长执行时间为12ms,ts2=12ms),其功能为将屏幕向左移动一个点阵行。
(10)右 移
命令格式 F8
该命令为单字节命令(最长执行时间为12ms,ts2=12ms),其功能为将屏幕向右移动一个点阵行。
图2 OCMJ5X10液晶显示模块与AT89C52单片机的接口电路
5 具体应用
由于OCMJ5X10内部具有中文字库,且使用了简单的两线握手协议,因而将其应用在嵌入式系统中,可简化显示电路的硬件接口设计及软件编程。虽然模块与单片机之间数据的传输采用并行模式,占用单片机系统的硬件资源相对较多,但是相应显示软件的编制却要比采用串行接口模式的中文字库液晶模块相对简单。尤其是图形显示界面设计,利用OCMJ5X10提供的显示字节点阵命令(线绘图),可方便、快捷地绘制出显示图形。此点在绘图速度、ROM空间占用等方面优于串行接口模式的液晶模块。下面给出OCMJ5X10在嵌入式系统中的具体应用,包括硬件接口电路及软件编程。
5.1 硬件接口电路
这里以AT89C52单片机为例,给出OCMJ5X10液晶显示模块与单片机的接口电路。单片机与模块采用间接控制方式和REQ/BUSY握手方式。AT89C52的P1.0~P1.7口与模块的DB0~DB7数据线相连,P3.4与模块BUSY线相连,P3.5与模块REQ线相连;晶振为12MHz,模块采用上电自动复位。AT89C52与OCMJ5X10的接口电路如图2所示。
5.2 显示软件
下面给出与上述硬件电路配套的显示子程序。其包括初始化、显示汉字、显示8×16点阵ASCII字符、点绘图及线绘图子程序。可根据显示需要在主程序的相应位置调用,即可实现相应的显示功能。OCMJ5X10内部含有GB 2312一级字库,可满足绝大部分应用系统汉字显示的需要。对于一级国标字库内所没有的汉字或需要显示复杂图形时,可通过调用绘点及绘线子程序来实现任意复杂汉字或图形的显示。
;位定义
BUSY BIT P3.4
REQ BIT P3.5
;数据定义
X DATA 30H ;屏幕行坐标缓冲区
Y DATA 31H ;屏幕列坐标缓冲区
DATAH DATA 32H ;显示值高位
DATAL DATA 33H ;显示值低位
;初始化子程序
INT: MOV SP,#60H ;设堆栈
CLR REQ ;请求线清0
SETB BUSY ;将P3.4设为输入口
RET
;写模块子程序
SUB1: JB BUSY ,SUB1 ;确信模块空闲
MOV P1 , A ;向总线送数椐
NOP ;等待数据总线稳定
SETB REQ ;向模块发请求命令
WAIT: JNB BUSY,WAIT ;等待模块响应
CLR REQ ;清REQ
RET ;返回
;写汉字程序
HZ: MOV A , #0F0H ;写显示汉字命令
ACALL SUB1
MOV A , X
ACALL SUB1 ;写屏幕行坐标值
MOV A , Y
ACALL SUB1 ;写屏幕列坐标值
MOV A , DATAH
ACALL SUB1 ;写区位码高位
MOV A , DATAL
ACALL SUB1 ;写区位码低位
RET
;写8×16 ASCII码程序
ASC2:MOV A , #0F9H ;写显示8×16 ASCII
ACALL SUB1 ;字符命令
MOV A , X
ACALL SUB1 ;写屏幕行坐标值
MOV A , Y
ACALL SUB1 ;写屏幕列坐标值
MOV A , DATAL
ACALL SUB1 ;写字符ASCII码
RET
;点绘图子程序
HD: MOV A , #0F2H;写显示位点阵命令
ACALL SUB1
MOV A , X ;写点屏幕行坐标值
ACALL SUB1
MOV A , Y ;写点屏幕列坐标值
ACALL SUB1
RET
;线绘图子程序
HX: MOV A , #0F3H;写显示位点阵命令
ACALL SUB1
MOV A , X ;写点屏幕行坐标值
ACALL SUB1
MOV A , Y ;写点屏幕列坐标值
ACALL SUB1
MOV A , DATAL
RET
;清屏程序
CLR: MOV A , #0F4H ;写清屏命令
ACALL SUB1
RET
结 语
利用OCMJ5X10中文图文液晶模块相对简单的硬件接口及简单的用户命令,可为嵌入式系统设计出显示信息量大且显示信息丰富的全中文人机界面,避免了传统液晶模块中文图形显示界面复杂的硬件接口设计及软件编程。该模块为嵌入式系统人机界面设计提供了一种较好的解决方案。