读hzk32_hzk16的介绍以及简单的使用方法

define int8 unsigned char

#define int16 unsigned int

#define int32 unsigned long

/*

函数void read_hz(int16 hz)的参数hz为两字节的机内码,调用方法:read_hz(‘汉’);

对ASCII字符,则read_hz('A'+0xa380);读取

*/

void read_hz(int16 hz){

void *void_p;//定义一个空类型指针

int8 *int8_p;//定义一个unsigned char 指针

int8 i;   //定义一个循环变量

int16 area_l,area_h;//定义两个整型变量,用于存储区码和位码

int32 pos;  //定义一个long型变量,用于存储计算所得字模在字库的位置,

int8 chip;  //字模所在的芯片,可用74HC138之类的芯片译码。

int16 addr;  //在某一芯片64K字节空间内的地址

void_p=&hz;    //空指针指向机内码的低字节

int8_p=void_p;    //char类型指针指向空指针,即机内码的低字节

area_l=*int8_p-0xa0; //机内码低字节减去0xa0得到区码

area_h=*(int8_p+1)-0xa0; //机内码高字节减去0xa0得到位码

pos=32*((int32)((area_h-1)*94)+area_l-1); //计算在一个完整的字库中的位置(256K)

//pos=116672; //这是“请”字在HZK16文件中的位置,单位为字节。用于测试

if(pos&lt64*1024)   //在第一片27512芯片

{

chip=0;addr=(int16)pos;

}

else if((pos&gt=64*1024)&&(pos&lt128*1024)) //在第二片27512芯片

{

chip=1;

addr=(int16)pos;

}

else if((pos&gt=128*1024)&&(pos&lt192*1024)) //在第三片27512芯片

{

chip=2;

addr=(int16)pos;

}

else if((pos&gt=192*1024)&&(pos&lt256*1024)) //在第四片27512芯片

{

chip=3;

addr=(int16)pos;

}

select_chip(chip);   //选择第chip片27512芯片

for(i=0;i&lt32;i++)

{

hz_buffer[i]=read_data(addr+i); //读取一字节的数据

}

}

在实际中,由于现很少采用EPROM芯片,可以用并口、SPI,I2C接口的大容量Flash、EEPROM芯片。但I2C接口速度较慢,显示汉字的速度将会很慢,可以在一些比较少字场合使用;而SPI接口的存储芯片速度较快,接口简单,对于一般的应用场合还是可以满足的;对于大量使用的场合,可以使用并行接口,它具储存空间大,读取速度快的特点,如使用AT29系列的Flash存储器,单片容量可以达到256K以上,就不需要分开存储,但其需要较多的IO口,接口复杂。所以应根据实际来选择存储器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值