串行接口中文图形点阵液晶显示模块的应用
4 应用说明
用OCM4X8C显示模块时应注意以下几点:
①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
②显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
③当字符编码为2字节时,应先写入高位字节,再写入低位字节。
④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。
⑤“RE”为基本指令集与扩充指令集的选择控制位。当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。
图2 OCM4X8C的2线串行工作模式操作时序
5 接口方式与时序
OCM4X8C具有串/并多种接口方式,方便了模块与各种单片机、微处理器的连接。
(1)4/8位并行接口方式
当模块的PSB脚接高电平时,模块即进入并行接口模式。在并行模式下可由功能设定指令的“DL”位来选择8位或4接口方式,主控制系统将配合“RS”、“RW”、“E”DB0~DB7来完成指令/数据的传送,其操作时序与其它并行接口液晶显示模块相同。
(2)2/3线串行接口方式
当模块的PSB脚接低电平时,模块即进入串行接口模式。串行模式使用串行数据线SID与串行时钟线SCLK来传送数据,即构成2线串行模式。
OCM4X8C还允许同时接入多个液晶显示模块以完成多路信息显示功能。此时,要利用片选端“CS”构成3线串行接口方式,当“CS”接高电位时,模块可正常接收并显示数据,否则模块显示将被禁止。通常情况下,当系统仅使用一个液晶显示模块时,“CS”可连接固定的高电平。
模块2线串行工作操作时序如图2所示。
由图2可以看出,单片机与液晶模块之间传送1字节的数据共需24个时钟脉冲。首先,单片机要给出数据传输起始位,这里是以5个连续的“1”作数据起始位,如模块接收到连续的5个“1”,则内部传输被重置并且串行传输将被同步。紧接着,“RW”位用于选择数据的传输方向(读或写),“RS”位用于选择内部数据寄存器或指令寄存器,最后的第8位固定为“0”。在接收到起始位及“RW”和“RW”的第1个字节后,下一个字节的数据或指令将被分为2个字节来串行传送或接收。数据或指令的高4位,被放在第2个字节串行数据的高4位,其低4位则置为“0”;数据或指令的低4位被放在第3个字节的高4位,其低4位也置为“0”,如此完成一个字节指令或数据的传送。需要注意的是,当有多个数据或指令要传送时,必须要等到一个指令完成执行完毕后再传送下一个指令或数据,否则,会造成指令或数据的丢失。这是因为液晶模块内部没有发送/接收缓冲区。
图3 AT89C2051与OCM4X8C的2线串行接口电路
6 OCM4X8C应用实例
使用OCM4X8C的2线串行接口方式可大大简化液晶显示模块与单片机之间的接口设计;同时,也使液晶显示模块显示汉字变得极为容易,从而改变过去单片机系统人机界面不够友好的弊端。AT89C2051单片机与OCM4X8C的接口电路如图3所示。下面给出相应显示程序。
;位定义
SID BIT P1.0 ;串行数据线
SCLK BIT P1.1 ;串行时钟线
;内存数据定义
START EQU 30H ;起始字节
COM EQU 31H ;命令/数据
HDATA EQU 32H ;命令/数据字节高位
LDATA EQU 33H ;命令/数据字节低位
ASC EQU 34H ;ASCII数据单元
初始化子程序:
INILCM:LCALL DL40MS ;延时等待内部复位
MOV COM,#30H ;使用8位控制界面
LCALL WRITE
MOV COM,#30H ;使用基本指令集
LCALL WRITE
MOV COM,#0CH
LCALL WRITE ;整体显示ON
MOV DL1MS
MOV COM,#01H ;清屏
LCALL WRITE
LCALL DL40MS
MOV COM,#06H ;显示右移
LCALL WRITE
LCALL DL1MS
RET
模块写入子程序:
WRITE:MOV A,COM ;送待发数据命令A
MOV A,#0F0H ;屏蔽低4位
MOV HDATA,A ;将高4位送HDATA单元
MOV A,COM ;取低4位
SWAP A ;高低4位互换
MOV A,#0F0H
MOV LDATA,A ;将低4位送LDATA单元
MOV A,START ;取起始字节
LCALL SENDBYTE ;发送
LCALL DL1MS ;延时1ms
MOV A,HDATA
LCALL SENDBYTE
LCALL DL1MS
MOV A,LD