0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

日常用到開源組件—MultiButton

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-08-11 09:04 ? 次閱讀

大家都知道“Stop Trying to Reinvent the Wheel”不要重復(fù)造輪子,但作為嵌入式程序猿每個項目都難免重復(fù)造些輪子。這個系(天)列(坑)會挨個介紹一些我日常用到開源組件,前人栽樹后人乘涼,縮減項目的開發(fā)周期好去摸(填)魚(坑)。

第一個組件,我重點推薦MultiButton!

按鍵!幾乎每個MCU級別的嵌入式項目都要用到,這是個天天要用的輪子,所以MultiButton這個組件就是我墻裂推薦的。感謝作者0x1abin

MultiButton 是一個小巧簡單(一個multi_button.c 一個multi_button.h)易用的事件驅(qū)動型按鍵驅(qū)動模塊,可無限量擴展按鍵,按鍵事件的回調(diào)異步處理方式可以簡化你的程序結(jié)構(gòu),去除冗余的按鍵處理硬編碼,讓你的按鍵業(yè)務(wù)邏輯更清晰。

License也非常的友好:MIT license

bec1be16-190c-11ed-ba43-dac502259ad0.png

可以去這里下載

0x1abin/MultiButton: Button driver for embedded system (github.com)

https://gitee.com/mirrors_0x1abin/MultiButton

使用方法

1. 先申請一個按鍵結(jié)構(gòu)

struct Button button1
2.初始化按鍵對象,綁定按鍵的GPIO電平讀取接口read_button_pin() ,后一個參數(shù)設(shè)置有效觸發(fā)電平
button_init(&button1, read_button_pin, 0, 0);
3. 注冊按鍵事件
button_attach(&button1, SINGLE_CLICK, Callback_SINGLE_CLICK_Handler);
button_attach(&button1, DOUBLE_CLICK, Callback_DOUBLE_Click_Handler);
....

4.啟動按鍵
button_start(&button1);

5.設(shè)置一個5ms間隔的定時器循環(huán)調(diào)用后臺處理函數(shù)
while(1) {
    ...
    if(g_TimerTicks >= 5) {
        g_TimerTicks = 0;
        button_ticks();
    }
}

特性

MultiButton 使用C語言實現(xiàn),基于面向?qū)ο蠓绞皆O(shè)計思路,每個按鍵對象單獨用一份數(shù)據(jù)結(jié)構(gòu)管理:

struct Button {
     uint16_t ticks;
     uint8_t  repeat: 4;
     uint8_t  event : 4;
     uint8_t  state : 3;
     uint8_t  debounce_cnt : 3;
     uint8_t  active_level : 1;
     uint8_t  button_level : 1;
     uint8_t  button_id;
     uint8_t  (*hal_button_Level)(uint8_t  button_id_);
     BtnCallback  cb[number_of_event];
     struct Button* next;
};

這樣每個按鍵使用單向鏈表相連,依次進(jìn)入 button_handler(struct Button* handle) 狀態(tài)機處理,所以每個按鍵的狀態(tài)彼此獨立。

按鍵事件

事件 說明
PRESS_DOWN 按鍵按下,每次按下都觸發(fā)
PRESS_UP 按鍵彈起,每次松開都觸發(fā)
PRESS_REPEAT 重復(fù)按下觸發(fā),變量repeat計數(shù)連擊次數(shù)
SINGLE_CLICK 單擊按鍵事件
DOUBLE_CLICK 雙擊按鍵事件
LONG_PRESS_START 達(dá)到長按時間閾值時觸發(fā)一次
LONG_PRESS_HOLD 長按期間一直觸發(fā)

基于LPC系列的移植參考

以下代碼截圖基于NXP官方的LPC804開發(fā)板。

實際使用的時候,coder還要去看下multi_button.h里的兩個宏定義,TICKS_INTERVAL默認(rèn)是5即5mS,這個與它實例間隔5mS是對應(yīng)的。DEBOUNCE_TICKS默認(rèn)是3最大是8,用于按鍵消抖。長按和短按的時間靠LONG_TICKS和SHORT_TICKS設(shè)置或者說優(yōu)化,這兩個宏定義也在multi_button.h中。

beda8586-190c-11ed-ba43-dac502259ad0.png

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16813

    瀏覽量

    349461
  • 嵌入式
    +關(guān)注

    關(guān)注

    5054

    文章

    18917

    瀏覽量

    300986
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3190

    瀏覽量

    42254

原文標(biāo)題:避免重復(fù)造輪子系列之按鍵組件-MultiButton

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    EMFILE是否包含開源組件

    的問題是“可能”。有人知道這到底是什么意思嗎?EMFILE是否包含開源組件?如果是,哪些組件是什么是他們的執(zhí)照嗎?這對我的所有權(quán)代碼有什么影響?有沒有人這么做過?謝謝你的幫助,古斯塔沃
    發(fā)表于 08-08 10:47

    經(jīng)常使用到開源免費軟件分享

    工欲善其事,必先利其器。首先介紹下項目開發(fā)中個人經(jīng)常使用到開源免費軟件:1、虛擬機虛擬機使用VMware player,個人發(fā)現(xiàn)使用Virtualbox ubuntu虛擬機會經(jīng)常崩潰,選用免費
    發(fā)表于 11-04 06:38

    HarmonyOS組件更新,新增700+開源組件

    組件是對數(shù)據(jù)和方法的簡單封裝,通過使用現(xiàn)成的組件讓應(yīng)用開發(fā)更加簡單高效。自HarmonyOS組件開源以來,經(jīng)兩次上線,已開源了700+的Ja
    發(fā)表于 11-18 11:17

    嵌入式常用開源庫是什么

    閱讀目錄 linux/嵌入式常用開源庫列表其他資料參考資料linux下/嵌入式常用開源庫名字及簡介,使用文檔和教程可以自己百度 (自己整理,不定時完善) linux/嵌入式
    發(fā)表于 12-24 06:53

    介紹一個事件驅(qū)動型按鍵驅(qū)動模塊MultiButton

    MultiButton MultiButton,一個小巧簡單易用的事件驅(qū)動型按鍵驅(qū)動模塊,作者 0x1abin,目前收獲 222 個star,遵循 MIT 開源許可。這個項目非常精簡,只有兩個文件
    發(fā)表于 01-10 07:28

    MultiButton使用步驟和代碼的問題

    單片機系統(tǒng)一個非常實用的按鍵處理框架MultiButton前言一、MultiButton 是什么?2. 使用步驟和代碼的問題2.1 使用步驟2.2 按鍵庫的問題2.3 按鍵庫一些默認(rèn)參數(shù)的配置3.
    發(fā)表于 01-21 06:03

    什么是Ardunio?常用組件有哪些?

    什么是Ardunio?常用組件有哪些?
    發(fā)表于 01-24 06:44

    日常我們用到的JTAG和SWD兩種模式的接口是怎樣的

    我們常用到的有哪幾種模式的接口?日常我們用到的JTAG和SWD兩種模式的接口是怎樣的?
    發(fā)表于 02-23 07:14

    超精簡的按鍵組件MultiButton概括

    Growing up’s a funny thing. Sneaks up on you.長大是件很有趣的事,不經(jīng)意間就發(fā)生了。一、概括項目的倉庫大佬的超精簡的軟件定時器multi_timer已經(jīng)讓人眼前一亮,如今這個按鍵組件MultiButton更令我折服。把按鍵的各種
    發(fā)表于 02-28 11:19

    【中科昊芯Start_DSC28027勇士開發(fā)板試用體驗】開源MultiButton移植

    一、開源MultiButton介紹MultiButton 是一個小巧簡單易用的事件驅(qū)動型按鍵驅(qū)動模塊,可無限量擴展按鍵,按鍵事件的回調(diào)異步處理方式可以簡化你的程序結(jié)構(gòu),去除冗余的按鍵處理硬編碼,讓
    發(fā)表于 07-01 23:04

    日常生活中常用到的接口介紹

    日常使用手機、電腦以及其他電子產(chǎn)品,免不了要跟各種接口打交道。周末花了些時間查了些資料,并總結(jié)自己的實際使用經(jīng)驗,跟大家聊一聊我們日常使用手機、iPad、電腦、外設(shè)中常用到的接口。
    發(fā)表于 10-22 16:27 ?4165次閱讀

    HarmonyOS新增開源組件概覽

    組件是對數(shù)據(jù)和方法的簡單封裝,通過使用現(xiàn)成的組件讓應(yīng)用開發(fā)更加簡單高效。自HarmonyOS組件開源以來,經(jīng)兩次上線,已開源了700+的Ja
    的頭像 發(fā)表于 11-22 10:46 ?2330次閱讀
    HarmonyOS新增<b class='flag-5'>開源</b><b class='flag-5'>組件</b>概覽

    常用日常電路圖匯總

    常用日常電路圖匯總
    發(fā)表于 12-06 13:57 ?134次下載

    2022 OpenHarmony組件大賽,共建開源組件

    原標(biāo)題:共建開源組件生態(tài) 2022 OpenHarmony組件大賽等你來 2022年4月15日,2022 OpenHarmony組件大賽(下稱“大賽”)報名通道正式開啟,開發(fā)者登錄
    的頭像 發(fā)表于 04-26 17:31 ?1501次閱讀
    2022 OpenHarmony<b class='flag-5'>組件</b>大賽,共建<b class='flag-5'>開源</b><b class='flag-5'>組件</b>

    【中科昊芯Start_DSC28027勇士開發(fā)板試用體驗】開源MultiButton移植

    本文來源電子發(fā)燒友社區(qū),作者:xiaopeng, 帖子地址: https://bbs.elecfans.com/jishu_2290815_1_1.html 一、開源MultiButton介紹
    的頭像 發(fā)表于 11-21 11:06 ?506次閱讀
    【中科昊芯Start_DSC28027勇士開發(fā)板試用體驗】<b class='flag-5'>開源</b>庫<b class='flag-5'>MultiButton</b>移植