单片机应用中快速建立小字库的方法~!

           在许多单片机应用系统中,经常要用到汉字,以便进行输出显示,此时需要建立单片机的专用字库,而人工向单片机输入所需汉字是非常费时费力的工作。因此需要从大字库中分离出小字库,自我生成一个专用的小字库。

          1. 汉字的区位码与内码

           国家标准的汉字字符集(GB2312-80)在汉字操作系统中是以汉字库的形式提供的。汉字库结构有统一规定,即将汉字库分成94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号(用两个字节),这就是所谓的区位码。区位码的第一个字节表示区号,第二个字节表示位号,因而只要知道了区位码,就可以知道该汉字在字库中的地址。每个汉字在字库中是以点阵字模形式存储的,当用存储单元存储该字模信息时,将需要32字节。在计算机内,英文字符是用一个字节的ASCII码表示的,而对于众多的汉字,需用两个字节才能代表,国家为此制定了统一标准,称为国标码。又规定国标码在机内表示汉字时,将每个字节的最高位置1。这些国标码的两字节最高位加1后的代码称为机器内的汉字代码,简称内码。

          2 内码转换为区位码与取字模

             汉字内码与区位码有固定的转换关系,即若汉字内码为十六进制数aaff,则区号qh和位号wh分别为 qh=aa-0xa0;wh=ff-0xa0。 由于在中文DOS下,输入汉字时,其相应的内码即已在程序中存在,如同在西文DOS下,输入英文字符时,其对应的ASCII也在程序中存在一样。因而得知汉字内码,将其转换为区位码,这样就可以找出该汉字字模在字库中存放的地址,由此地址调出该32字节汉字的内容(字模)。

            在以上知识的基础上,单片机利用C语言建立小字库的方法是这样的:在UCDOS下打开标准字库→取出所需汉字字模→生成专用小字库文件。但是,单片机不能识别C语言建立的专用小字库文件。 因此,需要把C语言建立的专用小字库转换成MCS51单片机能识别的存储模式。下面是转换过程所需的C语言语句: //C语言建立小字库文件

fp16 fread(&buffer,char_16,1,fp16);//取字模

for(j=0;j<= char_16-1;j )//设置循环次数(一个汉字字模为32字节)

{ fprintf(fp22,“db”);//MCS51语句定义符(fp22为MCS51能识别的库文件)

if(buffer\[j\]<=0xf buffer\[j\]>=0xa)//若一个字节左边 是字母(≥10),前面加0

{ fprintf(fp22,“%x”0); } printf(fp22,“%x”,buffer\[j\]);//写汉字字模(一次一个字节)

 fprintf(fp22,“h\\n”);//最后加上H,然后换行 } 

        在DOS环境下,把利用C语言建立的单片机小字库文件fp22与单片机汇编程序合在一起,通过单片机开发器写入EPROM。可以看出,每个汉字字模都由程序自动写入EPROM,既节省时间,又避免了字模人工输入时可能产生的错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值