笔者曾在本刊1997年第1期上,介绍了字符点阵液晶显示模块TM162A的使用特点和编程方法。下面再给大家介绍TM12864A汉字模块应用实例。
一、模块的结构及原理:
TM12864A是一种典型的图形点阵LCD显示模块,点阵量是 128×64DOT,其控制器是日立公司的HD61202,驱动器也是日立公司的HD61203。它们分别控制驱动左右半屏的点阵数据,可与Intel、Motorola等公司的单片机连接使用,电路框图见图1。

TM12864A采用两片HD61202做控制器,每片控制器带有512字节(4096BIT)的显示 RAM,共 2×512=1024(1K)字节,可全屏显示 32个 16×16点阵的汉字。该模块RAM中的每一个比特数据与屏幕上的1位像素一一对应,为1时显示黑点,为0时显示白点(不显示),所以我们只要将需要显示黑点的比特位送1,显示白点的比特位送0,即可实现“黑”、“白”点的控制,这一点用位操作指令很容易实现,送一个字节的数据,正好可以控制屏幕上8个点的显示状态。
图2是该模块的屏幕点阵分布结构图。其具体的含义是:

x0~x7为页地址;y0~y63为列地址。
与TM162A不同,由于TM12864A内部不带字符发生器,所以它是工作在纯图形方式下的。即无论是显示汉字还是显示字符或图形,该模块都是读取被显示信息的点阵数据,然后送入到内部的显示RAM中,这样我们在屏幕上所看到的就是与之相对应的显示内容了,充分理解屏幕点阵与内部显示RAM的这种映射关系,是正确使用好这种显示模块的关键。
二、指令介绍
TM12864A采用两片HD61202分别控制左右半屏的显示,在编程时要分别控制,这里的左右屏的选取由片选信号CS1和CS2完成。当CS1=1时选取左屏为操作对象,CS2=l时,选取右屏为操作对象,某些情况下左右屏可同时选取。从MPU来的指令有读/写(R/W)信号、数据/指令(D/I)选择信号,指令功能包括:显示数据读/写、显示开关、设置地址、设定显示起始行、读状态等。
指令叙述如下:
1.显示开/关
B/WD D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 1 1 1 1 1/0
该指令控制显示的开关,不影响模块RAM中的数据和内部各状态。 DBO=1:开,DBO=0:关。
2.显示起始行设置
R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 1 显示起始行:0~63
3.设定页地址(X地址)
R/W D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 1 1 1 页地址:0~7
对页地址寄存器设置页地址。
4.设定列地址(Y地址)
R/M D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 1 Y地址:0~63
对列地址寄存器设置Y地址。
5.读状态
R/M D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0 BUSY 0 ON/OFF RST 0 0 0 0
RST=1表明系统正在初始化; RST=0表明系统初始化完成;ON/OFF=1时不显示;ON/OFF=0时显示; BUSY=l时正在进行内部操作; BUSY=0时准备好接收指令。
6.写显示数据
R/M D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 1 数据(8位)
将欲显示的数据写入显示存储器中。
7.读显示数据
R/M D/I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 1 数据(8位)
从显示存储器中读出被显示的数据。
在读、写操作之前,要先确定模块的内部状态,当RST=0时,才能进行地址设置和数据读写操作。显示RAM的存取地址每进行一次写操作,Y地址自动加1。
因目前单片机的种类繁多,所使用的晶振频率和得到的时钟信号也不尽相同,为了满足控制器HD61202的控制时序,可采用硬件法或软件法对TM12864A进行控制。为了使读者能快捷、方便地掌握该模块的使用,本文仍延用本刊第1期中介绍TM162A文中的接口电路,即只要在原电路上加焊Vee、RST、CS1、CS2共4根连线,就可以马上对TM12864A模块进行控制,电路原理图见图3。

三、应用实例
编程思路:
①选中左半屏为操作对象;②开显示、设置起始扫描行;③等待初始化、复位完毕;④送0~1页显示数据;⑤显示内容:中国;⑥结束。
N
ORG 0000H
on—dis:mov p1,#OOh
setb p1.0
setb p1.1;选择左半屏
nop; 注:重复五次
mov a,#3th
mov r0, #10h
acall rdbusy
movx @r0,a;开显示
mov a,#OcOh
mov r0,#10h
acall rdbusy
movx @r0,a;起始扫描行为第0行
acall wat-rst;等待复位完成
mov a,# 0b8h
mov r0,#10h
acall rdbusy
movx @r0,a;页地址X=0
mov a,#40h
mov r0,#10h
acall rdbusy
movx @r0,a;列地址 Y=0
mov dptr,#china
arall sed-dt
mov dptr,# china+32
acall sed-dt
mov a,#0b9h
mov r0,#10h
acall rdbusy
movx @r0,a;页地址X=1
mov a,# 40h
mov r0,#10h
acall rdbusy
movx @r0,a;例地址Y=0
mov dptr,#china+16
acall sed-dt
mov dptr,#china+48
acall sed-dt
sjmp $
sed-dt: mov rl,#16
sed: cir a
movc a,@a+dptr
mov r0,#12h
acall rdbusy
movx @r0,a
inc dptr
djnz rl,sed
ret
rdbusy: psh ace
push 00h
mov r0,# 11h
rdbsl: movx a,@r0
rlc a
jc rdbsl
pop 00h
pop acc
;
wat-rst:push acc
mov r0,#11h
wat: movx a,@r0
rlc a;注:执行四
次
jc wat
pop acc
ret
;汉字点阵:中国
CHINA:db 00h,0f8h,
08h, 08h, 08h,08h,08h,
0ffh,08h, 08h,08h,08h,
08h, 0fch,08h,00h
db 00h,03h,01h,
01h, 01h, 01h,01h,0ffh,
01h, 01h, 01h,1h, 01h,
03h, 00h, 00h
…………
;
end
(王传林)