关于12864液晶屏汉字显示问题

在我们学习或者开发12864显示屏(带字库)的过程中,可能大家会遇到我这样的情况。如下:
 

关于12864液晶屏汉字显示问题_第1张图片

关于12864液晶屏汉字显示问题_第2张图片

第三行的“ 数学 ” 两字显示不出来?而第四行却可以,为什么?

答案显而易见,仔细观察的人就发现我第三行跟第四行有个不同的地方就是加了  “ \xfd ”  

我给大家解释解释

这个问题是由于keil本身的固有bug,keil编译器会忽略0xFD值的字符串,导致汉字内码以0xFD结尾的汉字和紧跟着后面的汉字全部显示为乱码,因为它把0xFD丢掉了,导致后面的一大串全是错的。(但是keil官方不认为这是一种bug,所以一直没有去修改这个缺陷

 

下面是Keil官方的说明:
http://www.keil.com/support/docs/2618.htm

GENERAL: COMPILER IGNORES 0XFD, 0XFE, 0XFF VALUES IN STRINGS


Information in this article applies to:

  • C166 Compiler All Versions
  • Cx51 Compiler All Versions
  • C251 Compiler All Versions

QUESTION

I have a problem with the interpretation of Russian strings in the Keil C51 compiler. Some Russian characters are using the encoding 0xFD. It looks like this encoding is ignored by the compiler and is not included in the program code.

Example:

code char RussianString[] = "??? ????";

Why does this problem exist and how can I avoid this behavior?

ANSWER

The character encodings 0xFD, 0xFE, and 0xFF are used internally by the C compiler. The ANSI standard only requires support for ASCII characters in the range 0x00 - 0x7F.

You may insert these characters by using HEX encodings in the string as follows:

code char RussianString[] = "My Text" "\xFD";

A simple text replacement which replaces all 0xFD characters with the string '" "\xFD' should do the job.

 

翻译过来就是:

字符编码0xFD,0xFE和0xFF由C编译器在内部使用。 ANSI标准仅要求支持0x00 - 0x7F范围内的ASCII字符。

您可以在字符串中使用HEX编码插入这些字符,如下所示:

code char RussianString [] =“My Text”“\ xFD”;

使用字符串'“”\ xFD'替换所有0xFD字符的简单文本替换应该可以完成。

****************************************************************************************************************************************

可能有些网友回去修改Keil里面的文件,但不是很建议,因为一旦修改了,对于后面又不知道出现不可想象的错误。

所以我们自己手动添加一个  \xfd    就可以正常显示了。例子就是图片中修改即可。

 

 

读者根据下面两个可以对照了解一下

 

下面是从GB2312中挑出来的相关汉字:

褒 饼 昌 除 待 谍 洱 俘 庚 过 

糊 积 箭 烬 君 魁 例 笼 慢 谬 

凝 琵 讫 驱 三 升 数 她 听 妄 

锡 淆 旋 妖 引 育 札 正 铸 

佚 冽 邶 埤 荦 蔟 摭 啐 帻 猃 

恺 泯 潺 妪 纨 琮 椠 辇 挲 臊 

忑 睚 铨 稞 瘕 颀 螨 簖 酏 觚 

鳊鼾 

 

汉字内码以0xFD结尾的汉字都显示不出来

关于12864液晶屏汉字显示问题_第3张图片

求证如下:

关于12864液晶屏汉字显示问题_第4张图片

 

 

关于12864液晶屏汉字显示问题_第5张图片

 

大家尝试把上面的  \xfd  删除,对比一下,就清楚了。

 

觉得不错,点个赞支持一下!!!

你可能感兴趣的:(51单片机)