c语言中for循环疑问:

我认为for(j=0;j<5;j++)这条语句,执行完后,j为5,便结束循环,不在重新回到j=0。
但在单片机中调试时,会发现它会自动再回到j=0时的情况,在循环j=1,2,3,4,的情形。
j在回到0,依次下去……
不了解
为方便解决问题;我把具体的函数写出来吧:
(我觉得数码管应该 依次 0~9 只亮一次,以后就不亮了。 但调试时,它亮0~9后,又0~9的亮 ,不断的下去)

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//定义数组,依次为:0,1,2,3,4,5,6,7,8,9
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint ms);
void main()
{
uchar i;
P0=0xfe; //位选共阴数码管
P1=oxff; //先让数码管全暗,防止上电瞬间显示数字8;
for(i=0;i<10;i++)
{
P1=table[i]; //依次从0~9显示;
delay(50);
}
}

void delay(uint ms) //延时函数
{
uchar x;
while(ms--)
for(x=0;x<123;x++);
}

for 语句的格式是
for (表达式1;表达式2;表达式3)
你的程序是
for( j=0; j<5; j++)

for语句过程为:
1、计算表达式1 的值;
2、判断表达式2,当其条件成立,执行循环体语句,然后执行第3步(你这里是j<5 所以执行条件应该是j= 0,1,2,3,4。如果想j=5也执行可以用 j<6或者j<=5);
当表达式2的条件不成立时,结束循环执行第5步。
3、计算表达3;(注意一下,第2步中要求了 执行循环体语句后 才是第3步)
4、返回,继续执行第2步;
5、循环结束,执行for语句的后续语句。

如果你的循环没有跳出来应该是你的循环语句某处让j的值始终是低于5的,所以循环没有停下来,而是继续执行下去。追问

函数如上

追答

你的循环设计的是没有问题的。
说实话我不是很懂单片机,但是看你的程序问题应该是出在循环正常结束了,但是单片机系统再一次运行 从新进入循环。
建议你在For跳出后的位置加上一个让所有灯长时间灭掉的函数。
例如 while(1){}

希望对你有帮助!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-13
其实我想看你的循环体,若就你给的这些信息,j又回到了0继续循环,确实让人费解,我了解的c51单片机,采用的是标准c,所以我怀疑问题在循环体,而不是解释器
第2个回答  2011-06-12
你没有break语句,肯定结束不了循环,所以会再回到j=0的情况,这样就成了死循环,而你的限制条件是j<5,所以执行完for语句后也不可能等于5啊 ,如果限制条件改为j<=5就可一输出5,在for语句后加上if(j>5) break; 这样输出5之后就自动结束循环
第3个回答  2011-06-16
这个循环没问题,应当是你的其他地方出错了!
你再找找!
可以把你的函数体上传上来吗?
第4个回答  2011-06-12
你把j定为小于5当然不会把5包括进去,根本执行不到5。要改为j<6或j<=5。
第5个回答  2011-06-13
可以把代码发上来看看不?我也在学单片机^_^

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网