问题描述:使用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基本不再使用,所以以上补丁本人没有做过测试.