字库存储在AT45中的寻址方式(好东西)
0赞
发表于 7/26/2010 11:02:36 PM
阅读(1787)
AT45DB161 SPI FALSH 做为标准汉字库。 (HZK16)
;=================================================================================
;HZK.c
;=================================================================================
;HZK.c
;=================================================================================
void HZK_FindPos(unsigned char *hz,HZK_POS *pos) //寻找汉字hz在FLASH中的位置,即所在的扇区号及扇区内的偏移量
{
unsigned long qh,wh;
unsigned long offset;
//占两个字节,取其区位号
qh=hz[0]-0xa0;
wh=hz[1]-0xa0;
offset=(94*(qh-1)+(wh-1))*HZ_BYTES;//得到偏移位置 HZK16中HZ_BYTES为32
pos->sector=OFFSET+offset/512; //计算得到扇区号
pos->offset=offset%512; //计算得到扇区内的偏移量
}
{
unsigned long qh,wh;
unsigned long offset;
//占两个字节,取其区位号
qh=hz[0]-0xa0;
wh=hz[1]-0xa0;
offset=(94*(qh-1)+(wh-1))*HZ_BYTES;//得到偏移位置 HZK16中HZ_BYTES为32
pos->sector=OFFSET+offset/512; //计算得到扇区号
pos->offset=offset%512; //计算得到扇区内的偏移量
}
void HZK_Load_HZ(unsigned char *phz,HZK_POS *pos,unsigned char *phz_code) //将汉字的字模数据从HZK16相应位置(即计算得到的FLASH中的位置)读出来,装入phz_code
{
HZK_FindPos(phz,pos);
AT45DB161_ReadBytes(pos->sector,pos->offset,HZ_BYTES,phz_code);
}
{
HZK_FindPos(phz,pos);
AT45DB161_ReadBytes(pos->sector,pos->offset,HZ_BYTES,phz_code);
}
void HZK_Convert(unsigned char *s1,unsigned char *s2) //字模数据变换
{
int idata i=0;
for(i=0;i<32;i++) s2[i]=0;
{
int idata i=0;
for(i=0;i<32;i++) s2[i]=0;
for(i=0;i<128;i++) (s1[i/8]&(1<<(7-i%8)))?s2[i%16]|=(1<<(i/16)):0;
for(i=128;i<256;i++) (s1[i/8]&(1<<(7-i%8)))?s2[i%16+16]|=(1<<((i-128)/16)):0;
}
这是其中的一节,主要是看一下是怎么寻址和字模数据的变换
}
这是其中的一节,主要是看一下是怎么寻址和字模数据的变换
