#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//主涵
void main()
{
uchar i;
P1=0xfe;
while(1) //第一个死循环
{
i=0;i++;
if(i<2)
{ for(i=0;i<7;i++)
{
P1=_crol_(P1,1); //P1 左循环
DelayMS(100);
}
for(i=0;i<7;i++)
{
P1=_cror_(P1,1); //P1 右循环
DelayMS(100);
}
}
if (i>=2) //第一个死循环跳出
{
uchar j;
P1=0xff;
while(1) //第二个死循环
{
j=0;j++;
if(j<7)
{P1=~P1;
DelayMS(150);
}
if(j>=7) //第二个死循环 跳不出
{ P1=0xff;
}
}
}
}
}
小弟是刚刚学的C程序应用,以上是一个8LED循环练习,我的想法是这样的,LED来回流水一次后全部闪烁7次,然后跳出,LED保持全部亮,试验结果是流水一次后开始闪烁,之后就一直在闪烁了。我看了一下程序,第一次进入While语句在我设的if条件跳出了,但是第二次我再用的时候就跳不出来了,这是为什么?是哪里出问题了呢? 还有一个问题就是,我想闪烁七次后又再次自动开始循环之前的步骤又应该怎么改,或者要用到什么语句?各位大神提示一下就可以了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
uchar j;
P1=0xff;
while(1) //这的While(1)一直为真,就真是死循环了,只有括号里为“假”时才退出这个循环
{ //这个循环为什么不沿用上面的for循环呢,
j=0;j++;
if(j<7)
{P1=~P1;
DelayMS(150);
}
这里
i=0;i++;
while(1) //第一个死循环 这里的i变量不会按你想象中的变化
{
i=0;i++;
if(i<2)
{ for(i=0;i<7;i++) //在这里 i变量经过循环后被赋值成了7,
P1=_crol_(P1,1); //P1 左循环
DelayMS(100);
}
for(i=0;i<7;i++) //在这开始被赋值为0,经过循环后又变为7 ,之后直接跳过if(i<2),直奔下个if语言,最终停在了while循环
{
P1=_cror_(P1,1); //P1 右循环
明白了 谢谢大神。
一周热门 更多>