KeilC51汉字显示的bug问题.doc_第1页
KeilC51汉字显示的bug问题.doc_第2页
KeilC51汉字显示的bug问题.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Keil C51汉字显示的bug问题(0xFD问题)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中摘录: “解决方法两个: 下个晓奇工作室出的补丁,自己搜一下。(/mcu/) 用十六进制编辑软件如HexEdit打开c51.exe,搜索80FBFD,改为80FBFF即可。 c51.exe位置:Keil安装目录/keil/c51/bin/c51.exe” 赶紧拿起前辈们提供的武器,向keil 0xfd bug发起猛烈冲锋! 待我重新烧录好程序,轻轻的打开电源,液晶屏幕上的一个个汉字显示得整齐而又干净,整个世界清静了 本文来自CSDN博客,转载请标明出处:/willhu2008/archive/2009/08/25/4482487.aspxKeil过滤0xfd字符的bug的修正keil c51在编译的时候会将0xfd的字符(有些汉字含该字符的内码)过滤, 而导致程序出错.特别是在做液晶汉字显示时. 针对这个bug.由网友编写了这个补丁. 请下载之后放到你的keilc51bin 目录里,运行这个程序.就可以了. 支持v8.02 去晓奇网站上下个补丁程序运行下即可这么多年了,Keil还是有这个Bug,而且晓奇做的哪个补丁程序也不错,这么多年了都还能适用:-) 相关链接: 直接用Uedit打开需要修改的文件,将对应的0xFD修改成0xFF就可例如,对于51编译器,那么用Uedit打开C51/BIN/目录下的C51.exe,然后查找80FBFD56,找到后将FD改成FF,保存,就OK拉。对于UV3的CARM编译器,那么应该找到ARM/BIN/目录下的CA.exe,然后查找80FBFD,找到后将FD改成FF,保存,就OK的拉就是遇到0xFD时就被过滤掉了。例如,你写一个字符穿,里面包含一个数学的数字,那么这个数字就丢了一半char MyString=数字;如果你不打补丁,通过串口发送出去的就是乱码.因为错位了,“数”字被丢掉了0xFD. v905之前的0xfd漏洞修正方法: 用HEXEdit修改c51.exe、a51.exe查找 80fbfd56替换为 80fbff56v905的0xfd漏洞修正方法查找 80fbfd0f替换为 80fbff0f你好,9.50的查找那个数据提示没有找到!查找 80fbfd0f替换为 80fbff0f这个数据查找,记得去掉勾选的FIND TEXT查找 80fbfd0f替换为 80fbff0f这个数据查找,记得去掉勾选的FIND TEXT意思就是说,如果你的字符中包含了0xFD,那么就会被忽略。但如果用x转义符写的却不会,例如可以在字符串中写xFD,最后的数据中会保留这个字符。所以对于受到影

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论