国标硬件汉字库的原理与应用.docVIP

  • 5
  • 0
  • 约1.44千字
  • 约 4页
  • 2020-04-14 发布于湖北
  • 举报
国标硬件汉字库的原理与应用 彩色液晶器件以其丰富的交互界面,理想的显示效果,越来越多的吸引单片机及嵌入式开发人员的眼球,但随之而来也带来汉字显示,让原本捉襟见肘的系统资源显得更加匮乏,国标16点阵汉字字库的容量为2M bit,已经远远超过普通51单片机的寻址空间,甚至超过了很多ARM7的内部FLASH 容量,液晶自带汉字字库势在必行。极大的简化了用户硬件成本和系统复杂性。 一、汉字内码 首先我们要知道ASCII 码 为了显示英文(英文字母种类很少,加上一些控制字符也不超过128个),所以定义了它是由一个字节表示的,从0-127位则留给英文字符使用,即英文的内码。还空余了128-255这些位置,但是远远少于我们国家汉字的数量(对于中文,常用却有5000以上),于是我们的DOS 前辈想了一个办法,就是将ASCII 表的高128个很少用到的 数值以两个为一组来表示汉字,即汉字的内码。范围从十六进制的0A1H 开始,将机内码的每个字节各减去0A0H 再以十进制显示出来即为该汉字的区位码。 例如 “国”字的机内码、国标码和区位码如表1 所示。 即:机内码-0A0A0H=区位码; 就“国”字而言,其机内码和区位码的关系为: 0B9FAH (机内码)- 0A0A0H =195AH(区位码) 二、汉字字库 国家标准汉字字符集GB2312-80共收集了共7445个汉字和图形符号,其中汉字6763个,分为二级。一级汉字3755个,二级汉字3008个。汉字图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为一个“位”。区的序号和位的序号都是从01到94。 UCDOS 软件中的文件HZK16为16*16的国标汉字点阵文件,以二进制格式存储。按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节,每个区为94个汉字。(UCDOS 软件中还包括ASC16文件:ASC16为8*16的ASCII 码点阵文件,以二进制格式存储。按ASCII 码从小到大依次存放ASCII 码点阵,每个ASCII 码占用16个字节) 具体程序实现如下(区码和位码都是从0xA1位置开是存储的) qh=*pHz-0xa1; (pHz 为汉字内码存储地址,qh 为区码,wh 为位码) wh=*(pHz+1-0xa1; OffSet=((ulong(qh*94+wh*32+ HZK16_ADDR; //计算该汉字在字库中偏移量 Read_Flash(OffSet,hz_mo,32; //读取32字节的字模数据到缓冲区 三、汉字字模 得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,HZK16中的中文“国”的字模中是这样记载的: 字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信 息来记载汉字的形状,这样我们就可以把这样的数字写入液晶,得到汉字的图形 具体函数实现如下: for (i=0;i16;i++ //16点阵 { Set_ramaddr(x,y+i; str =(uinthz_mo[i*2]8|hz_mo[i*2+1];//从缓冲区中调用部分字模信息 for (k=0;k16;k++ { if ( str (0x8000k //0x8000k 写点(LineColor; //文字颜色 else 写点(FillColor; //底色 } }

文档评论(0)

1亿VIP精品文档

相关文档