倾城winnie:
2.不带汉字库的HS12232-1下的汉字显示 2.1显示原理 利用PC上的16×16点阵汉字库,提取后将点阵文件存入ROM,直接利用PC中汉字内码作为单片机系统的编码(不再形成新的汉字编码)。 2.2硬件组成 首先要采用点阵图形液晶显示器。(例如一行为240点,总列数为128点,可以容纳16×16点阵的汉字15个[因为240/16=15],128列可以显示8行[因为128/16=8]),广州市千喜科技开发有限公司的HS12232-1内置SED1520驱动控制器的点阵为122×32点,每行7个半汉字,共2行。如果要扩展存储器,全部国标16×16点阵汉字、8×16点阵的ASCII码点阵数据及汉字语句编码数据要使用1片512KB的存储器来存储,多出部分可以留作数据存储器。本文只探讨液晶显示器与单片机的接口部分,扩展存储器部分略。下面给出HS-12232-1与单片机8031的一种接口,如图1所示(VDD=+5V)。 2.3汉字显示原理 国家标准信息交换用汉字字符集GB2312-80共收录了汉字、图形符号等共7445个,其中汉字6763个,按照汉字使用的频度分为两级,其中一级汉字3755个,二级汉字3008个。汉字、图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为“位”。其中“区”的序号由01区至94区,“位”的序号也由01位至94位。若以横向表示“位”号,纵向表示“区”号,则“区”和“位”构成一个二维坐标。给定一个“区”值和“位”值就可以确定一个惟一的汉字或图形符号。即4位阿拉伯数字就可以惟一地确定一个汉字或符号。如“北”字的区位码是“1717”,而京字的区位码是“3009”。前两位是“区”号,后两位是“位”号。其中1至15区是各种图形符号、制表符和一些主要国家的语言字母,16区至87区是汉字,其中16区至55区是一级汉字,56至87区是二级汉字。 UCDOS软件中的文件HZK16和文件ASC16分别为16×16的国际汉字点阵文件和8×16的ASCII码点阵文件,HZK16中按汉字区位码从小到大依次存放国标区位码表中的所有汉字,每个汉字占用32字节,每个区为94个汉字。而asc16文件中按ascii码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16字节。 PC的文本文件中,汉字是用机内码的形式存储的,每个汉字占2字节,其中第一个字节为机内码的区码,汉字机内码的区码范围是从0A1H(十六进制)开始,对应区位码中区码的第一区;而机内码的第二个字节为机内码的位码,范围也是从0A1H(十六进制)开始,对应某区中的第一个位码。就是说将汉字机内码减去0A0AH就得到该汉字的区位码。例如汉字“北”的机内码是十六进制的“B1B1”,其中前两位“B1”表示机内码的区码,后两位“B1”表示机内码的位码。所以“北”的区位码为0B1B1H-0A0A0H=1111H,将区码和位码分别转换为十进制,得汉字“北”的区位码为“1717”。即“北”的点阵位于第17区的第17个字的位置,在文件HZK16中的位置为第32×[(17-1)×94+(17-1)]=48640D以后的32个字节为“北”的显示点阵。用RF-1800编程器读入二进制文件hzk16j.bin后利用其编辑功能中的缓冲区编辑查找到BE00H(48640D是十进制,将其转变为十六进制后得BE00H)开始的32个字节:048004800488049804A07CC00480048004800480048004801C82E482447E0000(以上全为下十六进制),将其写在16×16点阵方格纸上,即得图2。由此可以理解其相互逻辑关系。 在单片机系统中,连续取32个字节送到LCD的相应位置,就能正确显示汉字后的图形符号。从HS-12232-1使用的SED1520的控制原理得知,字模送显示前要旋转90°,例如“逢”的区位码是3778,在HZK16中的位置为第32*[(37-1)*94+(78-1)]=110752D以后的32个字节:0444FFFE054041F8331014E00118F6461BF8104013F8104017FC1040284647FC,旋转90°后上16个字节:828A92B202A7925E2AAF2A5A4A838200,下16个字节;0080403F0490959595FF959595D04000。2.4ASCII码的显示原理 ASCII码的显示与汉字的显示基本原理相同,在ASC16文件中不存在机内码的问题,其显示点阵直接按ASCII码从小到大依次排列,不过每个ASCII码在文本文件中只占1个字节并且小于80H,每个ASCII码为8×16点阵,即在ASCII16文件中,每个ASCII码的点阵也只占16个字节。