问题描述:使用keil C51编译环境,带字库液晶.发现有些汉字使用这样语句无法显示: uchar code coun_show1[]={"请输入第一操作数"};其中的汉字"数"将不会显示,而如果用简体中文编码代替以上汉字,如:uchar code coun_show1[]={0xc7,0xeb,0xca,0xe4,0xc8,0xeb,0xb5,0xda,0xd2,0xbb,0xb2,0xd9,0xd7,0xf7,0xca,0xfd};,在液晶屏上汉字"数"是可以显示的.其中,汉字"数"简体中文编码为:0xca,0xfd. 还发现一些汉字,比如"除"(简体中文编码:0xb3,0xfd),"三"(简体中文编码0xc8,0xfd)等,还发现这些不能显示的汉字都有一个共同点:简体中文编码的第二个字节都是0xfd.
这是个很早前遇到的问题,要追溯到我还在大学备战大学生电子竞赛的时候,工作期间又一次遇到这个问题.只是分析出可能是编译器的bug,因为简体中文编码下,液晶是可以显示的,但一直没有得到证实.知道前几天在网上闲逛,看到了一个补丁,才意识到自己当初的猜想是正确的.
原来,这确实是一个编译器bug: keil c51在编译的时候会将0xfd的字符(有些汉字含该字符的内码,比如汉字"数")过滤, 而导致程序出错.特别是在做液晶汉字显示时.
针对这个bug,有些网友制作了一个补丁,下载之后放到你的keil/c51/bin 目录里,运行这个程序.就可以了. 支持v8.02
可以到这个网站下载补丁:http://share.eepw.com.cn/share/download/id/17061
或者到这个网站下载补丁:http://www.cndzz.com/down/soft/39675.htm
PS:由于现在主要做ARM,keil c51基本不再使用,所以以上补丁本人没有做过测试.
另外:设置编译器 编码格式
从主菜单依次点击 Edit >> Configuration 中进行修改
0xFD Bug是keil编译器中始终存在,而又从未得到官方修复的一个BUG!!!
BUG描述:当C源代码中使用了汉字等非ASCII字符,而此字符的编码又恰好包含了大于或等于0xFD的字节时,这个字节将被编译器删除,从而最终程序代码的运行错误。
BUG修复方法一:
用十六进制编辑软件打开c51.exe和cx51.exe(这两个文件是相同的,名字不同)
c51.exe位置: Keil安装目录/keil/c51/bin/c51.exe
cx51.exe位置:Keil安装目录/keil/c51/bin/cx51.exe
v905之前的0xfd漏洞修正方法:
查找 80fbfd56
替换为 80fbff56
v905的0xfd漏洞修正方法
查找 80fbfd0f
替换为 80fbff0f