#中delay函数_ECBM系列教程3:闪烁灯——delay函数的用法。
上一篇文章中,教大家如何點(diǎn)亮一個(gè)LED。這一篇文章就教大家如何讓LED閃爍。
LED閃爍的原理其實(shí)很簡單,先讓LED亮起來,延時(shí)一段時(shí)間后熄滅,然后再亮起來就可以了。就是亮——延時(shí)——滅——延時(shí)——亮.....這樣周而復(fù)始。
#include "ecbm_core.h" //加載庫函數(shù)的頭文件。 void main(){ //main函數(shù),必須的。system_init(); //系統(tǒng)初始化函數(shù),也是必須的。while(1){LED_ON; //亮delay_ms(200); //延時(shí)LED_OFF; //滅delay_ms(200); //延時(shí)} }于是我們就在while循環(huán)里,按照上面的步驟直接寫出代碼。
https://www.zhihu.com/video/1218223212192059392可以看到LED已經(jīng)如我們想象那樣閃爍了。記性好的同學(xué)可能想起來,上一篇文章中提到一個(gè)LED閃爍的語句。沒錯(cuò),其實(shí)用下面的代碼也是一樣的效果。
#include "ecbm_core.h" //加載庫函數(shù)的頭文件。 void main(){ //main函數(shù),必須的。system_init(); //系統(tǒng)初始化函數(shù),也是必須的。while(1){LED_BLINK; //LED閃爍delay_ms(200); //閃爍延時(shí)} }正所謂條條大路通羅馬,同一個(gè)效果的實(shí)現(xiàn)代碼可能會多種多樣。因此大家在學(xué)習(xí)的時(shí)候一定領(lǐng)會意思,而不是死記硬背。
本篇的要點(diǎn)就是delay函數(shù)的實(shí)現(xiàn)。
我們可以在ecbm_core.h里找到delay_ms函數(shù)的聲明,聲明的注釋里告訴了你怎么使用該函數(shù)。比如說delay_ms函數(shù)就是想延時(shí)多少毫秒就在參數(shù)中填多少。像延時(shí)200ms就填200。就是這么簡單。然后我們可以在ecbm_core.c里查看delay_ms函數(shù)的定義:
內(nèi)部就是一個(gè)雙重while循環(huán),通過不斷的循環(huán)來消耗時(shí)間來達(dá)到延時(shí)的目的。ecbm_delay_base是一個(gè)經(jīng)過計(jì)算過的延時(shí)基準(zhǔn),保證了內(nèi)部循環(huán)運(yùn)行一次的時(shí)間是1ms。于是外層循環(huán)循環(huán)幾次就能延時(shí)多少秒。在邏輯分析儀里可以看到延時(shí)的時(shí)間挺準(zhǔn)的。
如果要實(shí)現(xiàn)us級的延時(shí),則可以使用delay_us。但是由于計(jì)算延時(shí)基準(zhǔn)本身就需要us級的時(shí)間,所以需要額外的把延時(shí)節(jié)拍求出來。
應(yīng)用代碼如圖所示,加/**/標(biāo)志的就是實(shí)現(xiàn)us級延時(shí)的兩句。
由于IO賦值,main函數(shù)的while循環(huán)跳轉(zhuǎn)也需要時(shí)間,所以延時(shí)會比20us稍稍大一些。即便這樣也足夠用了。
如果還有疑問,就在本篇文章下面提出吧。
預(yù)告:下一篇文章將會介紹GPIO的結(jié)構(gòu)和GPIO庫的函數(shù),敬請期待。
總結(jié)
以上是生活随笔為你收集整理的#中delay函数_ECBM系列教程3:闪烁灯——delay函数的用法。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: weblogic0638_Java安全之
- 下一篇: 7限制cpu使用_Kubernetes