最新电影在线观看,jrs低调看直播,avav天堂,囯产精品宾馆在线精品酒店,亚洲精品成人区在线观看

輕量級的LED控制模塊

前言

LED燈操作在單片機開發中是最常用的功能,通常通過 GPIO 高低電平控制完成各種各樣的亮滅動作。

LED燈控制實現的方式有很多種,這里介紹一種通過bit位控制LED燈亮滅的實現方式。

介紹

特點

  • 移植方便,只需要實現硬件 IO 初始化和 IO 狀態寫入即可
  • 豐富的接口實現,通過這些接口可以實現亮滅、閃爍、自定義等多種要求的功能
  • 代碼量少,且代碼注釋豐富,風格統一,便于閱讀和使用

實現方式

通過定義一個變量,將其每個bit做為控制LED的亮滅狀態,0-滅,1-亮。

代碼中通過定義uint8_t state[LED_STATE_BYTE_NUM];數組用來儲存LED的亮滅狀態,因為當時LED亮滅沒有復雜的要求時,可以修改LED_STATE_BYTE_NUM的值,減少內存占用;如果亮滅要求很復雜,那就可以將LED_STATE_BYTE_NUM的值改大,儲存更多的狀態信息。

為了盡可能地減少bit位的占用,在設置LED狀態時會計算出占用bit位的最小的信息。

比如LED周期控制函數為100ms,理論上設置500ms間隔閃爍,則需要占用10個bit,但是增加一個bit時間顆粒度變量,只需要占用兩個bit即可,bit時間顆粒度變量為500ms。

當多個LED需要配合亮滅時,如流水燈,只需要觀察每個LED自身時的狀態設置即可

比如五個燈1秒中完成一次流水燈操作,那么從同一時刻起每個燈的狀態都是周期變化的,根據這個周期變化調用相關函數完成設置即可。

代碼示例

部分使用接口函數

/************ 普通模式  ***********/
cotLed_SetState(IO_LED_0, IO_LED_OFF); // 設置燈滅
cotLed_SetState(IO_LED_0, IO_LED_ON); // 設置燈亮

// 設置燈亮持續一秒后熄滅
cotLed_SetStateWithTime(IO_LED_0, IO_LED_ON, 1000); 

/************ 閃爍模式  ***********/

// 500毫秒進行閃爍(亮滅間隔時間)
cotLed_Twinkle(IO_LED_0, 500);  

// 500毫秒進行閃爍3次(一亮一滅為一次),次數完成后燈滅
cotLed_TwinkleWithCount(IO_LED_0, 500, 3, IO_LED_OFF);  

/************ 自定義模式  ***********/
// 2 秒內 3 次快閃,總共5次,次數完成后燈滅
cotLed_Custom(IO_LED_0, 5, IO_LED_OFF, 100, -100, 100, -100, 100, -100, -1400, 0);

// 2 秒內 1 次快閃,無限制次數
cotLed_Custom(IO_LED_0, 0, 100, -100, -1800, 0);

// 5個燈完成流水燈操作
cotLed_Custom(IO_LED_0, 200, -800, 0);
cotLed_Custom(IO_LED_1, -200, 200, -600, 0);
cotLed_Custom(IO_LED_2, -400, 200, -400, 0);
cotLed_Custom(IO_LED_3, -600, 200,-200, 0);
cotLed_Custom(IO_LED_4, -800, 200, 0);

代碼鏈接

下載鏈接:

  • //gitee.com/cot_package/cot_led
聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 31
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧