最近一个项目,是用STC15W单片机驱动1.54寸的TFT显示屏。遇到一个问题,即 显示汉字过种中,均可以显示到屏幕上。但是,只有一个汉字不显示,这个汉字就是“过”。
显示程序及效果如下:
经过排查,发现是这个“过”字作为索引在结构体中没有存储完整或是读取时获取的不完整,如下:
输出结果如下:
注意K=11,代表“过”这个汉字在结构体数组中是第11号,明显看出:indx1=0x0,取读的并不完整,有缺失。正常应该是0xfd。也就是“过”这个汉字的GB2312码:0xb9fd
同时,我将Keil的版本进行了降级、升级等,都没办法解决。在结构体加上字节对齐,却无法编译。
烦请各位大神帮看看什么问题。
--------------> 2023/12/21 结帖。具体如下: <-----------------
本文已经结帖,Mark一下。问题的原因是:Keil软件将诸如0xFD的数值作为Keil内码的一部分进行了过滤。
所以,带来的问题就是:GBK码表中0xFD列相关涉及到的汉字,均显示异常。表现为:汉字的低8位,即0xFD显示成了0x0?,所以会出现这类乱码或是空白的情况。
一、参考文档
Keil C51汉字显示的bug问题_0xd5 0xfd-优快云博客
【注】:上述参考文档内关于Keil内C51单片机编译器的错误,解决办法同样适用于C251(但是要在Keil安装目录\C251\Bin目录下修改C251.exe文件)。
二、解决办法:
1. 在待显示的汉字字库、以及代码调用时,汉字后边均加入“\xFD”即可。如:“过”这个汉字,在字库中写成“过\xFD”,程序代码调用时也写成"过\xFD",即可。
2. 我做了个补丁包,请移步这里下载:Keil环境编译汉字字库后,部分汉字显示乱码的补丁包资源-优快云文库