OpenEdv-开源电子网

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

汉字显示实验显示乱码

[复制链接]

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-4-6 11:29:56 | 显示全部楼层 |阅读模式
1金钱
大家好。
在用探索板做汉字显示实验时,LCD上显示乱码。如图1所示。
然后按了一下key0,显示font update failed,如图2所示。
我的SD卡是买探索板时从原子哥的店里一块购买的,请问出现这种现象,是因为SD卡里没有字库吗?(用的电脑没有SD卡插口,看不见里面都有些啥)
1.jpg
2.jpg

最佳答案

查看完整内容[请看2#楼]

经过反复试验,终于找到原因了。 起初,我用的是MDK5.14,由于5.14对汉字兼容性不太好,我在一个帖子上发现一款编码转换软件(UltraCodingSwitch.exe),于是就将所有的例程源码进行转换了,以方便复制注释时不再有乱码。 但是,到了MDK5.25,MDK对汉字的支持就比较好了。对于已经经过UltraCodingSwitch软件转换的例程,只要程序文件中出现汉字,例如使用Show_Str()函数时,汉字作为入口参数,那么,5.25编译时就会报missing clo ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-4-6 11:29:57 | 显示全部楼层
本帖最后由 学习stm32f4 于 2018-4-6 20:11 编辑

经过反复试验,终于找到原因了。
起初,我用的是MDK5.14,由于5.14对汉字兼容性不太好,我在一个帖子上发现一款编码转换软件(UltraCodingSwitch.exe),于是就将所有的例程源码进行转换了,以方便复制注释时不再有乱码。
但是,到了MDK5.25,MDK对汉字的支持就比较好了。对于已经经过UltraCodingSwitch软件转换的例程,只要程序文件中出现汉字,例如使用Show_Str()函数时,汉字作为入口参数,那么,5.25编译时就会报missing closing quote错误,若在Misc Controls中添加--locale=english,虽然会解决报错问题,但是LCD显示时凡是汉字就显示成乱码。
对此,有两个解决办法:

1,删除所有经UltraCodingSwitch软件转换过的例程,重新从源压缩包里提取例程,千万不要再编码转换了。没有经过UltraCodingSwitch转换的例程,5.25编译后一切正常,LCD显示正常。
2,若不想删去经过转换的例程,那么,用记事本打开main.c,然后什么也不做,直接点击记事本的edit/save即可。这样,编译后不再有错误了,LCD汉字也正常显示了。(我也不知道UltraCodingSwitch软件到底对包含汉字的main.c做了什么手脚)

MDK5.25没有问题,还是我对计算机理论了解的非常肤浅所致。

有兴趣的坛友可以用UltraCodingSwitch.exe测试一下,将汉字显示实验源码经过它转换后,再用MDK5.25(估计其它版本也行)编译试试有没有报错,凡是报missing closing quote错误的,肯定是UltraCodingSwitch.exe造成的。
回复

使用道具 举报

1

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
265
金钱
265
注册时间
2018-3-24
在线时间
48 小时
发表于 2018-4-6 11:51:40 | 显示全部楼层
感觉是编码的问题.....
回复

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2018-4-5
在线时间
23 小时
发表于 2018-4-6 14:34:00 | 显示全部楼层
你的汉字编码格式是什么??乱码,一般都是编码格式不对。你看看,你用的是gb2312,还是utf-8??
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-4-6 14:46:20 | 显示全部楼层
geniikid 发表于 2018-4-6 14:34
你的汉字编码格式是什么??乱码,一般都是编码格式不对。你看看,你用的是gb2312,还是utf-8??

您好。
程序用的是例程,原封不动,什么都没改。

MDK是5.25版本,编译时总报error:  #8: missing closing quote错误,根据帖子,我在魔术棒/C/C++选项卡里的Misc Controls填入了--locale=english,这样就不报错了。

在Edit/Configuration的Editor选项卡里,无论我选Chinese GB2312,还是Encode in ANSI,或者Encode in UTF-8 without signature,下载到开发板后,都显示乱码。
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-4-6 14:49:23 | 显示全部楼层
上传一下例程

实验40 汉字显示实验.rar

1.16 MB, 下载次数: 251

回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-4-6 14:51:58 | 显示全部楼层
505062593 发表于 2018-4-6 11:51
感觉是编码的问题.....

您好。试着修改MDK的编码设置,还是老样子
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-4-6 15:23:40 | 显示全部楼层
本帖最后由 学习stm32f4 于 2018-4-6 16:18 编辑

硬件仿真时,对于main函数的:
while(font_init())                         //检查字库
这句话,可以发现font_init()返回0,就直接跳出while了。
由此可知SPI FLASH中的字库是完好的。
接着,运行到:
Show_Str(30,50,200,16,"探索者STM32F407开发板",16,0);               
这时,LCD上就显示乱码了。
由此推断,显示乱码的原因,很可能是MDK软件哪里设置有问题
另一方面,按下key0时,为何不能强制更新字库呢?
又通过硬件仿真,发现SD卡中确实没有字库文件,如图1、图2所示。
因此,按下key0后,会显示font update failed。

总之,只要MDK软件设置这一问题没有得到有效解决,即使SD卡、SPI FLASH中有字库,LCD上也会显示乱码。
故最关键的问题是,找到MDK软件哪里设置出问题了。
2.jpg
1.jpg
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-4-6 16:47:02 | 显示全部楼层
本帖最后由 学习stm32f4 于 2018-4-6 17:06 编辑

囧囧囧
从总的程序源码压缩包里重新将“汉字显示实验”源码解压出来后,编译,竟然没报错。怎么回事?!
查看魔术棒的C/C++选项卡的Misc Controls,什么也没填。
接着查看configuration,默认选的是Chinese GB2312,再次编译,没报错。
下载后,一切显示正常。囧。
然后,我依次选择ANSI、UTF-8,编译下载,也是一切正常。

为了测试是不是--locale=english的影响,我将它填到Misc Controls里,依次选择Chinese GB2312、ANSI、UTF-8,编译下载,一切正常,LCD无乱码。

真的摸不透MDK的脾气啊。踩了MDK的坑。

附件是两个一模一样的工程,都用MDK5.25打开,编译,压缩包1若不在Misc Controls添加--locale=english,会报“error:  #8: missing closing quote错误”,即使添加了--locale=english,编译不报错,但是LCD显示乱码。压缩包2无论加不加--locale=english都不报错,LCD正常显示。


1.rar

1.16 MB, 下载次数: 54

2.rar

1.15 MB, 下载次数: 46

回复

使用道具 举报

0

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2017-8-23
在线时间
23 小时
发表于 2018-4-7 02:29:16 | 显示全部楼层
是不是平常都没看过警告啊
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-4-9 15:35:15 | 显示全部楼层
吃瓜群众 发表于 2018-4-7 02:29
是不是平常都没看过警告啊

呵呵,很少注意警告
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
发表于 2018-9-5 10:22:07 | 显示全部楼层
学习stm32f4 发表于 2018-4-6 14:46
您好。
程序用的是例程,原封不动,什么都没改。

我也是这样的,我用的也是5.23,也是发过去的都是乱码
回复

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-9-5 10:56:40 | 显示全部楼层
凌凌漆 发表于 2018-9-5 10:22
我也是这样的,我用的也是5.23,也是发过去的都是乱码

我现在用5.25了,很好用,兼容中文了,不用再转换,另外编译快多了
论坛里有下载链接
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
发表于 2018-9-5 11:40:16 | 显示全部楼层
学习stm32f4 发表于 2018-9-5 10:56
我现在用5.25了,很好用,兼容中文了,不用再转换,另外编译快多了
论坛里有下载链接

5.25 下载不来的
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-12-22
在线时间
6 小时
发表于 2020-12-23 18:06:41 | 显示全部楼层
我的也是,部分乱码?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 23:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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