搜索
bottom↓
回复: 16

共享keil c51液晶汉字显示BUG的彻解秘籍

[复制链接]

出0入0汤圆

发表于 2016-3-23 10:42:50 | 显示全部楼层 |阅读模式
从业51开发N多年,虽也转向arm开发,当时手边保留的keil C51 液晶汉字显示BUG的说法及彻底解决办法;
留贴在此,可以永久保留,更可以给后来用的人,避免再犯我们当年走过的弯路;
再遇到k版汉字显示的问题,直接过来,机能看明白问题所在,又能解决问题。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2016-3-23 10:45:16 | 显示全部楼层
Keil C51汉字显示的bug问题  
      一、缘起
         
      这两天改进MCU的液晶显示方法,采用“即编即显”的思路,编写了一个可以直接显示字符串的程序。如程序调用disstr("我是你老爸");液晶屏上就会显示“我是你老爸”。
      二、问题
          但是,花了1天多时间辛辛苦苦改好的程序后,却发现有些汉字显示有问题。比如:
          P1:在第一行显示“实时参数”,第二行显示“工作状态”,实际上“工作状态”却重复显示了,除了在正确的地方显示外,还在“实时参数”后显示了。
          P2:"正"字后若有":",则都显示成乱码。如果后面没有":",则"正"字可正确显示,但是后面却显示了后面的一行字。
          P3:"过"字总显示乱码;
      三、求索
         
      通过调试发现,上述汉字显示不正常的时候,是因为在字库中找不到匹配的汉字。可是,自建的字库中明明有这些汉字,而且"数","正"字在后面无字符的时候是显示正确的啊!
          问题找了好久,怀疑传参类型不对,汉字查找可能溢出等,反复修改,总是无法解决问题,而且从现象来思考,都不应该是这些问题。
          今日灵光一现:为什么不在传递字符串后显示该字符串的变量值呢?
         
      经过详细研究,西文字符在传递时应该是ACSII值,一个字节,数值小于128;而汉字传递的是其机内码,分高低2个字节,2个字节都大于127,当然并小于256。
          字符串传递参数值一显示,可不得了。其惊人之处有:
         
      1."数","正","过"正确显示时其传参值为:0xca00,0xd500,0xb900;而其正确的机内码应该是:0xcafd,0xd5fd,0xb9fd。看来其低位字节被无情忽视。
          2."数","正","过"单独显示正确,但是后面带一个字符或汉字就显示乱码了。如"正:"传参的值为:0xd53a,0x0000;"数
      "传参的值为:0xca20,0x0000。而":"和"
      "的ASCII值恰好是0x3a,0x20,看来这几个汉字是叛变到西文字符中去了,机内码只有一个高位字节了。
          3.将传参值直接赋给汉字显示函数,如"过"用"0xb9,0xfd"是显示不了的,只能用"0xb9,0x00"。
          4.比较发现,显示不正常的"数","正","过"三个字的低位字节都是0xfd,而一直显示正确的"一二"等汉字机内码的低位字节都不是0xfd。
          莫非keil跟0xfd有不共戴天之仇?
      四、解决
          天涯茫茫寻不到,无奈只有上百度。用"keil
      c51的汉字显示问题"一搜就找到组织了,泪奔啊。组织的力量大,很快就给出了让我这等底层开发者劳累辛苦的原因:这是万恶的keil存在的一个臭名昭著的bug!伟大的组织同时无私的提供了答案,而且还不止一种哦。以下是从某同志的blog中摘录:
          “解决方法两个:
           ①下个晓奇工作室出的补丁,自己搜一下。(http://www.xiao-qi.com/mcu/
           ②用十六进制编辑软件如HexEdit打开c51.exe,搜索80FBFD,改为80FBFF即可。
                         c51.exe位置:Keil安装目录/keil/c51/bin/c51.exe”
          赶紧拿起前辈们提供的武器,向keil 0xfd bug发起猛烈冲锋!……
          待我重新烧录好程序,轻轻的打开电源,液晶屏幕上的一个个汉字显示得整齐而又干净,整个世界清静了…………

虽非本人原创,当时好用是真的。申请加精!
附出处:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/willhu2008/archive/2009/08/25/4482487.aspx

出0入0汤圆

 楼主| 发表于 2016-3-23 10:47:40 | 显示全部楼层
补充:不是当时好用,是一只好用,从6.x到keil c51 816,818,
954,都好用,我都是多个项目亲测的,真正好用明了。

出0入0汤圆

 楼主| 发表于 2016-3-23 10:49:05 | 显示全部楼层
早些年,网络不发达,是走过很多弯路,很多苦头的。

出0入10汤圆

发表于 2016-3-23 11:01:17 | 显示全部楼层
还好我第一次用Keil μVision2的时候里面有个0xfd补丁

出0入0汤圆

 楼主| 发表于 2016-3-23 11:13:52 | 显示全部楼层
终于有同道冒泡了。

出0入10汤圆

发表于 2016-3-23 11:21:53 | 显示全部楼层
你这个问题太古老了,发帖没意义,03年从汇编切换到C,当时要感谢xiaoqi的补丁,有谁记得

出0入0汤圆

 楼主| 发表于 2016-3-23 11:31:22 | 显示全部楼层
在此留贴,备份,防止万一那天要用,忘记或找不到了。希望理解。

出0入24汤圆

发表于 2016-3-23 11:57:31 | 显示全部楼层
Keil  0xfd补丁,这就是关键字!

出0入0汤圆

发表于 2016-3-23 12:00:54 | 显示全部楼层
keil 0xfd 大bug,呵呵。

出0入4汤圆

发表于 2016-3-23 12:20:58 | 显示全部楼层
这个问题太古老了。

出0入0汤圆

发表于 2016-3-23 13:34:14 | 显示全部楼层
恭喜楼主从火星回到地球。
现在BB机还有信号吗?

出0入0汤圆

发表于 2016-3-23 13:36:58 | 显示全部楼层
本帖最后由 hefanghua 于 2016-3-23 13:55 编辑

前两天在论坛下载的C51 v9.55最新版听说也有这BUG。故意的吧。另外,网上说要补丁A51(用于汇编)、C51、ax51(用于扩展的汇编器)、cx51(用于扩展的编译器)4个.exe文件。

出0入0汤圆

发表于 2016-3-23 13:47:15 | 显示全部楼层
0xfd补丁,大名鼎鼎啊。

出0入0汤圆

发表于 2016-3-23 13:54:33 | 显示全部楼层
楼主,转要厚道,有没有发现晓奇的网址也无效了,哈哈。。。这是N年的了

出0入0汤圆

发表于 2016-3-23 13:58:45 | 显示全部楼层
第一次听说0xfd补丁,孤陋寡闻了

出0入0汤圆

 楼主| 发表于 2016-3-23 14:39:10 | 显示全部楼层
看全文,手动解决就完全可以啦,链接无效无所谓的。
补丁A51(用于汇编)、C51、ax51(用于扩展的汇编器)、cx51(用于扩展的编译器)4个.exe文件
那个补丁,xiaoqi版,我可能还有有需要也可以一并发上来。
这个其实是手动处理的方法。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 00:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表