jasonli 发表于 2010-11-15 18:03:29

请问傻孩子,将HZK16标准字库放到有19根地址线的外部flash,如何根据字的偏移量来计算各

放在外部flash里面,flash的大小肯定得大于262k,那就需要用19跟地址线来进行寻址,那么如何根据偏移地址来计算这个字模在flash中的实际地址呢,我手上有一个程序,但是我看不懂是如何进行寻址的,
硬件电路时这样连接的
点击此处下载 ourdev_598133FJ74RS.pdf(文件大小:43K) (原文件名:Protel Schematic.pdf)
字库文件是放在u25芯片的flash中,u25一共有19跟地址线,需要分开寻址,a0-a12,q0-q5,一共19跟地址线寻址
显示汉字程序时这样的:
#define B377        XBYTE   //原理图中的u4芯片
/*-----------------------------------------------------------------------------------------
**函数名:hzdisplay()
**功能:显示一个汉字
**参数:x-列,y-行,party-汉字内码区号,addr-汉字内码位码,style-反显正常显示
**返回:void
------------------------------------------------------------------------------------------*/
void hzdisplay(uchar x, uchar y, uchar party, uchar addr,uchar style)    //显示一个汉字
{
        uchar i;
        uint realaddr,ttp,temp;
        uchar xdata *hz;

        ttp=party*94+addr-95;   //计算汉字在GB 2312-80区中的位置 index = (94*(region-1)+location-1)*32;//数组内地址
        temp=ttp<<5;                  //每个字模有32个字节,所以计算得到的地址需要乘以32
        temp&=0x1fff;
        temp|=0xa000;                        //取低13位,此时temp为此字字模的首地址
        B377=ttp>>8;                        //取高6位,并用74hc377锁存送出,共19位地址,采用040做字库

        ttp=x+y*30;         //计算液晶控制器ram的地址
        for(i=0;i<16;i++)
        {
                   realaddr=ttp+i*30;
                   addrset(realaddr);//写地址
                   hz=temp;
                hz+=i<<1;
          data1w((style)?~(*hz):*hz);//写数据显示
                   addrset(realaddr+1);
                   hz++;
                   data1w((style)?~(*hz):*hz);
        }
}

这几句不明白:
temp&=0x1fff;
temp|=0xa000;                        //取低13位,此时temp为此字字模的首地址
B377=ttp>>8;                        //取高6位,并用74hc377锁存送出,共19位地址,采用040做字库

我想问一下,确定字在字库中的位置后,如何去rom寻址,a0-a12这个显而易见,那q0-q5如何取值呢?即如何高6位地址,为什么是右移8位呢?

Gorgon_Meducer 发表于 2010-11-17 22:11:08

这个不太懂啊……没有弄过……

physis 发表于 2010-11-17 23:02:05

俺也不懂..不过建议你不如尝试一下成品的字库芯片
我见过so-8封装的spi接口字库,价格3块钱上下,也有其他接口的
页: [1]
查看完整版本: 请问傻孩子,将HZK16标准字库放到有19根地址线的外部flash,如何根据字的偏移量来计算各