#中delay函数_ECBM系列教程3:闪烁灯——delay函数的用法。

上一篇文章中,教大家如何点亮一个LED。这一篇文章就教大家如何让LED闪烁。

LED闪烁的原理其实很简单,先让LED亮起来,延时一段时间后熄灭,然后再亮起来就可以了。就是亮——延时——灭——延时——亮.....这样周而复始。

#include "ecbm_core.h"	//加载库函数的头文件。
void main(){			//main函数,必须的。system_init();		//系统初始化函数,也是必须的。while(1){LED_ON;		//亮delay_ms(200);	//延时LED_OFF;	//灭delay_ms(200);	//延时}
}

于是我们就在while循环里,按照上面的步骤直接写出代码。

5e88a272da750be6b2f75faf9c2aad31.pnghttps://www.zhihu.com/video/1218223212192059392

可以看到LED已经如我们想象那样闪烁了。记性好的同学可能想起来,上一篇文章中提到一个LED闪烁的语句。没错,其实用下面的代码也是一样的效果。

#include "ecbm_core.h"	//加载库函数的头文件。
void main(){			//main函数,必须的。system_init();		//系统初始化函数,也是必须的。while(1){LED_BLINK;	//LED闪烁delay_ms(200);	//闪烁延时}
}

正所谓条条大路通罗马,同一个效果的实现代码可能会多种多样。因此大家在学习的时候一定领会意思,而不是死记硬背。


本篇的要点就是delay函数的实现。

be769cf95b341eb5b5a96e2170d058a6.png

我们可以在ecbm_core.h里找到delay_ms函数的声明,声明的注释里告诉了你怎么使用该函数。比如说delay_ms函数就是想延时多少毫秒就在参数中填多少。像延时200ms就填200。就是这么简单。然后我们可以在ecbm_core.c里查看delay_ms函数的定义:

a10ffcb628b963d1a19d81bff04c961b.png

内部就是一个双重while循环,通过不断的循环来消耗时间来达到延时的目的。ecbm_delay_base是一个经过计算过的延时基准,保证了内部循环运行一次的时间是1ms。于是外层循环循环几次就能延时多少秒。在逻辑分析仪里可以看到延时的时间挺准的。

e8a20867f1bcddadd9bd36e343079c75.png

如果要实现us级的延时,则可以使用delay_us。但是由于计算延时基准本身就需要us级的时间,所以需要额外的把延时节拍求出来。

28c69bd37c74ba834c1d1647f34de237.png

应用代码如图所示,加/**/标志的就是实现us级延时的两句。

6b442f986dc78be5e295776e9b78bc0d.png

由于IO赋值,main函数的while循环跳转也需要时间,所以延时会比20us稍稍大一些。即便这样也足够用了。

如果还有疑问,就在本篇文章下面提出吧。

预告:下一篇文章将会介绍GPIO的结构和GPIO库的函数,敬请期待。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部