此种方法实现起来简单明了,不需额外的硬件,缺点是占用MPU的IO资源较多,适用于IO资源有富余的情况。在笔者的应用中,MPU的IO需要余留给其他应用,不能分配这么多的IO来,故采用另外一种方法,由硬件逻辑实现,见图3:
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
本例中的页大小为32KB。AT27C020的片选信号CS1由地址线A15产生(即A15连到片选信号CE上),如要读38400H单元的内容,先由程序产生高位地址AA17、AA16、AA15。对字库芯片寻址时,先产生页地址,再进行页内寻址,利用此种方法可进行多位地址的扩展。举例如下:
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
4 软件的实现与控制
VPG12864T液晶模块的系统指令集其实就是T6963C控制器的指令集,模块的初始化设置一般都由管脚设置完成。T6963C的指令可带一个或两个参数,或无参数。每条指令的执行都是先送入参数,再送入指令代码,且每次操作之前要进行状态字检测。T6963C的状态字如下说明。在处理显示操作时,首先要指定字符串、文字段的有效显示位置。
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
STA0:指令读写状态
STA1:数据读写状态
STA2:数据自动写状态
STA3:数据自动读状态
STA5:读/写出错状态
STA6:运行控制器检测
STA7:闪烁状态检测
另外STA4保留.
4.1 显示字符
VPG12864T液晶模块字符的显示有两种实现方式,一是利用T6963C提供的字符集,另一种方法是将字符的点阵数据存放在ROM内,需要时以图形方式显示。当电路驱动能力不够时,可以采用第二种方式。字符显示相对比较简单,在这里不做详细描叙。
4.2 显示汉字
处理汉字显示时,由于VPG12864T液晶模块是128×64点阵的,所以显示16×16点阵的汉字一行最多显示8个,且最多显示4行。对于每一个汉字的显示,首先应该计算该汉字在字库中的地址,然后读出该汉字的点阵排列。当显示至一行的末尾时要换行显示。在处理汉字显示时有两种方法:一是一次只显示一个汉字,即对于每一个汉字,先计算出此汉字地址,读出其点阵数据,显示完毕再处理下一个汉字,直到处理完所有的汉字;第二种方法是将所要显示的所有汉字的点阵数据从字库中读出存放外部RAM中,再集中处理显示的问题。本文讨论的是后一种方法。
字符半角码与全角码有如下的对应关系:
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
半角字符对应的全角字符的起始地址的计算公式:
起始地址=[(2×94+(ASCII-0x21))×32
汉字显示处理的流程如下(用“#”作为显示汉字段的结束标志):
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
在处理汉字显示时,如果要实现汉字的反显(例如实现菜单操作),将汉字的32字节字模数据分别与0xFF异或(XRL)运算,或者取反(CPL)运算后再显示即可。