也可选用UCDOS 的ASC16 文件做字模库。ASC16 文件的字符为8×16 点阵。所有字符按照ASCII 值从小到大升序排列。计算字符首地址的公式:字符首地址=字符的ASCII 码值×16+字模库首地址。
(2) 建立所用到的16×16 点阵字模库。汉字字符可选用UCDOS 的HZK16 文件做字模库。HZK16 文件的字符为16×16 点阵。所有字符按照区位码从小到大升序排列。计算汉字字符首地址的公式如下:汉字首地址=((区码-1)×94+位码-1)×32。作者用C 语言编写的读取UCDOS 点阵字库字模程序,完成字模读取、
数据重新排列,并按MCS-51 汇编程序的要求写成相应格式的文本文件。
p=((quma-1)*94+weima-1)*32;
cclibfile="fopen"("HZK16
","rb");
fseek(cclibfile,(long)p,SEEK_SET);
fread(buf,sizeof(unsigned char),32,cclibfile); /*读32 字节点阵数据*/
for(m=0;m<32;m++){ /*点阵数据转换成LCD 格式数据*/
if(m<8) { beginbyte="14"; shiftn="7";}
else if( m>= 8 && m<16 ) { beginbyte="15"; shiftn="15";}
else if( m>=16 && m<24 ) { beginbyte="30"; shiftn="23";}
else { beginbyte="31"; shiftn="31";}
for(j=0;j<8;j++)
hzk16x16[m]=(hzk16x16[m]+ (buf[beginbyte-2*j] >>(shiftn-m))&0x01)<<1;
}
(3) 常用图形(如产品商标等)的点阵图形的建立。对已有的图形可采用扫描仪进行扫描,然后用图形处理软件进行处理,再将BMP 格式文件转换成MCS-51 的汇编文件的格式。
以上所有的字模数据都存放在单片机W78E58 的程序存储器中,如用到的汉字、图形较多,可选用较大容量的程序存储器。
通用子程序:通用子程序分左半屏、右半屏写指令代码子程序和写显示数据子程序。液晶显示驱动器HD16202 内部有个忙标志寄存器,当BF=1 时,表示内部操作正在运行,不能接受外部数据或指令。下面子程序中设指令代码寄存器为COMM,数据寄存器为DATA。
(COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*数据寄存器*/)
(1) 左半屏写指令子程序
WR_CMD1: MOV DPTR,#CRADR1 ;/*读状态字口地址*/