上一篇文章中,教大家如何点亮一个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库的函数,敬请期待。

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

  1. uboot更改gpio电平_ECBM系列教程4:单片机的手和脚——GPIO

    GPIO全称叫做General-Purpose Input/Output,即通用输入/输出口.是单片机和外界交流的重要部件,你可能看到过没有ADC的单片机.没有定时器的单片机或者没有串口的单片机,但是 ...

  2. python拟合三元函数_python基础教程之常用内置函数、三元运算、递归

    目录 常用内置函数 abs/round/sum eval/exec enumerate max/min sorted zip map filter 补充:reduce lambda 初识递归 再谈递归 ...

  3. 【转载】深入了解scanf()/getchar()和gets()等函数,C++系列教程,C++实例教程,C++

    ---------首先我们看一下scanf()读取字符串的问题: 程序2: #include <stdio.h> int main() { char str1[20], str2[20]; ...

  4. keil如何添加h文件_ECBM系列教程1:如何搭建ECBM库环境。

    STC8属于8051单片机,发展到现在已经是带流水线的版本了,不过依然还是支持8051的指令集.因此任何支持8051的IDE都可以用来开发STC8单片机. 不过由于ECBM库的一些特性,我们只使用KE ...

  5. Excel教程中数组公式之系列教程(一)

           数组公式知识点一:数组的概述 在excel教程中,数组有一维数组.二维数组.甚至三维数组等更多维之分.不论是一维数组还是二维数组,在excel教程公式中都要用大括弧括起来. 数组中各个数 ...

  6. matlab计算公式中的累加,Matlab系列教程之数值计算_求和(积)_求累加(积)

    这是Matlab数值计算系列的第二篇文章,主要介绍求和或者求积,. 主要应对的的问题是对矩阵的每一行,或者每列求和或求积. 1.对矩阵的每一行或每一列求和. sum_col=sum(matrix); ...

  7. python内置函数open_Python学习教程:Python内置函数大总结(下篇)

    这里接着上次的 Python学习教程,给大家总结了Python 剩下的33个内置函数. 31 hash() 返回对象的哈希值 In [112]: hash(xiaoming)Out[112]: 613 ...

  8. python编写字符串查找函数_Python 简明教程 --- 8,Python 字符串函数

    好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- Steve McConnell 目录 字符串有很多操作函数,所以,这里我们专门用一节来介绍这些函数. 建 ...

  9. linux 负数_linux内核提权系列教程(2):任意地址读写到提权的4种方法

    一.漏洞代码分析 代码见arbitrary.h. 1.功能函数介绍 功能 输入结构名 输入结构 功能 ARBITRARY_RW_INIT init_args size 初始化全局对象,存于g_mem_ ...

最新文章

  1. 过来人的肺腑之言,攻读ML和CV硕士给我带来了什么?
  2. python怎么建文件dome_Python专题(四) 如何制作一个demo给老板看
  3. 保存处理后的视频文件
  4. 线性表C语言locate和ETget,线性表(数据结构重难点讲解)
  5. Visualization Document Feb 12 16:42
  6. Spring安全示例教程
  7. pascal与其它语言代码书写的不同和pascal的快捷键
  8. 【转】SQL SERVER convert函数日期格式化应用
  9. excel中使用Nist REFPROP常用函数及使用方法
  10. 计算机mid函数column,excel中的函数意思=MID($C3,COLUMN(D2)-3,1)
  11. FreeSwitch连接语音网关配置及使用场景
  12. 从一到无穷大 #5 公有云时序数据库定价
  13. STA X(X为主存地址)指令发出的微操作命令
  14. 上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道。...
  15. 字节跳动大数据开发面试题-附答案
  16. 拼图游戏Canvas版
  17. 开源代码分析技巧之三——老外如是说
  18. 客厅计算机笔记本cpu,自己装一台客厅迷你小电脑,我很幸运避开数个大坑
  19. 所有程序中的java在哪里设置密码_关于安全性:如何在桌面客户端应用程序(Java)中存储密码和敏感数据?...
  20. 计算机班内排名公式,巧用Excel数组公式统计各班优秀人数EXCEL基本教程 -电脑资料...

热门文章

  1. Python基本数据类型 set()
  2. 谈谈招聘时我喜欢见到的特质
  3. 2.2.5 操作系统之调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)
  4. mysql memory leak_解决memory leak问题
  5. python案例教程黄蔚答案_Python编程案例教程
  6. C++11 std::function
  7. android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案
  8. python计算图解_图解NumPy,看这一篇就够了!
  9. vim 插件_你不得不知道的适用于程序员的VIM插件
  10. 2021年度人工智能产品TOP10,百度飞桨EasyDL再获业界认可