|
发表于 2010-11-15 17:45:44
|
显示全部楼层
楼主,你的字库是放在哪里的?如果是放在外部flash里面,flash的大小肯定得大于262k,那就需要用19跟地址线来进行寻址,那么如何根据偏移地址来计算这个字模在flash中的实际地址呢,我手上有一个程序,但是我看不懂是如何进行寻址的,硬件电路时这样连接的点击此处下载 ourdev_598133FJ74RS.pdf(文件大小:43K) (原文件名:Protel Schematic.pdf)
字库文件是放在u25rom中,u25一共有19跟地址线,需要分开寻址,a0-a12,q0-q5,一共19跟地址线寻址
显示 汉字程序时这样的:
#define B377 XBYTE[0xd800] //原理图中的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;
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);
}
}
我想问一下,确定字在字库中的位置后,如何去rom寻址,如何确定a0-a12,q0-q5的取值?
这几句不明白
temp=ttp<<5; //每个字模有32个字节,所以计算得到的地址需要乘以32
temp&=0x1fff;
temp|=0xa000; //取低13位,此时temp为此字字模的首地址
B377=ttp>>8; //取高6位,并用74hc377锁存送出,共19位地址,采用040做字库 |
|