串行接口中文图形点阵液晶显示模块的应用_显示光电论文
关键词:串/并接口 液晶模块 中文字库
引言
液晶显示器件由于具有显示丰富、功耗低、体积小、质量小、无辐射等优点,得到了广泛的应用;但液晶显示模块复杂的硬件接口和软件编程却令产品设计人员生畏,因而限制了该模块在某些领域的应用。本文介绍一种具有串/并多种接口方式,且内部含有gb2312一级、二级简体中文字库的图形点阵液晶模块,使用该模块可构成具有全中文人机交互图形界面的液晶显示系统。
1 性能特点
ocm4x8c是具有串/并接口,具内部含有中文字库的图形点阵液晶显示模块。该模块的控制/驱动器采用台湾矽创电子公司的st7920,因而具有较强的控制显示功能。ocm4x8c的液晶显示屏为128×64点阵,可显示4行、每行8个汉字。为了便于简单、方便地显示汉字,该模块具2mb的中文字型cgrom,该字型rom中含有8192个16×16点阵中文字库;同时,为了便于和其它常用字符的显示,具有16kb的16×8点阵的ascii字符库;为便于构造用户图形,提供了一个64×256点阵的gdram绘图区域,且为了便于构造用户所需字型,提供了4组16×16点阵的造字空间。利用上述功能,ocm4x8c可实现汉字、ascii码、点阵图形、自造字体的同屏显示。为便了和多种微处理器、单片机接口,模块提供了4位并行、8位并行、2线串行、3线串行多种接口方式。
该模块具有2.7~5.5v的宽工作电压范围,且具有睡眠、正常及低功耗工作模式,可满足系统各种工作电压及便携式仪器低功耗的要求。液晶模块显示负电压,也由模块提供,从而简化了系统电源设计。模块同时还提供led背光显示功能。除此之外,模块还提供了画面清除、游标显示/隐藏、游标归位、显示打开/关闭、显示字符闪烁、游标移位、显示移位、垂直画面旋转、反白显示、液晶睡眠/唤醒、关闭显示等操作指令。
2 模块引脚定义和用户指令集
ocm4x8c的引脚说明,如表1所列。
表1 ocm4x8c引脚说明
引 脚 | 名 称 | 方 向 | 说 明 |
1 | vss | - | gnd(0v) |
2 | vdd | - | 逻辑电源(+5v) |
3 | v0 | - | lcd电源(悬空) |
4 | rs(cs) | o | h:数据,l:指令 |
5 | r/w(sid) | o | h:读,l:写 |
6 | e(sclk) | o | 使能 |
7 | db0 | i | 数据0 |
8 | db1 | i | 数据1 |
9 | db2 | i | 数据2 |
10 | db3 | i | 数据3 |
11 | db4 | i | 数据4 |
12 | db5 | i | 数据5 |
13 | db6 | i | 数据6 |
14 | db7 | i | 数据7 |
15 | psb | o | h:并行,l:串行 |
16 | nc | - | 空脚 |
17 | rst | o | 复位(低电平有效) |
18 | nc | - | 空脚 |
19 | leda | - | 背光源正极(led+5v) |
20 | ledk | - | 背光源负极(led-0v) |
用户使用液晶模块时是通过用户命令来执行相应的显示或控制功能的。ocm4x8c的用户命令分为基本命令集和扩充命令集,分别如表2、表3所列。
表2 ocm4x8 基本命令集
指 令 | 指令码 | 说 明 | 执行时间/μs(540khz) | |||||||||
rs | rw | db7 | db6 | db5 | db4 | db3 | db2 | db1 | db0 | |||
清除显示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 将ddram填满“20h”,并设定ddram的地址计数顺(ac)到“00h” | 4.610 -3 |
地址归位 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | x | 设定ddram的地址计数器(ac)到“00h”,并且将游标移到开头原点位置 | 4.610 3 |
进入点 设定 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | i/o | s | 指定在资料的读取与写入时,设定游标移动方向及指定显示的移位 | 72 |
显示状态开/关 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | d | c | b | d=1:整体显示on;c=1:游标on; b=1:游标位置on | 72 |
游标或显示移位 控制 | 0 | 0 | 0 | 0 | 0 | 1 | s/c | r/l | x | x | 设定游标的移动与显示的移位控制位元。这个指令并不改变ddram的内容 | 72 |
功能设定 | 0 | 0 | 0 | 0 | 1 | dl | x | 0re | x | x | dl=1(必须设为1);re=1:扩充指令集动作;re=0:基本指令集动作 | 72 |
设定cgram 地址 | 0 | 0 | 0 | 1 | ac5 | ac4 | ac3 | ac2 | ac1 | ac0 | 设定cgram地址到地址 计数器(ac) | 72 |
设定ddram 地址 | 0 | 0 | 1 | ac6 | ac5 | ac4 | ac3 | ac2 | ac1 | ac0 | 设定ddram地址到地址 计数器(ac) | 72 |
读取标志(bf)和地址 | 0 | 1 | bf | ac6 | ac5 | ac4 | ac3 | ac2 | ac1 | ac0 | 读取忙标志(bf)可以确认内部动作是否完成,同时可以读出地址计数器(ac)的值 | 0 |
写资料到ram | 1 | 0 | d7 | d6 | d5 | d4 | d3 | d2 | d1 | d0 | 写入资料到内部的ram(ddram/cgram/iram/gdram) | 72 |
读出ram的值 | 1 | 1 | d7 | d6 | d5 | d4 | d3 | d2 | d1 | d0 | 从内部ram读取资料(ddram/cgram/iram/gdram) | 72 |
表3 ocm4x8c 扩充指令集
指 令 | 指 令 码 | 说 明 | 执行时间/μs(540khz) | |||||||||
rs | rw | db7 | db6 | db5 | db4 | db3 | db2 | db1 | db0 | |||
待命模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 将ddram填满“20h”,并设定ddram的地址计数器(ac)到“00h”; | 72 |
卷动地址或iram地址选择 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | sr | sr=1:允许输入垂直卷动地址; sr=0:允许输入iram地址 | 72 |
反白选择 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | r1 | r0 | 选择4行中的任一行作反白显示,并可决定反白与否 | 72 |
睡眠模式 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | sl | x | x | sl=1:脱离睡眠模式; sl=0:进科睡眠模式 | 72 |
扩充功能设定 | 0 | 0 | 0 | 0 | 1 | 1 | x | 1 re | g | 0 | re=1:扩充指令集动作;re=0基本指令集动作;g=1:绘图显示on;g=0:绘图显示off | 72 |
设定iram地址或卷动地址 | 0 | 0 | 0 | 1 | ac5 | ac4 | ac3 | ac2 | ac1 | ac0 | sr=1:ac5ac0为垂直卷动地址 sr=0:ac3ac0为iconiram地址 | 72 |
设定绘图ram地址 | 0 | 0 | 1 | ac6 | ac5 | ac4 | ac3 | ac2 | ac1 | ac0 | 设定cgram地址到地址计数器(ac) | 72 |
3 字符显示
ocm4x8c按照每个中文字符16×16点阵将显示屏分类4行8列,共32个区。每个区可显示1个中文字符或2个16×8点阵全高ascii码字符,即每屏最多可实现32个中文字符或64个ascii码字符的显示。ocm4x8c内部提供128×2字节的字符显示ram缓冲区(ddram)。字符显示是通过将字符显示编码写入该字符显示ram实现的。根据写入内容的不同,可分别在液晶屏上显示cgrom(中文字库)、hcgrom(ascii码字库)及cgram(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006h显示自定义字型,02h~7fh显示半宽ascii码字符,a1a0h~f7ffh显示8192种gb2312中文字库字形。字符显示ram在液晶模块中的地址80h~9fh。字符显示的ram的地址与32个字符显示区域有着一一对应的关系,其对应关系如图1所示。
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,ldata
lcall sendbyte
lcall dl1ms
ret
显示汉字子程序:
hzdisp:
mov start,#0f08h 写入命令
mov com,#80h 设定显示位置
lcall write
mov dptr,#table 指向文字型代码表
mov a,#00h 取汉字代码低位
loop2:movc a,a+@dptr
cjne a,#0,disp ;遇“0”结束显示
ret 写完一行则结束
disp:mov start,#0fah ;写数据
mov com,a
lcall write ;写入显示模块
inc dptr ;取汉字代码高位
ajmp loop2 ;未显示完则继续
table:db“中文图形点阵”,0;汉字代码表
db“液晶显示模块”,0;
串行字节数据发送子程序:
sendbyte:mov r7,#08h ;发送8位
loop1:rlc a
mov sid,c ;数据送数据线
clr sclk ;产生同步时钟
setb sclk
djnz r7,loop1 ;未发送完8位继续
ret
结语
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。