Keil C51汉字显示的bug问题

发布者:CyberJolt最新更新时间:2016-07-30 来源: eefocus关键字: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/)请下载之后放到你的keil\c51\bin 目录里,运行这个程序.就可以了
②用十六进制编辑软件如HexEdit打开c51.exe,搜索80FBFD,改为80FBFF即可。
c51.exe位置:Keil安装目录/keil/c51/bin/c51.exe”
赶紧拿起前辈们提供的武器,向keil 0xfd bug发起猛烈冲锋!……
待我重新烧录好程序,轻轻的打开电源,液晶屏幕上的一个个汉字显示得整齐而又干净,整个世界清静了…………
关键字:Keil  C51  汉字显示  bug问题 引用地址:Keil C51汉字显示的bug问题

上一篇:keil中的存储模式
下一篇:STC-ISP下载过程

推荐阅读最新更新时间:2024-03-16 15:02

Keil(MDK-ARM)介绍、下载、安装与注册
1.概述 MDK:Microcontroller Developer Kit微控制器开发工具。 Keil MDK-ARM是美国Keil软件公司(现已被ARM公司收购)出品的支持ARM微控制器的一款IDE(集成开发环境)。 MDK-ARM包含了工业标准的Keil C编译器、宏汇编器、调试器、实时内核等组件。具有业行领先的ARM C/C++编译工具链,完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件,包含世界上品牌的芯片。比如:ST、Atmel、Freescale、NXP、TI等众多大公司微控制器芯片。 2.产品组件 MDK-核心是基于使用的μVision领先的Cortex-M的设备,包括新的ARMv8
[单片机]
<font color='red'>Keil</font>(MDK-ARM)介绍、下载、安装与注册
C51编程中头文件的使用
头文件在C51的编程中是不可缺少的部分。本文将对keil C中常用头文件予以说明,并就如何编写头文件进行初步介绍。 一、C51常见本征函数库 一些常见的头文件都是keil C自带的,在安装目录下的C51文件夹的INC中可以找到keilC中所有的芯片所对应的头文件。51系列单片机在编程中常用的头文件有:AT89X51.H、INTRINS.H、ABSACC.H、MATH.H。 1、AT89X51.H 本征函数库 头文件AT89X51.H是编程中必需要用到的专用寄存器文件。它与INC中的头文件REG51.H所定义的内容是一样的。主要用来定义特殊功能寄存器的位地址、程序状态寄存器的位地址、定时器/计数器控制寄存器的位地址、中断使能
[单片机]
<font color='red'>C51</font>编程中头文件的使用
240x128液晶T6963控制器驱动程序(C51
简介:本文主要介绍了240x128液晶T6963控制器驱动程序(C51)。 #include absacc.h #include math.h #include ASCII816.h //标准ASCII库 #include HZTable.h //汉字点阵库(自做) #include menu.h //菜单库(自做) #define ComPort 0xB101 #define DataPort 0xB000 #define GraphAddr 0x0000 //head of graph //以8*8字符计算,显示屏横向、纵向可以显示的字符个数 //以240*128为例: #define LineChar
[单片机]
解决一个Keil C报错信息:error C132
今天写把自己的一个程序改成多文件后出现了下面的一个报警:not in formal parameter list 找了半天也没有解决问题,后来在网上找到别人解决同样问题的方法.他是头文件一个函数声明时落了个分号造成的,我立刻检查自己的程序,发现同样少了一个分号.分号添上后编译链接通过. 下面是我转载的别人解决问题的文章: error C132 :“****”not in formal parameter list 花了偶将近半个小时来查找错误,最终发现原来是在头文件里的一个函数声明时露了一个分号造成紧挨着在它下面声明的参数not in formal parameter list。记在在这里,免得以后忘记了,同时也供大家分享。错误代
[单片机]
keil c51程序设计中集中精确延时方法
1使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上
[单片机]
C51单片机定时器/计数器中断功能详细分析(二)
一.外部中断相关寄存器 1.定时器/计数器控制寄存器控制寄存器(TCON) IT0:外部中断0触发方式控制位 当IT0=0时,为电平触发方式(低电平有效) 当IT0=1时,为边沿触发方式(下降沿有效) IT1:外部中断1触发方式控制位 当IT1=0时,为电平触发方式(低电平有效) 当IT1=1时,为边沿触发方式(下降沿有效) 2.中断允许控制寄存器(IE) EX0:外部中断0允许位; EX1:外部中断1允许位; EA :CPU中断允许(总允许)位。 二.外部中断的处理过程 1、设置中断触发方式,即IT0=1或0,IT1=1或0 2、开对应的外部中断,即EX0=1或EX1=1; 3、开总中断,即EA=1; 4、等待外部设
[单片机]
<font color='red'>C51</font>单片机定时器/计数器中断功能详细分析(二)
一个好玩的C51动态扫描小程序
初学者上手的简单程序,把下面代码复制进keil代码窗口,烧进51hei开发板,看看结果吧 #include reg52.h #define uchar unsigned char #define uint unsigned int #define dp P0 char code DuanMa ={0x01,0x02,0x04,0x08,0x10,0x20,0x40}; //单个数码管显示数 char code fenjie ={0,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f}; char code WeiMa ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数码
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved