关于单片机C语言编程上的一个小困惑~求解答
时间:10-02
整理:3721RD
点击:
/*8个发光管间隔200ms由上至下,再由下至上,再重复一次
然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。
*/
#include<reg52.h>
#include<intrins.h> //左右移动函数头文件
#define uint unsigned int
#define uchar unsigned char
void delay(uint time) //延时子函数
{
uint i,j;
for(i=time;i>0;i--) //延时time 秒
for(j=110;j>0;j--);
}
void main()
{ uchar S,X,i,j;
while(1)
{
for(j=0;j<2;j++) //为什么j改成i后不进行循环了而是直接进入P1=0xff那一步,求解答~
{ S=0xfe;
for(i=0;i<8;i++)
{
P1=S;
delay(200); //延时200ms
S= _crol_(S,1); //向左移动一位
}
X=0x7f;
for(i=0;i<8;i++)
{
P1=X;
delay(200);
X=_cror_(X,1); //向右移动一位
}
}
P1=0xff; //全部灯灭
for(i=0;i<9;i++) //闪烁5次
{
P1=~P1;
delay(300); //间隔300ms闪烁一次
}
}
}
就是红色字体部分~ 刚开始我想只用一个 i 变量进行循环控制的,但是烧录到单片机中却发现它并没有像我想的那样重复一次而是直接跳跃到下面的 全部灯灭,然后闪烁5次。
上星期刚开始学习单片机~~ 好多还不太懂,希望大家帮我解答下~~
然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。
*/
#include<reg52.h>
#include<intrins.h> //左右移动函数头文件
#define uint unsigned int
#define uchar unsigned char
void delay(uint time) //延时子函数
{
uint i,j;
for(i=time;i>0;i--) //延时time 秒
for(j=110;j>0;j--);
}
void main()
{ uchar S,X,i,j;
while(1)
{
for(j=0;j<2;j++) //为什么j改成i后不进行循环了而是直接进入P1=0xff那一步,求解答~
{ S=0xfe;
for(i=0;i<8;i++)
{
P1=S;
delay(200); //延时200ms
S= _crol_(S,1); //向左移动一位
}
X=0x7f;
for(i=0;i<8;i++)
{
P1=X;
delay(200);
X=_cror_(X,1); //向右移动一位
}
}
P1=0xff; //全部灯灭
for(i=0;i<9;i++) //闪烁5次
{
P1=~P1;
delay(300); //间隔300ms闪烁一次
}
}
}
就是红色字体部分~ 刚开始我想只用一个 i 变量进行循环控制的,但是烧录到单片机中却发现它并没有像我想的那样重复一次而是直接跳跃到下面的 全部灯灭,然后闪烁5次。
上星期刚开始学习单片机~~ 好多还不太懂,希望大家帮我解答下~~
什么啊
同一个for内用同一个变量,变量会被下面的同名变量付值,你的 第一个for里面已经含有 i ,所以他循环时会被里面的 i 付值,也就是说里面的 i 加一次 ,外面的只运行了一次后里面又被加了一次,相当于运行了 2次,就已经完成了,结果是只闪一下就会往下跳