微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机 LED流水灯 编写问题,菜鸟问题!跪求指教~

单片机 LED流水灯 编写问题,菜鸟问题!跪求指教~

时间:10-02 整理:3721RD 点击:

以下是一个LED流水灯的编译,大部分都明白了,就是剩下最后一部分:
void Delay10ms(unsigned int c)
大概明白这是一个延时,但为何是10ms延时,为什么要出现a和b,为什么是38和130,为什么是三个for语句,而不是二个或者四个?超级不明白,曾经尝试修改过数值去影响LED的延时时间,不过还是不太明白具体数值和for的关系,在此,真心求教~~~!
#include<reg51.h>
#include<intrins.h>
#define GPIO_LED P2
void Delay10ms(unsigned int);
void main(void)
{
    unsigned char n;
    GPIO_LED=0x01;
    while(1)
    {
        for(n=0;n<7;n++)
        {
               GPIO_LED=_crol_(GPIO_LED,1);
            Delay10ms(50);
           }
           for(n=0;n<7;n++)
           {
            GPIO_LED=_cror_(GPIO_LED,1);
            Delay10ms(50);
           }
  }
}
void Delay10ms(unsigned int c)
{
    unsigned char a,b;
        for(;c>0;c--)
           for(b=38;b>0;b--)
                   for(a=130;a>0;a--);
}

最后一段你是指延时函数吗?!~主函数放前面感觉整洁点,把其他子函数放后面,必须在主函数前面声明下如《~void Delay10ms(unsigned int);》如果放前面就不要声明了!~

一个也可以!~4个也没问题,三个在软件调试的时候,通过需改A,和B两个数,湊10ms,比较方便!如果是一个的话改的不够精确!~·4个改的太麻烦!~

那是怎么知道这就能凑10ms的呢?

你要是会软件调试的时候就知道了!~在调试的时候看运行这个延时要多少时间(首先可以根据晶振和机器周期算出理论的值-----单片机运行a*b次所需要的时间),多了就减少,少了就增加,根据调整a或b看调到最接近10ms时候(或者你感觉这个精度可以满足你的要求)就OK了

衷心感谢指教,关于测试速度,是我大意忘记了,还有一个小问题,既然最下面一段语言已经做到延时,那么为什么在 void main中,仍然在Delay10ms后面的()里面填上50?是因为最后一段的延时必须做50次才能延时10ms?
那个。最后一段为什么不放在前面,而要放在后面,有什么玄机吗?

你的延时函数是10MS但是你调用的时候需要延时500ms,就要把c设成50了!~

感谢感谢,获益良多~~~!

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

网站地图

Top