c语言中for循环疑问:
我认为for(j=0;j<5;j++)这条语句,执行完后,j为5,便结束循环,不在重新回到j=0。但在单片机中调试时,会发现它会自动再回到j=0时的情况,在循环j=1,2...
我认为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++);
} 展开
但在单片机中调试时,会发现它会自动再回到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++);
} 展开
7个回答
展开全部
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 (表达式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){}
希望对你有帮助!
展开全部
其实我想看你的循环体,若就你给的这些信息,j又回到了0继续循环,确实让人费解,我了解的c51单片机,采用的是标准c,所以我怀疑问题在循环体,而不是解释器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没有break语句,肯定结束不了循环,所以会再回到j=0的情况,这样就成了死循环,而你的限制条件是j<5,所以执行完for语句后也不可能等于5啊 ,如果限制条件改为j<=5就可一输出5,在for语句后加上if(j>5) break; 这样输出5之后就自动结束循环
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个循环没问题,应当是你的其他地方出错了!
你再找找!
可以把你的函数体上传上来吗?
你再找找!
可以把你的函数体上传上来吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你把j定为小于5当然不会把5包括进去,根本执行不到5。要改为j<6或j<=5。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以把代码发上来看看不?我也在学单片机^_^
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询