程序没循环led灯为什么还一直闪
时间:10-02
整理:3721RD
点击:
#include <reg51.h>
void delay(unsigned int i);
main()
{
while(1)
{
P2=0x00;
delay(600);
P2=0xff;
delay(600);
}
}
void delay(unsigned int i)
{
unsigned char j;
for(;i>0;i--)
for(j=255;j>0;j--);
}
和另一个程序
#include <reg51.h>
void delay(unsigned int i);
main()
{
P2=0x00;
delay(600);
P2=0xff;
delay(600);
}
void delay(unsigned int i)
{
unsigned char j;
for(;i>0;i--)
for(j=255;j>0;j--);
}
为什么;俩个程序烧录到单片机的结果是一样的呢 led灯一直闪 没有循环的不应该只闪一次吗?
void delay(unsigned int i);
main()
{
while(1)
{
P2=0x00;
delay(600);
P2=0xff;
delay(600);
}
}
void delay(unsigned int i)
{
unsigned char j;
for(;i>0;i--)
for(j=255;j>0;j--);
}
和另一个程序
#include <reg51.h>
void delay(unsigned int i);
main()
{
P2=0x00;
delay(600);
P2=0xff;
delay(600);
}
void delay(unsigned int i)
{
unsigned char j;
for(;i>0;i--)
for(j=255;j>0;j--);
}
为什么;俩个程序烧录到单片机的结果是一样的呢 led灯一直闪 没有循环的不应该只闪一次吗?
你确定第二个程序成功弄单片机里了?可能没成功弄进去,第一个有循环的程序还在单片机里面
你的主程序就是一个顺序,当执行完一次后,它会从头再执行的,而不是停在最后的位置的。如果你要停在最后的位置,就加一句while (1);
程序1中可以把while语句放在如下位置:
main()
{
P2=0x00;
delay(600);
P2=0xff;
delay(600);
while(1)
{
}
}
程序2把第二行语句去掉!
程序2应该改成main()
{
P2=0x00;
delay(600);
P2=0xff;
delay(600);
while(1)
{
}
}
因为不加while语句 main函数中的语句带动led会跑飞 导致程序跳出 按已记住的动作执行!
为什么会从头再执行呢?
“main函数中的语句带动led会跑飞 导致程序跳出 按已记住的动作执行!”这事什么意思跟单片机自身的功能有关还是跟程序有关
在后面加一个空的循环就可以了
单片机中为了能让程序受控,需要加while(1)这样的死循环,保证程序指针总是指向被编译过的指令也就是作者写的指令,否则就会一直执行ROM里指令造成跑飞,跑飞后,单片机引脚输出紊乱,所以灯在闪也不是固定频率的闪,是乱闪
