汉字显示的问题

2019-08-17 06:20发布

原子哥 有个问题 在做汉字显示实验的时候 当GBKL>0X80  Hp=((GBKH-0X81)*190+(GBKL-0X41)*SIZE*2

    
为什么不是GBKL-0x80 而是GBKL-0X41呢  GBK的第二个字节的第二部分 不是从0X80~0XFE么  想了半天 还是不明白  求救
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
正点原子
1楼-- · 2019-08-17 06:28
摘自不完全手册:3.24节.
      所以只要我们有了整个汉字库的点阵,就可以把电脑上的文本信息在单片机上显示出来了。这里我们要解决的最大问题就是制作一个与汉字内码对的上号的汉字点阵库。而且要方便单片机的查找。每个GBK码由2个字节组成,第一个字节为0X81~0XFE,第二个字节分为两部分,一是0X40~0X7E,二是0X80~0XFE。其中与GB2312相同的区域,字完全相同。
我们把第一个字节代表的意义称为区,那么GBK里面总共有126个区(0XFE-0X81+1),每个区内有190个汉字(0XFE-0X80+0X7E-0X40+2),总共就有126*190=23940个汉字。我们的点阵库只要按照这个编码规则从0X8140开始,逐一建立,每个区的点阵大小为每个汉字所用的字节数*190。这样,我们就可以得到在这个字库里面定位汉字的方法:
当GBKL<0X7F时:Hp=((GBKH-0x81)*190+GBKL-0X40)*(size*2);
当GBKL>0X80时:Hp=((GBKH-0x81)*190+GBKL-0X41)*(size*2);
其中GBKH、GBKL分别代表GBK的第一个字节和第二个字节(也就是高位和低位),size代表汉字字体的大小(比如16字体,12字体等),Hp则为对应汉字点阵数据在字库里面的起始地址。
l275495
2楼-- · 2019-08-17 07:03
不理解 网上资料也很少  快一个星期了  崩溃了
l275495
3楼-- · 2019-08-17 07:38
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-08-17 12:36
 回复【4楼】l275495:
---------------------------------
本来如果连续的话,就不用分两种情况了.但是问题是不连续,中间有个0X7F没有,所以一个减去0X40,一个减去0X41.
xiaoyan
5楼-- · 2019-08-17 16:28
回复【5楼】正点原子:
---------------------------------
“在我的点阵字库中定位方法如下。第一个字节减去0x81,则是
正确的区位,每个区的大小要根据每个字所占用的字节×190(0x7f-0x40+0xff-0x80)即可。如果第二个字节小于0x7f则减去0x40,
如果第二个字节大于等于0x80则减去0x41”这是摘自说明文档里的一句话,原子哥这里"当GBKL>0X80时"应改为”当GBKL>=0X80时“把,不然算出来就不是190个汉字的地址了。
正点原子
6楼-- · 2019-08-17 20:11

一周热门 更多>