标题: keil汉字补丁0xfd已更新 解决keil 51单片机驱动12864液晶显示汉字出现乱码的问题 [打印本页]
作者: renyunpei 时间: 2010-7-21 22:56
标题: keil汉字补丁0xfd已更新 解决keil 51单片机驱动12864液晶显示汉字出现乱码的问题
这是我在本论坛的51hei-5开发板上写的一个程序,想在12864上显示:一二三四五六七,可是总是出现这样的乱码,请各位大哥看看,谢谢了,十分感谢!!!
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rs=P3^5; //数据命令选择口
sbit lcd_rw=P3^6; //读写选择口
sbit lcd_en=P3^4; //使能信号
sbit lcd_psb=P3^7; //串/并选择端
sbit wela=P2^6;
sbit dula=P2^7;
sbit diola=P2^5;
uchar i;
uchar code time3[]={"一二三四五六七"};
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay4us() //短延时
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/* 检查LCD忙状态 */
/*lcd_busy为1时为忙,为0时为闲,可写指令数据*/
void lcd_busy()
{
uchar busy;
do
{
lcd_en=0;
lcd_rs=0;
lcd_rw=1;
delay4us();
lcd_en=1;
busy=P0; //在使能端的上升沿读走数据
delay4us();
lcd_en=0;
}
while(busy&0x80);
}
/*写指令到12864:RS=L,RW=L,E=高脉冲*/
void write_command(uchar cmd)
{
lcd_busy();
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
P0=cmd;
delay4us();
lcd_en=1;
delay4us();
lcd_en=0;
}
/*写显示数据到12864:RS=H,RW=L,E=高脉冲*/
void write_data(uchar dat)
{
lcd_busy();
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=dat;
delay4us();
lcd_en=1;
delay4us();
lcd_en=0;
}
/*设定显示位置*/
void lcd_position(uchar x,uchar y)
{
if(x==0)
write_command(0x80+y);
else if (x==1)
write_command(0x90+y);
else if (x==2)
write_command(0x88+y);
else if (x==3)
write_command(0x98+y);
}
/*初始化12864*/
void lcd_init()
{
dula=0;
wela=0;
diola=0;
lcd_psb=1; //并口方式
delay(10);
write_command(0x30); //基本操作指令
delay(5);
write_command(0x0c); //显示开光标关
delay(5);
write_command(0x01); //清除LCD显示内容
delay(5);
}
void main()
{
lcd_init();
delay(10);
lcd_position(0,0);
i=0;
while(time3[ i]!='\0')
{
write_data(time3[ i]);
i++;
}
write_data(time3[ i]);
while(1);
}
作者: admin 时间: 2010-7-22 04:45
如果我没有猜错你是用keil编译的吧
你这种情况很有可能是,没有打汉字内码0xfd问题的补丁,导致只要包含有包含0xFD内码的汉字均不能正常显示,这是keil的一个臭名昭著的Bug, keil是德国的,对汉字的兼容不太好需要打这个补丁才能正常显示.
文件下载:http://www.51hei.com/ziliao/file/0xfd.rar
文件说明:keil c51在编译的时候会将0xfd的字符(有些汉字含该字符的内码)过滤, 而导致程序出错.特别是在做液晶汉字显示时. 针对这个bug.编写了这个补丁. 请下载之后放到你的keil\c51\bin 目录里,运行这个程序点击start.就可以了.
作者: renyunpei 时间: 2010-7-22 07:58
谢谢,十分感谢,弄好了,祝你幸福平安!!!
作者: dgahz 时间: 2014-12-11 11:18
第一次发现,受教了,下载补救。
作者: sglf0201 时间: 2015-5-3 14:39
keil4这问题也是一样的解决办法吗,管理员身份运行不成功怎么办
-
QQ截图20150503143831.jpg
(64.06 KB, 下载次数: 509)
作者: 嘉辉先生 时间: 2015-5-21 20:42
ok,我的问题也得到了解决。三克油
作者: zhongzhianan 时间: 2015-7-23 11:28
补丁我用的怎么不成功呢
作者: zhongzhianan 时间: 2015-7-23 16:40
你好,我怎么下载补丁,测试不可以呢?直接用十六进制区吗也不行?请问我的问题,有可能是出在哪?
作者: 我想当坏人 时间: 2015-8-9 10:31
尝试成功,谢谢了。
作者: 北极光2015 时间: 2015-10-16 19:41
多谢,我的问题也解决了!
作者: SnowFlake 时间: 2016-2-19 22:28
感谢不吝赐教,谢谢了前辈!
作者: llboer 时间: 2016-4-21 22:54
谢谢了~~~~~~~~~~~~
作者: y1065403288 时间: 2016-5-4 11:16
大神好厉害,这个问题真厉害
作者: 征服单片机 时间: 2016-5-15 00:32
怎么我下载了补丁还是显示乱码?求大神们指教
作者: 征服单片机 时间: 2016-5-15 00:42
admin 发表于 2010-7-22 04:45
如果我没有猜错你是用keil编译的吧
你这种情况很有可能是,没有打汉字内码0xfd问题的补丁,导致只 ...
为什么我下了补丁仍然显示乱码,求大神指教
作者: 5000322 时间: 2017-7-30 22:53
这个方法很好用。多谢!
作者: lw1997 时间: 2017-8-13 09:35
感谢分享
作者: jicao123 时间: 2017-9-27 12:43
keil汉字补丁能否给我份
作者: jicao123 时间: 2017-9-27 12:44
keil汉字补丁能否给我份
作者: LaZY813 时间: 2018-5-20 20:13
我也这样 请问怎么解决的呀
作者: hp34401a 时间: 2018-5-26 09:52
新KEIL C51 0XFD补丁。支持KEIL5 及以下所有版本!
-
keilfdfix2.JPG
(53.83 KB, 下载次数: 276)
-
keil_v5_fixed1.jpg
(144.25 KB, 下载次数: 246)
-
keilfdfix3.JPG
(120.68 KB, 下载次数: 197)
-
VirusTotalA.jpg
(193.81 KB, 下载次数: 190)
-
-
KeilFDfix_新FD补丁(冠铭同学版)b7.rar
96.6 KB, 下载次数: 364, 下载积分: 黑币 -5
作者: DSCX05 时间: 2018-8-18 18:34
好用。。。。。。
作者: denminshen 时间: 2018-8-30 15:00
DSCX05 发表于 2018-8-18 18:34
好用。。。。。。
下载试试看行不行?我有一个液晶屏显示“过”字不行,按照管方解决办法加\xFD都没有能解决正常显示,后在“过”字后加\x00才正常显示的,后又有一个“山”字不能正常显示,字后加什么都不行了,用了修复补丁也不行,只修复了“过”字显示的问题,“山”字的显示始终不行哎!今天在下载这个补丁试试看吧!
作者: denminshen 时间: 2018-8-31 13:39
昨天下载测试了,我的keil3问题还是解决不了,今天下载了一个keil4
作者: zhangcj0818 时间: 2018-10-6 12:54
感谢你的无私,我今天也碰到乱码了
作者: 七彩的梦想 时间: 2018-12-25 22:44


最近在学习12864遇到部分汉字显示乱码,导致后面所有汉字乱码。
"飞流直下三千尺," “正弦波”(“三”“正”字显示乱码。)弄了好久都解决不了,现在终于在这里找到了解决方法。谢谢楼主与各位网友!
作者: 1992wzc 时间: 2019-1-16 12:39
在哪呢
作者: yqs138168 时间: 2019-1-16 16:35
新KEIL C51 0XFD补丁。支持KEIL5 及以下所有版本!
作者: yqs138168 时间: 2019-1-16 16:36
我的页无法打补丁啊爱爱爱
作者: foshanyun 时间: 2019-4-17 23:28
新KEIL C51 0XFD补丁。支持KEIL5 及以下所有版本!
作者: ykm2019 时间: 2019-4-24 21:54
学习KEIL C51 0XFD补丁
作者: 小叮当呀 时间: 2019-5-19 04:45
hp34401a 发表于 2018-5-26 09:52
新KEIL C51 0XFD补丁。支持KEIL5 及以下所有版本!
多谢多谢
作者: 1+1=6 时间: 2019-6-13 16:46
还是可以,很棒
作者: 1150835082 时间: 2019-9-29 22:33
感谢你的无私,我今天也碰到乱码了
作者: lrqblack 时间: 2020-2-27 09:43
感谢感谢,我也碰三显示不出来的问题了,昨晚弄了一个晚上,打了补丁当场好了。
作者: stdwmap 时间: 2020-3-4 00:28
感谢大佬,虽然我来晚了10年。这个真的是听君一席话,胜读十年书。
作者: ⑨掌门 时间: 2020-3-15 18:27
我整了一下午了,我就没想到是编译器的问题,淦,感谢感谢
作者: 江浅浮渊泽 时间: 2020-5-27 21:20
十分感谢,新KEIL C51 0XFD补丁很好用,旧版在我这里没有用,新版的可以。
作者: jemery1030 时间: 2020-10-5 13:25
謝謝你,剛剛執行了,秀出成功的信息。
作者: shuwang1234 时间: 2020-10-25 14:03
测试可用,早发现这个补丁就好了
作者: benniu 时间: 2021-1-6 20:49
昨天出现了这个情况,用这个补丁解决了问题,谢谢楼主了
作者: cana_xzy 时间: 2021-2-5 23:55
“正”字遇到了这个问题,都2021年了,这个问题还是存在
作者: allen_1iu 时间: 2021-3-4 15:26
我的这个好像不行,还是乱码。
作者: zhaobolove 时间: 2021-10-19 16:07
http://www.51hei.com/bbs/dpj-130470-1.html
keil c51升级到v9.54后,原来的0XFD修复工具失效了,所有写了这个小工具。
0XFD问题是keil c51中一直存在的一个问题,表现为当C源代码中使用了汉字等非ASCII字符,而此字符的编码又恰好包含了大于或等于0xFD的字节时,这个字节将被编译器删除,从而最终程序代码的运行错误。
作者: fkeguh 时间: 2022-1-21 14:10
谢谢楼主,现在显示正常了。
-
51hei图片_20220119185337.jpg
(122.23 KB, 下载次数: 369)
-
20220120171010.jpg
(137.13 KB, 下载次数: 325)
作者: az51hei 时间: 2022-1-29 09:24
用keil在使用汉字时有时会出现显示乱码,官方说明是有些汉字内码包含0xfd,可以通过加在该汉字后加0xfd解决,不过很麻烦,有了0xfd补丁就可以很好的解决这个问题。
作者: cb474265474265 时间: 2022-1-29 22:17
感谢分享,这个的确好用,解决了困扰我很久的问题。
作者: hu_jia168 时间: 2022-6-4 01:21
不错,测试OK
作者: zjczm 时间: 2022-9-22 09:51
也发现这个问题了。
临时解决的办法:把汉字编码的2个字节,单独写到数组。
比如:
mystr[0] = 0xCA; // '数'的GBK内码: 0xcafd --> 因keil编译有错误,所以用hex方式
mystr[1] = 0xFD;
不过这个只能算补救方法。
作者: happybbs163 时间: 2022-10-26 08:39
清测有效,Keil版本V952
作者: macadam 时间: 2023-1-21 00:02
学习了,我就说为什么我的汉字一直显示出错。
作者: bjdhjy888 时间: 2023-11-13 09:15
跪谢 已解决 大神牛逼
作者: angmall 时间: 2025-6-22 09:27
关于 Keil 软件中 0xFD 问题的说明
众所周知,Keil 软件的 8051 和 80251 编译器的所有版本都有一个叫做 0xFD 的问题,主要表现在字
符串中不能含有带 0xFD 编码的汉字,否则 Keil 软件在编译时会跳过 0xFD 而出现乱码。
关于这个问题,Keil 官方的回应是:0xfd、0xfe、0xff 这 3 个字符编码被 Keil 编译器内部使用,所
以代码中若包含有 0xfd 的字符串时,0xfd 会被编译器自动跳过。
Keil 官方提供的解决方法:在带有 0xfd 编码的汉字后增加一个 0xfd 即可。例如:
printf("数学"); //Keil 编译后打印会显示乱码
printf("数\xfd 学"); //显示正常
这里的“\xfd”是标准 C 代码中的转义字符,“\x”表示其后的 1~2 个字符为 16 进制数。“\xfd”表
示将 16 进制数 0xfd 插入到字符串中。
由于“数”的汉字编码是 0xCAFD,Keil 在编译时会将 FD 跳过,而只将 CA 编译到目标文件中,后
面通过转义字符手动再补一个 0xfd 到目标文件中,就形成完整的 0xCAFD,从而可正常显示。
关于 0xFD 的补丁网上有很多,基本只对旧版本的 Keil 软件有效。打补丁的方法均是在可执行文件
中查找关键代码[80 FB FD],并修改为[80 FB FF],这种修改方法查找的关键代码过于简单,很容易修改
到其它无关的地方,导致编译出来的目标文件运行时出现莫名其妙的问题。所以,代码中的字符串有包
含如下的汉字时,建议使用 Keil 官方提供的解决方法进行解决
GB2312 中,包含 0xfd 编码的汉字如下:
褒饼昌除待谍洱俘庚过糊积箭烬君魁
例笼慢谬凝琵讫驱三升数她听妄锡淆
旋妖引育札正铸 佚冽邶埤荦蔟摭啐
帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞
瘕颀螨簖酏觚鳊鼾
另外,Keil 项目路径名的字符中也不能含有带 0xFD 编码的汉字,否则 Keil 软件会无法正确编译此
项目。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |