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--);
}