微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机一个程序问题

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)就不能正常运行,为什么?它的用途是?

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的真假来延时

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top