您好,欢迎来到九壹网。
搜索
您的当前位置:首页基于PC669的硬件汉字库设计

基于PC669的硬件汉字库设计

来源:九壹网
维普资讯 http://www.cqvip.com

基于P89C669的硬件汉字库设计 基于P89C669的硬件汉字库设计 Design of Hardware Chinese Character Library Based on P89C669 黄海宏 王海欣(合肥工业大学,安徽合肥230009) 摘 要 论述了硬件汉字库的基本原理,使用51MX内核的Flash微控制器P89C669作为CPU,结合512kB的EEPROM存 储器AT29C040A,介绍了硬件汉字库制作方法,将EEPROM作为外部数据存储器进行寻址,通过机内码推算汉字区位 码,从而计算偏移地址寻址汉字库进行字模提取,并给出对应的C程序。该方式能大大简化系统的维护,提高程序的可读 性和效率,加快产品开发速度,降低软件成本。 关键词:硬件汉字库,汉字字模,区位码,机内码,P89C669,AT29C040A Abstract This paper discusses the principle of hardware Chinese character library,it used P89C669 as CPU,which is 51MX core Flash microcontroller,combined 512kB EEPROM AT29C040A,introduces the method of making hardware Chinese character¨- brary.It used EEPROM as external RAM,it calcul ̄ed area position code based on code inside computer,got offset address to pick up Chinese character models.This paper also supplied corresponding C program The method in paper can simplify the system S maintenance greatly,and increase program S readability and efficiency,quicken product development, ̄duce software cost. Keywords-hardware Chinese character library,Chinese character model,area position code,code inside computer, P89C669.AT29C040A 通常,仪器设备中液晶屏幕汉字显示方式是事先通过字模 提取软件提取要显示的汉字的字模点阵(如16x16点阵),将点 阵文件作为常量数组存放在单片机的程序存储器中形成新的汉 字编码;在使用时由单片机根据新编码,提取相应的点阵按液晶 显示字符的规律依次写入液晶控制器的显示缓冲器即可。在这 种显示方式中,如果使用的汉字数量较大或语句较多时,提取汉 字字模点阵组成汉字的新编码将是一件繁琐而枯燥的工作。在 产品升级时若有新的汉字加入,则汉字新编码要重新更新。而我 码标准)>GB2312—80方案,把高频字、常用字和次常用字集合成 汉字基本字符集(共6763 个),在该字符集中按汉字 使用的频度,又将其分为一 级汉字3755个(按拼音排 序)、二级汉字3008个(按 部首排序),再加上西文字 母、数字、图形符号等700 个。国家标准的汉字字符集 (GB2312—80)在汉字操作 系统中是以汉字库的形式 提供的。汉字库结构作了统 图1 国标(GB2312—80)汉字字符集 一字母、数字、阉符、记号区 扩艘AscⅡ码和保留区 级汉字(3755个) :级汉字(3008个) 们日常生活的一些手持工具上,如手机、快译通等等,它们可以 任意输入汉字,不仅灵活性大,而且检索速度快。这其中的主要 原因就是在这些设备中固化了硬件汉字库。半导体技术的发展 使得大容量FLASH EEPROM的价格大大下降,使得硬件汉字 库的制作成本大大下降,因此越来越多的技术开发人员开始关 注起硬件汉字库。 1 硬件汉字库相关知识 规定。如图1所示。 即将字库分成94个区,每区有94个汉字(以位作区别),每 个汉字在汉字库中有确定的区和位编号(用两个字节),这就是 所谓的区位码(区位码的第一个字节表示区号,第二个字节表示 位号),因而只要知道了区位码,就可知道该汉字在字库中的地 址,每个汉字在字库中是以点阵字模形式存储的,如一般采用 16xl6点阵形式,每个点用一个二进制位表示,存1的点,当显 示时可以在屏上显示一个亮点;存0的点则在屏上不显示,这样 1.1汉字机内码国标码和区位码 在PC机的文本文件中,汉字是以机内码的形式存储的。每 个汉字占用两个字节长度,为了和ASCII码区别,范围从十六进 制的0A1H开始(小于80H的为ASCll码);将机内码每个字节 的最高位屏蔽掉,再以十六进制的形式显示出来,则为国标码。 将机内码的每个字节各减去0AOH,再以十进制显示出来,即为 该汉字的区位码。例如“国”字的机内码、国标码和区位码如表1 所示。 表1 “国”字的机内码、国标码和区位码 就把存某字的16xl6点阵信息直接用来在显示器上按上述原 则显示,则将出现对应的汉字。 2硬件汉字库的制作 在液晶显示中,液晶屏上通常以显示16x16点阵的汉字为 主。UCDOS软件包中有一个名字为HZK16的文件,即为16x 16的国标汉字点阵文件。在该文件中,按汉字区位码从小到大 依次存有国标区位码中的所有汉字,每个汉字占用32个字节, 即区位码=机内码一0AOAOH,就“国”字而言,其区位码和机内码的 关系为:195AH(区位码)=0B9FAH(机内码)一0AOAOH 其大小为262KB。本文采用ATMEL公司生产的的AT29C040A 来存储HZK16文件。AT29CO40A为512KB的FLASH E— 1_2国标汉字字符集与区位码 我国1981年公布了《通讯用汉字字符集(基本集)及其交换 PROM,使用通用编程器,将HZK16以二进制方式打开,并写入 AT29C040A即可生成硬件16x16的汉字库。 维普资讯 http://www.cqvip.com

《工业控制计算机}2007年20卷第3期 目前绝大多数的单片机的寻址范围都难以达到262KB,以 应用最广泛的51系列单片机为例,程序和数据空间最大寻址范 围为64K,若想使用上述的硬件汉字库,只能通过l/O线进行配 合,如将汉字库进行分页,用I/O线(51单片机的P1口)代替超 过16的地址线。如此操作,在对汉字字模寻址时首先根据机内 根据P89C669的高64K寻址要求,作以下指针定义: #define HBYTE(unsigned char volatile far ) 下面以液晶控制器SED1335为例,给出在液晶屏上以图形 方式写16x16汉字和8x16的ASCIl码的C语言函数。关于 SED1335的接口指令,文献4有详细的介绍,这里不在赘述。 需要注意的是由于汉字区位码无论是区码还是位码均从1 码推算页码,再根据页码改变I/O口线的状态,然后再根据低 16位地址从硬件汉字库中提取字模。与传统的汉字取字模方法 相比,虽然有所改进,但增加了软件编程的复杂性,同时也占用 了过多的I/O口线。 开始,而计算偏移地址从0开始,“国”字机内码为0xb9fa,则其 在16×16汉字库中的偏移地址为[(0xb9—0xa1) 94+(0xfa- 本文采用的P89C669是基于PHlLlPS半导体新51MX内 0xa1)】 32。“国”字区位码为0x195a,同样可计算在汉字库中 偏移地址为[(0xl一1) 94+(0x5a-1)】 32。二者结果相同,即可 通过机内码直接寻址要显示汉字在汉字库中的偏移地址。 #define Uchar unsigned char #define Uint unsigned int #define Ulong unsigned long 核的Flash微控制器,PHILIPS半导体的51MX存储器扩展内 核是一种加速的80C51结构,地址经扩展后可支持高达8M字 节的程序存储器和8M字节的数据存储器。与传统的51单片机 的P0口是低8位地址线和数据线复用的原理类似,P89C669 的P2口也具备复用功能,当使用23位地址时,ALE口线为高 时地址位A16~A22输出到P2.0-P2.6,ALE口线为低时地址位 A8~A14输出到P2.0-P2.6,无论ALE为何值,位地址A15都 从P2-7输出。 #define Wide 40 —//液晶屏幕每行字节数 #define AddressFirSt Oxl000 莓篝蕃一 //液晶图形显示区首地址 void Write_hz(Uchar x,Uchar y,char P) / 图形模式在(x.y)处写汉字字符串, P为汉字符串指针 / { Uchar i,j.qm.wm: Uint g—addr; Ulong qwm; Uint ch; Uchar ptr; i=0: ch= p: 图2为采用P89C669为CPU构建的硬件汉字库的原理 图,两片74HC273用来对A0~A22地址线分时复用。FLASH EPROM AT29C040A存放事先写好的完整的16x16汉字库。 GALl6V8为可编程逻辑器件,用来设定扩充器件的片选译码地 址,如AT29C040A的片选地址就由GALl6V8根据地址线 A13~A19的组合编程而来。若GAL16V8的逻辑语句为: /AT2C9040A=A1 9; 则单片机对外部数据空间80000-FFFFF进行操作时, while(ch!=0)//若字符串未结束,则循环 AT29C040A片选信号都会有效。在编程中可设定8oOOO为 AT29C040A地址,则从80O00开始的512K空间即对应 { if(ch>0xa0) { qm=ch一0xal;//计算要显示的汉字的区码 i++ AT29C040A的内部512K空间。通过通用编程器可将汉字库和 其他字库写入到AT29C040A的指定位置。 ch= (p+i): 券睾 薛 兰圭i if(ch==0)break; else wm=ch一0xal;//计算要显示汉字的位码 i++: qwm=qm 94+wm; //计算要显示的汉字在汉字库中的偏移地址 g_addr=x Wide+y+Address—First; / 计算要写入字符的地址,x Wide+y是计算要显示的字符对应液晶屏 零坐标的偏移量 / SEDCOM=0x46; _//设置光标位置 图2基于P89C669的硬件汉字库的原理图 SED_DAT=g—addr&Oxff;//取地址的低8位 SEDDAT=gaddr>>8;//取地址的高8位 _3应用C语言程序 SEDCOM=0x4f; _//光标向下移动 AT29C040A容量为512KB,除了可以存储全部的国标汉 字外,还可以存储8×16的ASCII码点阵数据,使用起来更加方 ptr=HBYTE(HZ_Lib+qwm 32): //取字模地址 SEDCOM=0x42;//将数据写入数据缓冲区 _便。设定AT29C040A在CPU寻址空间中的片选地址为基地 址,以对应汉字库和ASCII码在AT29C04OA中的存储地址为 for(j=0;j<1 6;j++)SED--DAT= (ptr+(j<<1)) ://写汉字的左半部 y++: 偏移地址,则可得在程序中汉字库和ASCII码字符库的寻址地 址。如下面C语句所示: #define ASC Lib #define HZ LIb 0x82600 0x86800 g—addr++; SEDCOM=Ox46; _对P89C669进行编程,可使用汇编或C语言,本文在Keil C51集成环境下采用C51语言进行编程。需要注意的是, P89C669是PHILIPS公司近两年推出的新产品,低于7.0以下 版本的Keil C51不支持P89C669。 SED_DAT=g—addr&0xff; SED_DAT=g—addr>>8; ptr++: SEDCOM=0x42; _for(j=0;j<16;j++)SED_DAT= (ptr+(j<<1)): 维普资讯 http://www.cqvip.com

基于P89C669的硬件汉字库设计 //写汉字的右半部 y++: / 由于西文与16x16汉字相对应的是8xl6的西文,因此只要连续写 16个字节即可,而汉字则要分左半部和右半部两次连续写16个字节 i++: y++: l else i++: ch= (p+i)://取汉字字符串中下一个汉字字模 } l void Write—ch= (p+i): //取下一个字符串中下一个西文字模 l char(Uchar x,Uchar y,char P) l / 图形模式在(x,y)处写西文字符串, P为字符串指针 {  Uint’gaddr;_—以下两条语句就是上述函数的调用语句: WriteWrite—hz(20,1,”开始”); char(20,8,”:”): Uchar i,j: Uchar ptr; Uint ch; I=0: ch= p: 以液晶屏幕左上角作为坐标原点,上面两条语句的结果是 在纵向第2O行,横向第1个单元显示“开始”两个字,同时在横 向第8个单元显示“:”。 4结束语 while(ch!=0) { g—addr=x Wide+y+Address First; SEDCOM=0x46; —采用硬件汉字库,能大大简化系统的维护,简化编程,并提 高程序的可读性和效率,加快产品开发速度,降低软件成本。 参考文献 [1]王海欣,黄海宏.液晶显示器的汉字显示方法【J】.液晶与显示,2005, 20(2):155—158 SED.DAT=g addr&0xff; SED_DAT=g—addr>>8; SEDCOM=0x4f; —[2]刘滨,等硬件汉字库设计原理与应用[Z】.WVWV.ZLGMCU.COM. 2004 ptr=HBYTE(ASC Lib+ch 16);//取字模地址 SEDCOM=0x42; —[3]P89C669产品资料【Z】.WWW ZLGMCU.COM.2004 for(j=0;j<16;j++)SED—DAT= (ptr+(j<<1)): //写西文字符 筇 !铞 : 乖  .尔 尔 不 尔 尔 尔 乖 尔 希 苹 [4]郭强.液晶显示应用技术【M】.北京:电子工业出版社,2000 [收稿日期:2O06 8.30] 尔 尔 乖 尔 尔 不 乖 尔 尔 尔 尔 不 乖 币 尔 (上接第53页) 示的内容;在读数据时:确定要读出内容的地址,再写入读指令 代码,然后读出内容。在整个系统的调试程中,笔者认为比较重 本系统软件设计采用模块化设计思想:以绘制长方形函数 和显示字符函数为例作简单的介绍:void draw_rec(uint xl, uint yl,uint x2,uint y2,uchar sidel,uchar sider)为绘制长 _—要的是在SED1335初始化过程中各命令参数的合理取值。 本系统采用通用型的MCS一 51系列单片机和SED1335液晶 显示控制器,结合模块化程序设 计的思想,可生成图3所示的人 机交互界面。图中阴影部分“器  ff f 方形的函数。其中,(x1,y1)为长方形左上角的顶点坐标,(x2,y2) 为右下角的最低点的坐标。由于本系统使用图形显示方式,液晶 【电压4.5 V l I电压4.2 V l  l l ll 屏为320x240的点阵,可知×1、×2的取值范围是(1-40);yl、y2 l, l 流0.3 A J{也i II J;f 0.2 A 【j l l 的取值范围是(1-240)。side—I、side—r分别为长方形左右两侧 竖线在一个字节中的显示位置,由于长方形的四条边界只需一 件1,.是通过按键选中的对象,它 所对应的“电压值、电流值”为当 前的采样值。 4结束语 列或一行像素点组成,side_l、side r的取值可为(0x01,0x02, 0x04,0x08,0xl0,0x20,0x40,0x80)。在特殊情况下,如多个长 方形之间的嵌套,此时就需先读出地址的内容,并赋给变量old, content I=old.content是在对应的地址要再次写入的数据。 void disch(uint xl,uint yl,uint add,uint num,uchar —圈圈 图3液晶屏显示的内容 实践证明本系统硬件电路简单,程序简洁,通用性强,达到 了设计的目的,为各种人机交互界面的设计,提供了一种有效的 方法。在众多的应用领域中,少量改动程序和字符即可满足用户 的不同需求。 bk_It)为显示字符的函数。其中,(x1,y1)为显示字符在显示屏上 的起始地址,本系统字库内的所有字符为16xl6点阵,取值范 围分别为(1-38)和(1-224)。add为要显示的字符在二维字库中 的对应位置,num为需要显示字符的个数,显示过程是以字库中 参考文献 [1】李维堤,郭强液晶显示应用技术[M】北京:电子工业出版社,1996 第add个字符开始显示,按递增顺序一直显示到第add+num 个字符为止。bk—It为字符反向显示的判断标志,由于LM32019T 是单色显示屏,显示方式只有两种情况,其一背景为蓝色,字符 为亮白色,其二背景为亮白色,字符为蓝色,bk_It取0为第一种 情况,取1为第二种情况。在程序的编写过程中,应定义bk_lt为 全局变量,通过按键的切换来改变bk_lt的值,即可判断出字符 在哪种方式下显示,显示效果为该显示内容是否被选中。 整个系统的程序编写比较简单:SED1335初始化之后,在 显示数据时:确定显示的地址,再写入写指令代码,然后写入显 [2]马忠梅单片机的C语言应用程序设计[M】.北京:北京航空航天大学 出版社。2001 [3]北京清华蓬远公司SED1335控制器图形液晶显示模块使用手册 [Z】.北京:清华蓬远公司,2000 [4]张毅剐,等.MCS一51单片机应用设计【M]哈尔滨:哈尔滨工业大学 出版社,1997 [收稿日期:2006.9 3] 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务