OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10661|回复: 14

汉字显示的问题

[复制链接]

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-5-12
在线时间
0 小时
发表于 2012-5-12 08:22:54 | 显示全部楼层 |阅读模式
原子哥 有个问题 在做汉字显示实验的时候 当GBKL>0X80  Hp=((GBKH-0X81)*190+(GBKL-0X41)*SIZE*2

    
为什么不是GBKL-0x80 而是GBKL-0X41呢  GBK的第二个字节的第二部分 不是从0X80~0XFE么  想了半天 还是不明白  求救
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-12 09:09:03 | 显示全部楼层
摘自不完全手册: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则为对应汉字点阵数据在字库里面的起始地址。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-5-12
在线时间
0 小时
 楼主| 发表于 2012-5-12 10:37:52 | 显示全部楼层
不理解 网上资料也很少  快一个星期了  崩溃了
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2012-5-12
在线时间
0 小时
 楼主| 发表于 2012-5-12 10:59:50 | 显示全部楼层
 就是对0x41不理解啊 啊啊啊 5555555555555555555555
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-12 11:42:23 | 显示全部楼层
 回复【4楼】l275495:
---------------------------------
本来如果连续的话,就不用分两种情况了.但是问题是不连续,中间有个0X7F没有,所以一个减去0X40,一个减去0X41.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2012-5-12 19:52:09 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
“在我的点阵字库中定位方法如下。第一个字节减去0x81,则是
正确的区位,每个区的大小要根据每个字所占用的字节×190(0x7f-0x40+0xff-0x80)即可。如果第二个字节小于0x7f则减去0x40,
如果第二个字节大于等于0x80则减去0x41”这是摘自说明文档里的一句话,原子哥这里"当GBKL>0X80时"应改为”当GBKL>=0X80时“把,不然算出来就不是190个汉字的地址了。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-13 00:39:01 | 显示全部楼层
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-4-3 09:36:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
你这里的字体大小size=16还是32(比如16字体),原子哥回答下
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-3 16:20:56 | 显示全部楼层
单片机上面,我们说的:16字体就是16*16
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-3-21
在线时间
0 小时
发表于 2014-4-15 16:52:29 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
原子哥 Hp=((GBKH-0X81)*190+(GBKL-0X41)*SIZE*2 这个公式最后乘以2是什么意思,是两个字节吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-15 20:31:31 | 显示全部楼层
回复【10楼】abcddcba:
---------------------------------
公式是:Hp=((GBKH-0X81)*190+(GBKL-0X41))*(SIZE*2)
你少了一些内容。。。
size*2=一个汉字所占点阵的大小。
对于12*12的字体,一个汉字占:24字节。
对于16*16的字体,一个汉字占:32字节。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-4-2
在线时间
0 小时
发表于 2014-5-16 14:35:48 | 显示全部楼层
回复【4楼】l275495:
---------------------------------
编码规则是相对于0X8140 来说的
回复 支持 反对

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-21 23:01:37 | 显示全部楼层
表示还是不是很懂 和楼主一样
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复 支持 反对

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-21 23:07:22 | 显示全部楼层
突然之间懂了  因为  和 原子说的一样 少了一个  0x7f  如果改成  0x80  那么   GNKL ==  0x82  就会和  GBKL == 0x 42 重叠起来  数据就会被破坏  
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-12-23
在线时间
4 小时
发表于 2017-6-20 19:49:02 | 显示全部楼层
正点原子 发表于 2014-4-15 20:31
回复【10楼】abcddcba:
---------------------------------
公式是:Hp=((GBKH-0X81)*190+(GBKL-0X41))*( ...

12*12的字体,一个汉字不应该是占12*12/8=18个字节吗?为什么是24字节呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-18 02:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表