色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

日常用到開源組件—MultiButton

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

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

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

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

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

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. 先申請一個按鍵結構

struct Button button1
2.初始化按鍵對象,綁定按鍵的GPIO電平讀取接口read_button_pin() ,后一個參數設置有效觸發電平
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.設置一個5ms間隔的定時器循環調用后臺處理函數
while(1) {
    ...
    if(g_TimerTicks >= 5) {
        g_TimerTicks = 0;
        button_ticks();
    }
}

特性

MultiButton 使用C語言實現,基于面向對象方式設計思路,每個按鍵對象單獨用一份數據結構管理:

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;
};

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

按鍵事件

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

基于LPC系列的移植參考

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

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

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

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17173

    瀏覽量

    351629
  • 嵌入式
    +關注

    關注

    5086

    文章

    19143

    瀏覽量

    306044
  • 開源
    +關注

    關注

    3

    文章

    3368

    瀏覽量

    42566

原文標題:避免重復造輪子系列之按鍵組件-MultiButton

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

收藏 人收藏

    評論

    相關推薦

    EMFILE是否包含開源組件

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

    經常使用到開源免費軟件分享

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

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

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

    嵌入式常用開源庫是什么

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

    介紹一個事件驅動型按鍵驅動模塊MultiButton

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

    MultiButton使用步驟和代碼的問題

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

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

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

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

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

    超精簡的按鍵組件MultiButton概括

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

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

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

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

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

    HarmonyOS新增開源組件概覽

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

    常用日常電路圖匯總

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

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

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

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

    本文來源電子發燒友社區,作者:xiaopeng, 帖子地址: https://bbs.elecfans.com/jishu_2290815_1_1.html 一、開源MultiButton介紹
    的頭像 發表于 11-21 11:06 ?555次閱讀
    【中科昊芯Start_DSC28027勇士開發板試用體驗】<b class='flag-5'>開源</b>庫<b class='flag-5'>MultiButton</b>移植
    主站蜘蛛池模板: 无码国产精品高潮久久9| 亚在线观看免费视频入口| 四虎国产精品高清在线观看| 2020亚洲色噜噜狠狠网站| 好大好爽CAO死我了BL| 无码区国产区在线播放| 国产成人精品免费视频软件| 日韩一区二区三区精品| 成 人 片 免费播放| 日本久久精品视频| 成人18视频在线观看| 人妖操女人| 成人性视频全过程| 色狼亚洲色图| 国产精品JIZZ在线观看A片| 特级aa 毛片免费观看| 国产精品一区二区人妻无码| 校园全肉高h湿一女多男| 国产精品人妻无码77777| 亚洲精品国产第一区第二区| 狠狠射首页| 征服丝袜旗袍人妻| 男人日女人的b| 城中村快餐嫖老妇对白| 无码AV毛片色欲欧洲美洲| 国产亚洲视频在线观看| 一个人的HD高清在线观看 | 伊人热| 久久亚洲国产成人影院| 99爱免费视频| 乳色吐息在线观看全集免费观看| 国产成人亚洲综合无| 亚洲色欲色欲WWW在线丝| 免费精品国产人妻国语| 二级毛片免费观看全程| 亚洲福利视频导航| 久久精品国产色蜜蜜麻豆国语版 | 2020亚洲色噜噜狠狠网站| 欧美一区二区在线观看| 国产午夜亚洲精品区| 18禁黄久久久AAA片|