51单片机一个程序问题
时间:10-02
整理:3721RD
点击:
实验名称:不同频率闪烁一个LED
#include<reg52.h>
sbit LED0=P0^0;
void Delay(unsigned int t);
void main (void)
{
unsigned char i;
while (1)
{
for(i=0;i<10;i++)
{
LED0=0;
Delay(10000);
LED0=1;
Delay(10000);
}
for(i=0;i<10;i++)
{
LED0=0;
Delay(60000);
LED0=1;
Delay(60000);
}
}
}
void Delay(unsigned int t)
{
while(--t);
}
如果没有最后面那个whlile(——t)就不能正常运行,为什么?它的用途是?
#include<reg52.h>
sbit LED0=P0^0;
void Delay(unsigned int t);
void main (void)
{
unsigned char i;
while (1)
{
for(i=0;i<10;i++)
{
LED0=0;
Delay(10000);
LED0=1;
Delay(10000);
}
for(i=0;i<10;i++)
{
LED0=0;
Delay(60000);
LED0=1;
Delay(60000);
}
}
}
void Delay(unsigned int t)
{
while(--t);
}
如果没有最后面那个whlile(——t)就不能正常运行,为什么?它的用途是?
while(--t);是一个空循环,函数Delay执行这个空循环来达到延时的效果。空循环的作用就是延时,让CPU运算一大堆无用的自减运算,从而达到延时的效果。
比如Delay(10000),执行减法10000次。delay(10000)里面的10000就是传给delay里的t
但是这个延时效果是不精确的,取决于计算机的运行速度。
如果不延时的话,LED的闪烁频率太快,肉眼根本无法分辨。
百度一下人眼的视觉暂留特性。要有延时,才可以!不过同时这个while(--t)可以有很多种方式延时的。你可以参考一下。for(i=0;i<220;i++){for(j=t;j>0;j--)}
delay();函数如果没有延迟,就一闪而过了,相当于没有发生
路过
如果没有while(--t)就相当于没有延时
简单的说就是个一直判断while的真假来延时