<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          Keil C51漢字顯示的bug問題

          作者: 時(shí)間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          一、緣起

          這兩天改進(jìn)MCU的液晶顯示方法,采用“即編即顯”的思路,編寫了一個(gè)可以直接顯示字符串的程序。如程序調(diào)用disstr("我是你老爸");液晶屏上就會(huì)顯示“我是你老爸”。
          二、問題
          但是,花了1天多時(shí)間辛辛苦苦改好的程序后,卻發(fā)現(xiàn)有些漢字顯示有問題。比如:
          P1:在第一行顯示“實(shí)時(shí)參數(shù)”,第二行顯示“工作狀態(tài)”,實(shí)際上“工作狀態(tài)”卻重復(fù)顯示了,除了在正確的地方顯示外,還在“實(shí)時(shí)參數(shù)”后顯示了。
          P2:"正"字后若有":",則都顯示成亂碼。如果后面沒有":",則"正"字可正確顯示,但是后面卻顯示了后面的一行字。
          P3:"過"字總顯示亂碼;
          三、求索

          通過調(diào)試發(fā)現(xiàn),上述漢字顯示不正常的時(shí)候,是因?yàn)樵谧謳?kù)中找不到匹配的漢字。可是,自建的字庫(kù)中明明有這些漢字,而且"數(shù)","正"字在后面無字符的時(shí)候是顯示正確的?。?br />問題找了好久,懷疑傳參類型不對(duì),漢字查找可能溢出等,反復(fù)修改,總是無法解決問題,而且從現(xiàn)象來思考,都不應(yīng)該是這些問題。
          今日靈光一現(xiàn):為什么不在傳遞字符串后顯示該字符串的變量值呢?

          經(jīng)過詳細(xì)研究,西文字符在傳遞時(shí)應(yīng)該是ACSII值,一個(gè)字節(jié),數(shù)值小于128;而漢字傳遞的是其機(jī)內(nèi)碼,分高低2個(gè)字節(jié),2個(gè)字節(jié)都大于127,當(dāng)然并小于256。
          字符串傳遞參數(shù)值一顯示,可不得了。其驚人之處有:

          1."數(shù)","正","過"正確顯示時(shí)其傳參值為:0xca00,0xd500,0xb900;而其正確的機(jī)內(nèi)碼應(yīng)該是:0xcafd,0xd5fd,0xb9fd。看來其低位字節(jié)被無情忽視。
          2."數(shù)","正","過"單獨(dú)顯示正確,但是后面帶一個(gè)字符或漢字就顯示亂碼了。如"正:"傳參的值為:0xd53a,0x0000;"數(shù)
          "傳參的值為:0xca20,0x0000。而":"和"
          "的ASCII值恰好是0x3a,0x20,看來這幾個(gè)漢字是叛變到西文字符中去了,機(jī)內(nèi)碼只有一個(gè)高位字節(jié)了。
          3.將傳參值直接賦給漢字顯示函數(shù),如"過"用"0xb9,0xfd"是顯示不了的,只能用"0xb9,0x00"。
          4.比較發(fā)現(xiàn),顯示不正常的"數(shù)","正","過"三個(gè)字的低位字節(jié)都是0xfd,而一直顯示正確的"一二"等漢字機(jī)內(nèi)碼的低位字節(jié)都不是0xfd。
          莫非keil跟0xfd有不共戴天之仇?
          四、解決
          天涯茫茫尋不到,無奈只有上百度。用"keil
          c51的漢字顯示問題"一搜就找到組織了,淚奔啊。組織的力量大,很快就給出了讓我這等底層開發(fā)者勞累辛苦的原因:這是萬惡的keil存在的一個(gè)臭名昭著的bug!偉大的組織同時(shí)無私的提供了答案,而且還不止一種哦。以下是從某同志的blog中摘錄:
          “解決方法兩個(gè):
          ①下個(gè)曉奇工作室出的補(bǔ)丁,自己搜一下。(http://www.xiao-qi.com/mcu/)請(qǐng)下載之后放到你的keilc51bin 目錄里,運(yùn)行這個(gè)程序.就可以了
          ②用十六進(jìn)制編輯軟件如HexEdit打開c51.exe,搜索80FBFD,改為80FBFF即可。
          c51.exe位置:Keil安裝目錄/keil/c51/bin/c51.exe”
          趕緊拿起前輩們提供的武器,向keil 0xfd bug發(fā)起猛烈沖鋒!……
          待我重新燒錄好程序,輕輕的打開電源,液晶屏幕上的一個(gè)個(gè)漢字顯示得整齊而又干凈,整個(gè)世界清靜了…………


          關(guān)鍵詞: KeilC51漢字顯示bug問

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();