最近用STC8 单片机做一个电子锁相关的项目,用到OLED显示一些汉字,本来没什么问题的,很简单,但是在做指纹录入删除时,OLED显示删除总是不对,甚至影响其他部分显示,检查文件编码方式GB2312没问题,然后又检测字符文件,没问题,后来甚至一度怀疑OLED底层显示汉字问题。最后百度一下,发现原来这个是keil for 51的问题,汉字一般情况下都是占两个字节,下面GB2312汉字,第二个字节为0xfd
褒 饼 昌 除 待 谍 洱俘庚过
糊 积 箭 烬 君 魁 例笼慢谬
凝 琵 讫 驱 三 升 数她听妄
锡 淆 旋 妖 引 育札正铸
佚 冽 邶 埤 荦 蔟 摭啐帻猃
恺 泯 潺 妪 纨 琮 椠辇挲臊
忑 睚 铨 稞 瘕 颀 螨簖酏觚
鳊鼾
但是在keil for 51中将0xfd忽略掉了,从而导致汉字显示错误问题。
解决方法
在做字库时,遇到上述汉字时,在后面加上\xFD, 调用时也加上\xFD
/** 简单的汉字字库 */
code uint8_t F14x16_Idx[] =
{
"删除\xFD正\xFD数\xFD"
};
OLED_Print(10, 2, " 删除\xFD");