注意:调试延时时要将晶振调整为11.0592MHZ(看开发板和单片机),头文件选52。
延时小灯:直接减延时
#include "reg51.h"
typedef unsigned char u8;
typedef unsigned int u16; //重定义保留字,使之简写
sbit led=P2^0; //D1特殊位定义
void delay(u16 i)
//延时函数,方便调用
{
while(i--); //i随后赋值,表示延时时长
}
void main()
{
while(1) //无限循环
{
led=0; //将对应串口赋值为低电平,产生电位差以点亮led
delay(50000); //不超过65535,点亮时间 450ms
led=1;
delay(50000); //熄灭时间,大约492ms
}
}
亮->延时->灭->延时……
for循环延时
#include "reg52.h"
typedef unsigned char u16 ;
typedef unsigned int u8 ;
sbit D1=P2^0;
void delay()
{
u8 x,y;
for(x=200; x>0; x--)
{
for(y=300; y>0; y--);//用keil软件调试出500ms
}
}
void main()
{
while(1)
{
D1=0;
delay();
D1=1;
delay();
}
}
带参数的子程序
#include "reg52.h"
typedef unsigned char u16 ;
typedef unsigned int u8 ;
sbit D1=P2^0;
void delay(u8 z)
{
u8 x,y;
for(x=z; x>0; x--)
{
for(y=70; y>0; y--);//用keil软件调试出500ms
}
}
void main()
{
while(1)
{
D1=0;
delay(800);
D1=1;
delay(800);
}
}
基本时序