hccy 发表于 2018-4-25 12:59:59

今天遇到一个关于keil很高级的问题(汉字“三”不能正常显示问题)

初学单片机c语言编程,正在做一个基于89c51和12c887的时钟,用12864显示年月日时间和星期,基本已经做好了,年月日时间显示都正常,星期显示有问题,星期的设计显示方案是“星期一”、“星期二”、”星期三”。。。。到星期日,实际运行出现了问题,具体表现是:星期一、二显示正常,到星期三时,那个三字竟然变成了”人“字,后面的四五六日也都成了乱码了,查汉字编码,三是c8fd,四是cbc4,五是cee5,人是c8cb,星期数组的语句是:uchar code table[]="一二三四五六日”,每个汉字两个字节,写数据都是写两次,例如“一”的写法是:write_data(1*2-2);   write_data(1*2-1);对应数组中的0、1字节,使用keil的仿真单步运行程序写汉字“三”,发现第一次写的是0xc8,正确,第二次写的却是0xcb,是汉字“四”的高位字节,三在数组中对应4、5字节,实际显示的却是4、6字节,正好是个人字!第5个字节0xfd哪里去了?问了问百度还真有答案,说keil处理汉字时遇见0xfd就自动忽略了云云,解决办法是在三后加上\xfd就行了,例如uchar code table[]="一二三四五六日”,写成uchar code table[]="一二三\xfd四五六日”,测试ok!还有很多低位是0xfd的都是这毛病,都这样解决!褒 饼 昌 除 待 谍 洱 俘庚过

糊 积 箭 烬 君 魁 例 笼慢谬

凝 琵 讫 驱 三 升 数 她听妄

锡 淆 旋 妖 引 育 札正铸

佚 冽 邶 埤 荦 蔟 摭 啐帻猃

恺 泯 潺 妪 纨 琮 椠 辇挲臊

忑 睚 铨 稞 瘕 颀 螨 簖酏觚

鳊鼾
发出来此贴,与大家共享。

BG4RFF 发表于 2018-4-25 13:09:21

好像记得很多年前就有一个小奇补丁

amo 发表于 2018-4-25 18:21:25

搜“keil 0xFD补丁”

zystbbs 发表于 2018-4-26 10:39:39

学习了,这个是要补丁的

hccy 发表于 2018-4-26 15:59:20

加补丁很麻烦,最简单的方法就是官方的做法:直接在那个字后面加上“\xfd"就行了!

autopccopy 发表于 2018-5-26 11:24:15

hccy 发表于 2018-4-26 15:59
加补丁很麻烦,最简单的方法就是官方的做法:直接在那个字后面加上“\xfd"就行了!

各有所长。
加\XFD 有时也是麻烦的,容易漏掉。

打补丁就一劳永逸,但是有风险(虽然很低)。

hccy 发表于 2018-5-28 16:25:39

:handshake
页: [1]
查看完整版本: 今天遇到一个关于keil很高级的问题(汉字“三”不能正常显示问题)