OpenEdv-开源电子网

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

汉字显示中重要的问题。

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-4-3
在线时间
0 小时
发表于 2012-4-3 15:10:59 | 显示全部楼层 |阅读模式
 在汉字显示实验中,将 unicode码转换gbk码,然后将转换之后的gbk找字库中的汉字,然后在lcd显示,我用u16 UnicodeToGBK(u16 unicode)将unicode码转换成gbk码,然后用void Show_Font(u8 x,u8 y,u8 *font,u8 size,u8 mode)将unicode对应的汉字显示在液晶上,我用 gbk1=UnicodeToGBK(0x5927);
   Show_Font(148,190,gbk1,16,0);  编译时显示错误,test.c(108): error:  #167: argument of type "u8" is incompatible with parameter of type "u8 *"
 我又用gbk1[0]=UnicodeToGBK(0x5927); 
      Show_Font(148,190,gbk1,16,0);  显示不出来字,希望各位大侠帮我解决。
互相学习,共同进步。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-4-3 20:02:29 | 显示全部楼层
Show_Font(148,190,"测试"1,16,0);
这样直接就显示测试了。。。  
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-4-3
在线时间
0 小时
 楼主| 发表于 2012-4-4 09:52:43 | 显示全部楼层
原子哥,那样是单独的显示汉字,我是想通过仅仅知道unicode码 ,然后经过一级一级的转换,然后查字库,将相应的汉字显示在液晶上。 比如我现在只知道unicode码 0x5927(汉字为:大)。如何转换到我想要的汉字呢,原子哥,麻烦你了
互相学习,共同进步。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-4-3
在线时间
0 小时
 楼主| 发表于 2012-4-4 09:57:16 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,那样是单独的显示汉字,我是想通过仅仅知道unicode码 ,然后经过一级一级的转换,然后查字库,将相应的汉字显示在液晶上。 比如我现在只知道unicode码 0x5927(汉字为:大)。如何转换到我想要的汉字呢,原子哥,麻烦你了
互相学习,共同进步。
回复 支持 反对

使用道具 举报

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2012-3-4
在线时间
0 小时
发表于 2012-4-4 10:10:51 | 显示全部楼层
回复【4楼】好学的孩子:
---------------------------------
对汉字unicode不怎么了解。但是猜一下,大概也懂。

比如说或显示英文字符,对于点阵屏来说,想显示'R'的时候,实际上是根据‘R’在ASC II表中的位置来提取字库的。
而汉字不同的仅仅是它代表了两个字符,个人认为也是这样来查找字库的。


不确定,等高手来解答。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-4-3
在线时间
0 小时
 楼主| 发表于 2012-4-4 10:45:36 | 显示全部楼层
回复【5楼】Trigger:
---------------------------------
谢谢你的回答,那些原理我几乎了解,就是一直弄不懂,UnicodeToGBK(u16 unicode)和Show_Font(u8 x,u8 y,u8 *font,u8 size,u8 mode)怎么联合应用?其中的变量怎么设啊?
互相学习,共同进步。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-4-4 11:33:15 | 显示全部楼层
参考FAT.c.里面有用到UnicodeToGBK这个函数.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-4-3
在线时间
0 小时
 楼主| 发表于 2012-4-4 16:17:39 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥,那个UnicodeToGBK函数的返回值GBK是两个字节,而 fontx 中也是两个字节,但是只有当fontx[0]和fontx[1]分别赋值一个字节之后,整体的 fontx 中所含的汉字才能用Show_Font ()显示出来,怎么定义才能把UnicodeToGBK函数返回值GBK的两个字节同时赋值给fontx中?麻烦你了.这个问题对我太重要了。一直困扰我一周了。拜托了。
互相学习,共同进步。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-4-4 20:30:30 | 显示全部楼层
回复【8楼】好学的孩子:
---------------------------------
用u16格式的咯.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2012-10-5
在线时间
0 小时
发表于 2012-11-7 10:27:39 | 显示全部楼层
gbk1=UnicodeToGBK(0x5927);
gbk[1]=(u8)gbk1;
gbk[0]=gbk1>>8; 
    Show_Font(60,226,gbk,16,0);  
这样便可以实现显示大,这个字了。。。。
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-4-3 11:03:06 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
//code 字符指针开始
//从字库中查找出字模
//code 字符串的开始地址,GBK码
//mat  数据存放地址 size*2 bytes大小  
void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
{     
unsigned char qh,ql;
unsigned char i;   
unsigned long foffset; 
qh=*code;
ql=*(++code);
if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//非 常用汉字
{        
    for(i=0;i<(size*2);i++)*mat++=0x00;//填充满格
    return; //结束访问
}          
if(ql<0x7f)ql-=0x40;//注意!
else ql-=0x41;
qh-=0x81;   
foffset=((unsigned long)190*qh+ql)*(size*2);//得到字库中的字节偏移量     

if(size==16)SPI_Flash_Read(mat,foffset+ftinfo.f16addr,32);
else SPI_Flash_Read(mat,foffset+ftinfo.f12addr,24);          
}  

原子哥,这个size是什么,若是16字体就是:16*16=256,256/8=32字节,size*2=16*2=32字节可以理解。
但是12字体就是size*2=24,12*12/8=18,24!=18,这怎么理解
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-3 15:21:48 | 显示全部楼层
回复【11楼】SCREA:
---------------------------------
点阵字库生成,不可能生成一个12位的数据给你吧?
要嘛u8,要嘛2个u8,要嘛3个u8...
你见过u12的数据类型么?

所以,12=8+4=8+4+4(填充4个位0),就是16了
16*12/8=24字节了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-4-7 09:56:36 | 显示全部楼层

ew回复【12楼】正点原子:
---------------------------------
            原子哥,看看这张图片哪里配置不正确,我取模方式为2,但是生成的16字体代替光盘的16字体,出来是乱点

                            

QQ截图20140407095521.png
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-4-7 12:25:25 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
还有,我生成的“GBK16.FON”为276KB,你的则是748kb。!
为何啊,我找了4小时了
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-4-7 13:09:37 | 显示全部楼层
回复【14楼】SCREA:
---------------------------------
你选的PRC GBK
。。。。
2312是 offset=(94*(区码-1)+(位码-1))*32
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-7 22:31:48 | 显示全部楼层
回复【15楼】SCREA:
---------------------------------
恩,我用的是GBK呢。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2014-4-8 07:21:17 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------
原子哥,原子哥,遇到新问题了。32*32的汉字搞出来了,但是00-0x80的32*32的ASICS-2的点阵怎么搞?一个一个搞太累了吧
我的意思是有没有软件或者现成的点阵数组或bin
---------------------------
PCtoLCD2002  
生成的数组没有0x,怎么才能全部加上0x?会了

打扰了

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-8 09:19:54 | 显示全部楼层
在设置里面....仔细看看那个设置对话框.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-24 13:50:47 | 显示全部楼层
看过,顶一下。
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-24 15:01:53 | 显示全部楼层
回复【19楼】wyudcl:
---------------------------------
自己动手提取汉字点阵,(根据原子显示汉字程序提取)
例子如下:
1 显示汉字为“欧”
2 xy轴各16点,
3 提取顺序是,x轴加1时y轴加16,
结果如下:
{0x00,0x00,0x3f,0xfe,0x24,0x12,0x23,0x62,
0x20,0x82,0x31,0x63,0xa6,0x1a,0x40,0x20,
0x30,0x10,0x0c,0x0f,0x03,0xe8,0x0c,0x08,
0x30,0x08,0x60,0x28,0x20,0x18,0x00,0x00,
}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 13:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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