序言:常用的延时大致分为两种:
一、非精确延时——1、for(i=0;i<100;i++);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2、i=100;while(i--);
2、精确延时——1、利用库函数_nop_();//需要include<intrins.h>)
? ? ? ? ? ? ? ? ? ? ? ? ? ?2、利用定时器进行定时
1、单片机延时代码(for)
#include <REGX52.H>
void main()
{
while(1)
{
P2=0xFE;//F=15=1111;E=14=1110;
for(i=0;i,100;i++);
P2=0xFF;//F=15=1111;
for(i=0;i<100;i++);
}
}
运行程序;显示无编译——原因是“i”未定义
定义“i”
#include (REGX52.H)
unsigned char i;//(i为变量,给i一个数据声明,为无符号数据类型,范围为0-255)
void main()
{
while(1)
{
P2=0xFE;//F=15=1111;E=14=1110;
for(i=0;i<100;i++);
P2=0xFF;//F=15=1111;
for(i=0;i<100;i++);
}
}
编译并下载,LED没有闪,亮度有所降低。——原因是延时的时间间隔太短,人眼无法识别
(穿插知识点——如何查询程序运行的时间间隔)
1、
2、复位
3、设置断点?
4、run?
5、sec后就是一个实际的准确时间间隔。
扩大时间间隔
——数据类型“char”只能支持到255,最大的间隔约不能满足我们的需求,更改为“int”(范围为更大)
#include <REGX52.H>
unsigned int i;
void main()
{
while(1)
{
P2=0xFE;
for(i=0;i<10000;i++);
P2=0xFF;
for(i=0;i<10000;i++);
}
}
结果LED闪烁!
?
|