大家看看 ,这个是不是51单片机开发环境KEIL的一个BUG
昨天晚上设计了一个带按键控制的时钟,程序很小,当时很好用,没问题。但今天,又加上电,按键按了几次后就好像是无效了。但数码管还是没问题的,正常显示。
部分代码如下:
uchar KeyScan(void)
{
uchar keyvalue=0;
static key_state=0;//检查了代码后,发现这里没有定义变量类型,但KEIL4没有任何报错,或警告;修改后加上uchar,重新编译下载,问题解决;
switch(key_state)
{
case 0:
P3=0xf0;DelayXus(2);
if(P3!=0xf0) key_state=1;
break;
case 1:
P3 = 0x7F; //S4 S5 S6 S7第一列
switch(P3)
{
case 0x7E: keyvalue = 1;break;
case 0x7D: keyvalue = 5;break;
case 0x7B: keyvalue = 9;break;
case 0x77: keyvalue = 13;break;
default: break;
}
P3 = 0xBF; //S8 S9 S10 S11 第二列
switch(P3)
{
case 0xBE: keyvalue = 2;break;
case 0xBD: keyvalue = 6;break;
case 0xBB: keyvalue = 10;break;
case 0xB7: keyvalue = 14;break;
default: break;
}
P3 = 0xDF; //S12 S13 S14 S15 第三列
switch(P3)
{
case 0xDE: keyvalue = 3;break;
case 0xDD: keyvalue = 7;break;
case 0xDB: keyvalue = 11;break;
case 0xD7: keyvalue = 15;break;
default: break;
}
P3 = 0xEF; //S16 S17 S18 S19 第四列
switch(P3)
{
case 0xEE: keyvalue = 4;break;
case 0xED: keyvalue = 8;break;
case 0xEB: keyvalue = 12;break;
case 0xE7: keyvalue = 16;break;
default: break;
}
if(keyvalue==0) key_state=0;
else key_state=2;
break;
case 2:
P3=0xf0;DelayXus(2);
if(P3==0xf0) key_state=0;
break;
}
return keyvalue;
}
大家不妨一试,这里,我想很有可能是static让KEIL4怎么了吧。 devcang 发表于 2012-11-11 23:55 static/image/common/back.gif
和版本的有关,可能是 带符号的32位整形。如果是什么修饰都不写,看编译器,有的会警告:warning: data d ...
Build target '目标 1'
compiling 测量温度 新.c...
linking...
Program Size: data=64.4 xdata=0 code=1078
creating hex file from "数字温度计DS18B20测量温度"...
"数字温度计DS18B20测量温度" - 0 Error(s), 0 Warning(s).
这个是没加uchar的编译结果;
Build target '目标 1'
compiling 测量温度 新.c...
linking...
Program Size: data=63.4 xdata=0 code=1064
creating hex file from "数字温度计DS18B20测量温度"...
"数字温度计DS18B20测量温度" - 0 Error(s), 0 Warning(s).
这个是加上uchar的编译结果;这个是正确的;
比较下来Program Size: 一项不同;
不知各位,有何高见? 有个默认的类型,这样的问题是编译器的问题。 devcang 发表于 2012-11-10 14:03 static/image/common/back.gif
有个默认的类型,这样的问题是编译器的问题。
有个默认的类型?
什么类型呢? static去掉后试了么??? 本帖最后由 devcang 于 2012-11-11 23:57 编辑
涛声2012 发表于 2012-11-11 20:50 static/image/common/back.gif
有个默认的类型?
什么类型呢?
和版本的有关,可能是 带符号的32位整形。如果是什么修饰都不写,看编译器,有的会警告:warning: data definition has no type or storage class。 警告肯定会有的,估计LZ当时看没错只有警告就没在意 20112672 发表于 2012-11-11 22:44 static/image/common/back.gif
static去掉后试了么???
static去掉,只剩key_state=0;吗?
这个,会报错;
还是剩下uchar key_state=0;
这样编译通过,但不和原意;
zjk 发表于 2012-11-12 08:57 static/image/common/back.gif
警告肯定会有的,估计LZ当时看没错只有警告就没在意
哈哈,怎么会呢,就是什么都没有的,不信你试试,我用的KEIL4版本;
页:
[1]