#中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循环里,按照上面的步骤直接写出代码。
https://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函数的实现。

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

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

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

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

由于IO赋值,main函数的while循环跳转也需要时间,所以延时会比20us稍稍大一些。即便这样也足够用了。
如果还有疑问,就在本篇文章下面提出吧。
预告:下一篇文章将会介绍GPIO的结构和GPIO库的函数,敬请期待。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
