引言
随着电子产品需求与覆盖面的急剧扩张,信息传输(输入输出)所涉及的中外文字库信息解决方案也变得更加重要,一个有多种字库的显示/打印电子产品比只具备单一的ASCII码的产品有更强的竞争力。在现在字库应用解决方案中,电子设备商、方案商一般会有这样几种方案:
① 一部分的IC厂商会集成一小部分的字库信息在IC上;
② 设备商、方案商会自己购买存储芯片(Flash等),自己独立编写点阵信息烧录;
③ 采购标准的专业字库IC,例如上海高通半导体有限公司生产的专业字库芯片。
1 GT23H32S4W芯片的原理及特点[2]
1.1 GT23H32S4W的引脚图
GT23H32S4W是一款内含11×12点阵、15×16点阵、24×24点阵、32×32点阵的汉字库芯片,支持GB2312国标汉字及ASCII字符。排列格式为横置横排。图1为芯片的引脚图。字库芯片与CPU的硬件连接可以是并行方式,也可以是SPI方式。笔者在使用过程中发现,并行连接不能正确读取汉字的字模,所以这里仅介绍SPI方式。
图1 GT23H32S4W引脚图
1.2 GT23H32S4W电路连接图[1]
单片机P89C52X2FN与字库芯片的连接采用SPI总线的方式,SPI 接口引脚描述如下:
① 串行数据输出(SO):该信号用来把数据从芯片串行数据输入引脚输出,数据在时钟的下降沿移出。
② 串行数据输入(SI):该信号用来把数据从串行数据输入引脚输入芯片,数据在时钟的上升沿移入。
③ 串行时钟输入(SCLK):数据在时钟上升沿移入,在下降沿移出。
④ 片选输入(CS#):所有串行数据传输开始于CS#下降沿,CS#在传输期间必须保持为低电平,在两条指令之间保持为高电平。硬件电路连接图如图2所示。
图2 单片机与GT23H32S4W的电路连接图
图3 快速读取点阵芯片GT23H32S4W的时序图
1.3 芯片工作的时序图
字库芯片的操作分为一般读取和快速读取。这里采用快速读取(READ_FAST)方式,具体操作步骤如下:
① 首先把片选信号(CS#)变为低电平,紧跟着的是1 个字节的命令字(0Bh)和3 个字节的地址以及一个字节Dummy Byte 通过串行数据输入引脚(SI)移位输入,每一位在串行时钟(SCLK)上升沿被锁存;Dummy Byte代表无意义的内容,是什么值都可以,主要起到填充、隔离数据的作用。
② 然后该地址的字节数据通过串行数据输出引脚(SO)移位输出,每一位在串行时钟(SCLK)下降沿被移出。
③ 如果片选信号(CS#)继续保持为低电平,则下一个地址的字节数据继续通过串行数据输出引脚(SO)移位输出。例如读取一个15×16 点阵汉字需要32字节,则连续32 个字节读取后结束一个汉字的点阵数据读取操作。如果不需要继续读取数据,则把片选信号(CS#)变为高电平,结束本次操作。图3是快速读取点阵的时序图。
2 C语言编程软件设计[24]
2.1 汉字字模地址的计算
字库芯片GT23H32S4W有多种字型:11×12、15×16、24×24、32×32点阵。这里使用15×16点阵。在GT23H32S4W里,15×16点阵的GB2312标准点阵字库的地址计算如下。其中,GBCode表示汉字内码;MSB表示汉字内码GBCode的高8位;LSB表示汉字内码GBCode的低8位;Address表示汉字或ASCII字符点阵在芯片中的字节地址;BaseAdd说明点阵数据在字库芯片中的起始地址。
计算代码如下:
BaseAdd=0x2C9D0;
if(MSB >=0xA1&&MSB<=0xa9&&LSB >=0xA1)
Address=((MSB-0xA1)*94+(LSB-0xA1))*32+ BaseAdd;
else if(MSB >=0xBO&&MSB<=0xF7&&LSB >=0xA1)
Address=((MSB-0xBO)*94+(LSB-0xA1)+846)*32+ BaseAdd;
这里的变量Address、MSB、LSB定义数据类型时要注意,定义成长整型,以避免计算结果溢出,造成地址计算错误。
2.2 连续读一个汉字的字模子程序
根据芯片的工作时序图以及字模在GT23H32S4W芯片里的地址,可以实现一个汉字的字模的读取。代码如下:
unsigned char r_dat_bat(unsigned long int address){
unsigned long int add;
unsigned long int cp_32=0x80000000;
unsigned int i,j;
unsigned char dat=0x00;
unsigned char cp_8=0x80;
CS=0;
add=address+0x0B000000;
for(i=0;i<32;i++){
CLK=0;
if(add&cp_32){
SI=1;
cp_32=cp_32>>1;
}
else if(!(add&cp_32)){
SI=0;
cp_32=cp_32>>1;
}
CLK=1;
}
for(i=0;i<8;i++){
CLK=0;
_nop_();
_nop_();
_nop_();
CLK=1;
}//读数据
for(j=0;j<=31;j++){
cp_8=0x80;
dat=0x00;
for(i=0;i<8;i++){
SO=0;
CLK=1;
_nop_();
_nop_();
_nop_();
CLK=0;
if(SO==1){
dat=dat|cp_8;
cp_8=cp_8>>1;
}
else if(SO==0){
cp_8=cp_8>>1;
}
}
}
CS=1;
return dat;
}
结语[5]
该字库芯片应用到基于GSM的图文显示系统,即通过手机发送短信,GSM模块接收,然后单片机控制GSM模块解析短信的内容,得到汉字的GB码。由汉字的GB码,计算汉字在字库芯片GT23H32S4W中的地址,再由所计算的地址,读取汉字的字模,送LED屏显示。图4为字库芯片的应用系统框图;图5为实验结果。
图4 字库芯片的应用系统框图
图5 实验结果
实验结果表明,汉字字模正确,显示内容清晰,可以显示字符、多种汉字的字型。