有关51单片机延时子程序

51C 用循环作延时的程序比汇编不好写多了。它不能计算的,只能用逐一试验的方法。这里也作个1 秒延时的,用P1口输出,每秒求反一次。仿真中可看出每秒红或蓝电平切换一次。改ms参数,可以改动延时时间,当然也是不断试验出的。这另外2 个延时时间也是很有用的,3ms延时,可作为数码管显示中的防鬼影,10ms延时可作为按键防抖用,留着备用。

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char

void delayms(ms);

void main ()
{
    while(1)
   {
      delayms(10);           //ms=1 为2.79ms,约 3ms,可作为数码管显示消鬼影延时

                                //ms=8 为9.88ms,约 10ms,可作为按键防抖延时
                                //ms=1000 为1.015s ,约 1s 延时
      P2=~P2;      //P2取反,P2口是LED灯
   }
}

void delayms(ms)          // 延时子程序
{    
  uint a,b,c;
  for(a=2;a>0;a--)
  for(b=46;b>0;b--)
  for(c=ms;c>0;c--);
}

原文地址:https://www.cnblogs.com/steararre/p/2392620.html