|
放在外部flash里面,flash的大小肯定得大于262k,那就需要用19跟地址线来进行寻址,那么如何根据偏移地址来计算这个字模在flash中的实际地址呢,我手上有一个程序,但是我看不懂是如何进行寻址的,
硬件电路时这样连接的
点击此处下载 ourdev_598133FJ74RS.pdf(文件大小:43K) (原文件名:Protel Schematic.pdf)
字库文件是放在u25芯片的flash中,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; //计算液晶控制器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位呢? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|