99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

關(guān)于按鍵的開(kāi)源軟件模塊MultiButton

strongerHuang ? 來(lái)源:芯片之家 ? 作者:曉宇 ? 2021-11-17 15:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

簡(jiǎn)介

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

開(kāi)源地址:

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

1.特性

MultiButton 使用C語(yǔ)言實(shí)現(xiàn),基于面向?qū)ο蠓绞皆O(shè)計(jì)思路,每個(gè)按鍵對(duì)象單獨(dú)用一份數(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  (*hal_button_Level)(void);  BtnCallback  cb[number_of_event];  struct Button* next;};

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

2.按鍵事件

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

使用方法

1.先申請(qǐng)一個(gè)按鍵結(jié)構(gòu)
struct Button button1;
2.初始化按鍵對(duì)象,綁定按鍵的GPIO電平讀取接口read_button_pin() ,后一個(gè)參數(shù)設(shè)置有效觸發(fā)電平。
button_init(&button1, read_button_pin, 0);
3.注冊(cè)按鍵事件
button_attach(&button1, SINGLE_CLICK, Callback_SINGLE_CLICK_Handler);button_attach(&button1, DOUBLE_CLICK, Callback_DOUBLE_Click_Handler);...
4.啟動(dòng)按鍵
button_start(&button1);
5.設(shè)置一個(gè)5ms間隔的定時(shí)器循環(huán)調(diào)用后臺(tái)處理函數(shù)
while(1) {    ...    if(timer_ticks == 5) {        timer_ticks = 0;
        button_ticks();    }}

實(shí)例

參考實(shí)例
#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)  {  }}

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

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50396
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1918

    瀏覽量

    86940

原文標(biāo)題:開(kāi)源模塊 | 事件驅(qū)動(dòng)型按鍵驅(qū)動(dòng)模塊:MultiButton

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請(qǐng)問(wèn)EZ-Serial固件是否使用任何OSS(開(kāi)源軟件)庫(kù)或軟件?

    EZ-Serial 固件是否使用任何 OSS(開(kāi)源軟件)庫(kù)或軟件?
    發(fā)表于 07-02 08:14

    AS32X601驅(qū)動(dòng)系列教程 GPIO_按鍵檢測(cè)詳解

    在嵌入式系統(tǒng)開(kāi)發(fā)中,GPIO(通用輸入輸出端口)是實(shí)現(xiàn)硬件與軟件交互的關(guān)鍵組件。本節(jié)主要利用的時(shí)GPIO的輸入采集功能,本節(jié)的主要功能為,讀取板載按鍵,當(dāng)按鍵按下時(shí),對(duì)應(yīng)led亮起,抬起按鍵
    的頭像 發(fā)表于 05-23 16:44 ?272次閱讀
    AS32X601驅(qū)動(dòng)系列教程 GPIO_<b class='flag-5'>按鍵</b>檢測(cè)詳解

    普華基礎(chǔ)軟件開(kāi)源車用操作系統(tǒng)迎來(lái)全新版本

    近日,普華基礎(chǔ)軟件開(kāi)源車用操作系統(tǒng)媒體發(fā)布會(huì)在上海中國(guó)汽車會(huì)客廳召開(kāi)——全球首個(gè)開(kāi)源智能駕駛操作系統(tǒng)微內(nèi)核龘EasyAda、開(kāi)源安全車控操作系統(tǒng)小滿EasyXMen全新版本正式發(fā)布?,F(xiàn)
    的頭像 發(fā)表于 04-25 16:18 ?409次閱讀

    【CW32模塊使用】雙軸按鍵搖桿模塊

    雙軸按鍵游戲搖桿模塊,采用 PS2游戲手柄上金屬按鍵搖桿電位器。模塊特設(shè)二路模擬輸出和一路數(shù)字輸出接口、輸出值分別對(duì)應(yīng)(X、Y)雙軸偏移量、其類型為模擬量、
    的頭像 發(fā)表于 03-29 17:23 ?404次閱讀
    【CW32<b class='flag-5'>模塊</b>使用】雙軸<b class='flag-5'>按鍵</b>搖桿<b class='flag-5'>模塊</b>

    開(kāi)源軟件的價(jià)值解讀 哈佛商學(xué)院和多倫多大學(xué)聯(lián)合撰寫

    “ ?周末分享一篇關(guān)于開(kāi)源軟件價(jià)值的論文,由哈佛商學(xué)院和多倫多大學(xué)聯(lián)合撰寫,量化地闡述了開(kāi)源軟件對(duì)經(jīng)濟(jì)及企業(yè)的影響。? ” 原文在這里,大家
    的頭像 發(fā)表于 03-24 11:11 ?415次閱讀

    第二屆開(kāi)放原子大賽汽車軟件開(kāi)源賽圓滿落幕

    2月14日,由開(kāi)放原子開(kāi)源基金會(huì)、重慶市經(jīng)濟(jì)和信息化委員會(huì)共同主辦的第二屆開(kāi)放原子大賽——汽車軟件開(kāi)源賽在重慶圓滿落幕。頒獎(jiǎng)典禮上,24支參賽隊(duì)伍榮獲獎(jiǎng)項(xiàng),展現(xiàn)了開(kāi)源技術(shù)在汽車
    的頭像 發(fā)表于 02-15 14:45 ?882次閱讀

    開(kāi)源安全領(lǐng)航者!華為云 CodeArts Governance 構(gòu)建更安全的軟件開(kāi)發(fā)生命周期

    華為云 CodeArts Governance開(kāi)源治理服務(wù)是針對(duì)軟件研發(fā)提供的一站式開(kāi)源軟件治理平臺(tái),從合法合規(guī)、網(wǎng)絡(luò)安全、供應(yīng)安全等維度消減開(kāi)源
    的頭像 發(fā)表于 02-12 16:50 ?1578次閱讀
    <b class='flag-5'>開(kāi)源</b>安全領(lǐng)航者!華為云 CodeArts Governance 構(gòu)建更安全的<b class='flag-5'>軟件</b>開(kāi)發(fā)生命周期

    【RA-Eco-RA2L1-48PIN-V1.0開(kāi)發(fā)板試用】——移植MultiButton按鍵庫(kù)

    MultiButton是一個(gè)國(guó)外的大神開(kāi)發(fā)的按鍵庫(kù),支持所有的嵌入式按鍵軟件開(kāi)發(fā),支持單擊,雙擊,長(zhǎng)按,短按等等所有復(fù)雜功能! 本次測(cè)評(píng)就來(lái)講解一下
    發(fā)表于 01-23 17:41

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

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

    開(kāi)源能帶我們走向何方

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

    基于狀態(tài)機(jī)和面向?qū)ο蟮乃枷朐O(shè)計(jì)按鍵檢測(cè)模塊

    物理按鍵,在很多嵌入式產(chǎn)品里面應(yīng)用得非常廣泛,很多嵌入式軟件工程師在剛剛開(kāi)始入門的時(shí)候,點(diǎn)完燈之后就開(kāi)始學(xué)習(xí)按鍵輸入檢測(cè)。按鍵輸入可以說(shuō)是繼點(diǎn)燈之后,又一經(jīng)典的嵌入式入門必學(xué)內(nèi)容之一。
    的頭像 發(fā)表于 11-14 11:44 ?954次閱讀
    基于狀態(tài)機(jī)和面向?qū)ο蟮乃枷朐O(shè)計(jì)<b class='flag-5'>按鍵</b>檢測(cè)<b class='flag-5'>模塊</b>

    簡(jiǎn)儀科技與您相約第九屆開(kāi)源測(cè)控開(kāi)發(fā)者大會(huì)

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

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

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

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

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

    英偉達(dá)將全面轉(zhuǎn)向開(kāi)源GPU內(nèi)核模塊

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