首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

为何a == 255这种判断无效啊

2013-07-11 
为什么a 255这种判断无效啊?写了这么一个东西在8位数码管上滚动显示数字0 - 9,但是发现运行一段时间后

为什么a == 255这种判断无效啊?
写了这么一个东西在8位数码管上滚动显示数字0 - 9,但是发现运行一段时间后就开始显示乱七八糟的东西了。

#include<reg52.h>
sbit LATCH1 = P2 ^ 2;//段锁存
sbit LATCH2 = P2 ^ 3;//位锁存
char code digit[8] = {0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};//0 - 7 位
char code num[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数字 0 - 9
void delay(unsigned int i);
void main()
{
char a = 0;
while (1)
{
P1 = digit[a % 8];
LATCH2 = 1;
LATCH2 = 0;

P1 = num[a % 10];
LATCH1 = 1;
LATCH1 = 0;

delay(5000);
}
}
void delay(unsigned int i)
{
while(i--);
}

于是想可能是那个变量a超过255溢出后出错(但是溢出了为什么会影响这个程序?难道a%10还能得到比9大的数?或者a%8还能得到比7大的数?)
所以还是加了句防止溢出的判断
while (1)
{
P1 = digit[a % 8];
LATCH2 = 1;
LATCH2 = 0;

P1 = num[a % 10];
LATCH1 = 1;
LATCH1 = 0;
a == 255 ? a = 0 : a++;//这里防止a溢出
delay(5000);
}

但是发现不管用啊?当a等于255时,他还是会去加1,然后a就还是会溢出,cy位会置为1,仿真和实际单片机上都测试了,都是这个效果,a都会溢出,过一段时间就开始显示乱七八糟的东西。

然后感觉可能是那个?表达式有问题,于是干脆用if来
if (a == 255)
{
a = 0;
}else
{
a++;
}

但还是没有解决问题。。。a到了255还是去加1。。。

大神求解啊。。小弟初学单片机,每天遇到各种莫名其妙的错误。。 51单片机 C/C++
[解决办法]
char型数据范围是 -128~127啊,unsigned char 才是0~255
[解决办法]
一个是LS提到的数据类型问题,一个是就算你的a是无符合号的char,怎么加,也不会超过255

不用做判断就可以了.反正不会溢出的

对数据类型的基础,LZ还得加强

热点排行