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

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

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

3天內不再提示

關于按鍵的開源軟件模塊MultiButton

strongerHuang ? 來源:芯片之家 ? 作者:曉宇 ? 2021-11-17 15:25 ? 次閱讀

按鍵在我們生活中無處不在,買一塊開發(fā)板,按鍵是必備的一個功能。 肯定有人會說:按鍵就一個檢測IO狀態(tài),有什么難度? 你單純的檢測一個按鍵,確實難度很低。但如果檢測單擊、雙擊、三擊,長按、短按等操作呢?如果再將其嵌入到復雜的項目中呢? 有些功能看似很簡單,實際項目中其實不簡單。就好比“LED亮燈如果能將“LED點燈運用在各種不同的項目中,你就能超越很多人了。 今天就來分享一個關于按鍵的開源軟件模塊:MultiButton(事件驅動型按鍵驅動模塊)

簡介

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

開源地址:

https://github.com/0x1abin/MultiButton

1.特性

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

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  (*hal_button_Level)(void);  BtnCallback  cb[number_of_event];  struct Button* next;};

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

2.按鍵事件

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

使用方法

1.先申請一個按鍵結構
struct Button button1;
2.初始化按鍵對象,綁定按鍵的GPIO電平讀取接口read_button_pin() ,后一個參數(shù)設置有效觸發(fā)電平。
button_init(&button1, read_button_pin, 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間隔的定時器循環(huán)調用后臺處理函數(shù)
while(1) {    ...    if(timer_ticks == 5) {        timer_ticks = 0;
        button_ticks();    }}

實例

參考實例
#include "button.h"
struct Button btn1;
uint8_t read_button1_GPIO(){  return HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);}void BTN1_PRESS_DOWN_Handler(void* btn){  //do something...}
void BTN1_PRESS_UP_Handler(void* btn){  //do something...}
int main(){   button_init(&btn1, read_button1_GPIO, 0);   button_attach(&btn1, PRESS_DOWN, BTN1_PRESS_DOWN_Handler);   button_attach(&btn1, PRESS_UP, BTN1_PRESS_UP_Handler);   button_attach(&btn1, PRESS_REPEAT, BTN1_PRESS_REPEAT_Handler);   button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler);   button_attach(&btn1, DOUBLE_CLICK, BTN1_DOUBLE_Click_Handler);   button_attach(&btn1, LONG_PRESS_START, BTN1_LONG_PRESS_START_Handler);   button_attach(&btn2, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler);   button_start(&btn1);
  //make the timer invoking the button_ticks() interval 5ms.  //This function is implemented by yourself.  __timer_start(button_ticks, 0, 5);
  while(1)  {  }}

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

    關注

    7

    文章

    2722

    瀏覽量

    47572
  • 驅動
    +關注

    關注

    12

    文章

    1844

    瀏覽量

    85367

原文標題:開源模塊 | 事件驅動型按鍵驅動模塊:MultiButton

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    共建鴻蒙生態(tài),開放原子開源基金會為迅龍軟件授牌

    12月20至21日,以“一切為了開發(fā)者”為主題的“2024開放原子開發(fā)者大會暨首屆開源技術學術大會”在武漢舉辦。本屆大會由開放原子開源基金會、中國通信學會聯(lián)合主辦,旨在貫徹落實國家軟件發(fā)展戰(zhàn)略,加速
    的頭像 發(fā)表于 01-08 17:36 ?250次閱讀
    共建鴻蒙生態(tài),開放原子<b class='flag-5'>開源</b>基金會為迅龍<b class='flag-5'>軟件</b>授牌

    開源能帶我們走向何方

    開源大模型、開源數(shù)據(jù)庫、開源框架、開源硬件......近些年,這些詞匯不絕于耳。雷軍說,好的代碼像詩一樣優(yōu)美,自己大二時寫的代碼就已經(jīng)開源
    的頭像 發(fā)表于 12-06 17:09 ?477次閱讀

    基于狀態(tài)機和面向對象的思想設計按鍵檢測模塊

    物理按鍵,在很多嵌入式產(chǎn)品里面應用得非常廣泛,很多嵌入式軟件工程師在剛剛開始入門的時候,點完燈之后就開始學習按鍵輸入檢測。按鍵輸入可以說是繼點燈之后,又一經(jīng)典的嵌入式入門必學內容之一。
    的頭像 發(fā)表于 11-14 11:44 ?289次閱讀
    基于狀態(tài)機和面向對象的思想設計<b class='flag-5'>按鍵</b>檢測<b class='flag-5'>模塊</b>

    簡儀科技與您相約第九屆開源測控開發(fā)者大會

    第九屆開源測控開發(fā)者大會,簡儀科技將繼續(xù)秉承開放、創(chuàng)新的精神,深入探討模塊測控領域軟件的重要性,并展示基于開源銳視測控平臺的實踐應用,帶來豐富的議題分享。
    的頭像 發(fā)表于 10-21 11:35 ?496次閱讀

    迅龍軟件出席2024開放原子開源生態(tài)大會,共謀開源生態(tài)繁榮之路

    產(chǎn)業(yè)發(fā)展脈搏。作為全球領先的開源硬件和開源軟件品牌商,迅龍軟件受邀參加此屆大會,并攜旗下高算力人工智能系列產(chǎn)品OrangePiAIStudio、OrangePiAI
    的頭像 發(fā)表于 09-26 13:51 ?444次閱讀
    迅龍<b class='flag-5'>軟件</b>出席2024開放原子<b class='flag-5'>開源</b>生態(tài)大會,共謀<b class='flag-5'>開源</b>生態(tài)繁榮之路

    NVIDIA全面轉向開源GPU內核模塊

    借助 R515 驅動程序,NVIDIA 于 2022 年 5 月發(fā)布了一套開源的 Linux GPU 內核模塊,該模塊采用雙許可證,即 GPL 和 MIT 許可。初始版本主要面向數(shù)據(jù)中心計算 GPU,而 GeForce 和工作站
    的頭像 發(fā)表于 07-25 09:56 ?457次閱讀
    NVIDIA全面轉向<b class='flag-5'>開源</b>GPU內核<b class='flag-5'>模塊</b>

    迅龍軟件加入甲辰計劃“開源實習生聯(lián)合招聘培養(yǎng)”項目,共建RISC-V?開源生態(tài)

    近日,迅龍軟件宣布加入甲辰計劃“開源實習生聯(lián)合招聘培養(yǎng)項目”。該項目致力于RISC-V相關人才的培養(yǎng),同時推動企業(yè)加速RISC-V生態(tài)建設目標。加入該項目后,迅龍軟件將作為用人單位面向開源
    的頭像 發(fā)表于 07-22 16:23 ?423次閱讀
    迅龍<b class='flag-5'>軟件</b>加入甲辰計劃“<b class='flag-5'>開源</b>實習生聯(lián)合招聘培養(yǎng)”項目,共建RISC-V?<b class='flag-5'>開源</b>生態(tài)

    英偉達將全面轉向開源GPU內核模塊

    英偉達公司近期宣布了一項重大決策,即全面轉向開源GPU內核模塊,并計劃最終以此取代閉源驅動程序。這一戰(zhàn)略轉變標志著英偉達在開源領域邁出了重要一步,旨在為用戶提供更強大、更全面的Linux支持。
    的頭像 發(fā)表于 07-19 15:26 ?578次閱讀

    開啟開源布道新篇章 — LF開源軟件學園誠邀開源精英加入成為OSPO講師

    OSPO——企業(yè)開源戰(zhàn)略的引擎在當今數(shù)字化時代,開源軟件已成為推動全球技術創(chuàng)新的加速器。它不僅重塑了軟件開發(fā)的模式,更成為企業(yè)構建競爭優(yōu)勢的關鍵。然而,隨著
    的頭像 發(fā)表于 07-04 08:36 ?325次閱讀
    開啟<b class='flag-5'>開源</b>布道新篇章 — LF<b class='flag-5'>開源</b><b class='flag-5'>軟件</b>學園誠邀<b class='flag-5'>開源</b>精英加入成為OSPO講師

    嵌入式學習-飛凌嵌入式ElfBoard-項目分享|基于ELF 1S開發(fā)板完成的物聯(lián)網(wǎng)開源項目

    是一款精美小巧的Modbus-RTU從機調試軟件,使用它可以虛擬出任何支持Modbus協(xié)議的從機設備,具體軟件界面如下圖所示: 關于無線網(wǎng)絡模塊,它支持繼電器開關、RGB三色燈、
    發(fā)表于 05-16 09:19

    飛凌嵌入式-ElfBoard-項目分享|基于ELF 1S開發(fā)板完成的物聯(lián)網(wǎng)開源項目

    是一款精美小巧的Modbus-RTU從機調試軟件,使用它可以虛擬出任何支持Modbus協(xié)議的從機設備,具體軟件界面如下圖所示: 關于無線網(wǎng)絡模塊,它支持繼電器開關、RGB三色燈、
    發(fā)表于 05-16 09:12

    迅龍軟件加入開放原子開源基金會和OpenHarmony?項目,共建開源新生態(tài)

    近日,迅龍軟件與“開放原子開源基金會”簽署協(xié)議,加入“開放原子開源基金會”(以下簡稱“開源基金會”),成為開源基金會白銀捐贈人,這標志著迅龍
    的頭像 發(fā)表于 04-30 17:50 ?1064次閱讀
    迅龍<b class='flag-5'>軟件</b>加入開放原子<b class='flag-5'>開源</b>基金會和OpenHarmony?項目,共建<b class='flag-5'>開源</b>新生態(tài)

    【外設移植】雙軸按鍵搖桿模塊Ai-M61開發(fā)板

    雙軸按鍵搖桿模塊采用金屬按鍵搖桿電位器,模塊包含兩路模擬輸出和一路數(shù)字輸出接口。
    的頭像 發(fā)表于 03-12 15:24 ?1064次閱讀
    【外設移植】雙軸<b class='flag-5'>按鍵</b>搖桿<b class='flag-5'>模塊</b>Ai-M61開發(fā)板

    SV-6206 三路尋呼按鍵 礦井網(wǎng)絡對講求助模塊

    SV-6206 三路尋呼按鍵 ** 礦井****網(wǎng)絡對講求助模塊** · SV-6206是我司的一款網(wǎng)絡對講模塊,帶三路尋呼按鍵,可實現(xiàn)對講、廣播等功能。具有10/100M以太網(wǎng)接口,
    的頭像 發(fā)表于 02-23 09:11 ?329次閱讀
    SV-6206 三路尋呼<b class='flag-5'>按鍵</b> 礦井網(wǎng)絡對講求助<b class='flag-5'>模塊</b>

    開源軟件生態(tài)發(fā)展座談會順利舉辦

    1月22日,以開源鴻蒙為主題的開源軟件生態(tài)發(fā)展座談交流會在拓維信息&開鴻智谷成功舉辦。湖南省工信廳信息化和軟件服務業(yè)處處長周平、信息動員處處長劉平、信息化和
    的頭像 發(fā)表于 01-26 08:30 ?1203次閱讀
    <b class='flag-5'>開源</b><b class='flag-5'>軟件</b>生態(tài)發(fā)展座談會順利舉辦
    主站蜘蛛池模板: 麻豆AV福利AV久久AV| 国产精品99久久久久久AV蜜臀| 无颜之月全集免费观看| 窝窝色资源站| 偷拍亚洲制服另类无码专区| 网友自拍偷拍| 亚洲黄网站wwwwww| 夜夜草导航| 97国产视频| 成人女人A级毛片免费软件| 国产白浆视频在线播放| 国产在线精品亚洲第1页| 久久精品国产亚洲AV未满十八 | 欧美z000z猪| 秋霞在线看片无码免费| 婷婷亚洲AV色香蕉蜜桃| 亚洲综合网国产精品一区| 6080yy亚洲久久无码| 成人综合在线观看| 国产自产第一区c国产| 久久免费看少妇级毛片蜜臀| 欧美亚洲曰韩一本道| 武汉美女洗澡| 18禁国产精品久久久久久麻豆| 被爽到叫呻呤视频免费视频| 国产香蕉尹人视频在线| 久久亚洲网站| 色播成人影院| 伊人久久大香| 吃奶啃奶玩乳漫画| 精品久久中文字幕有码| 欧美日韩一级黄色片| 亚洲高清国产品国语在线观看| 91亚洲 欧美 国产 制服 动漫| 国产不卡一卡2卡三卡4卡网站| 久99久热只有精品国产99| 欧美特黄三级成人| 亚洲免费网站观看视频| JIZZ学生13| 92精品国产成人观看免费| 九九热视频免费观看|