日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

簡介

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

開源地址:

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

1.特性

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  (*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ù)按下觸發(fā),變量repeat計數(shù)連擊次數(shù)
SINGLE_CLICK 單擊按鍵事件
DOUBLE_CLICK 雙擊按鍵事件
LONG_PRESS_START 達到長按時間閾值時觸發(fā)一次
LONG_PRESS_HOLD 長按期間一直觸發(fā)

使用方法

1.先申請一個按鍵結(jié)構(gòu)
struct Button button1;
2.初始化按鍵對象,綁定按鍵的GPIO電平讀取接口read_button_pin() ,后一個參數(shù)設(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.設(shè)置一個5ms間隔的定時器循環(huán)調(diào)用后臺處理函數(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)  {  }}

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

    關(guān)注

    7

    文章

    2849

    瀏覽量

    53466
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1994

    瀏覽量

    88735

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    開放原子開源基金亮相2026年自由軟件法律與許可研討會

    ; Licensing Workshop 2026)在德國柏林成功舉辦。本次會議重點聚焦開源軟件許可合規(guī)、開源法律實踐、AI時代知識產(chǎn)權(quán)與開源治理等議題,深入探討了
    的頭像 發(fā)表于 04-22 10:45 ?384次閱讀

    山東大學(xué)開源鴻蒙技術(shù)俱樂部成立儀式暨系統(tǒng)軟件技術(shù)論壇圓滿舉辦

    2025年12月26日,山東大學(xué)開源鴻蒙技術(shù)俱樂部成立儀式暨系統(tǒng)軟件技術(shù)論壇于山東大學(xué)軟件園校區(qū)圓滿舉辦。隨著開源鴻蒙在基礎(chǔ)軟件領(lǐng)域的影響力
    的頭像 發(fā)表于 12-30 19:06 ?699次閱讀
    山東大學(xué)<b class='flag-5'>開源</b>鴻蒙技術(shù)俱樂部成立儀式暨系統(tǒng)<b class='flag-5'>軟件</b>技術(shù)論壇圓滿舉辦

    進迭時空 debug upstream | 取之于開源,貢獻于開源

    秉承“取之于開源,貢獻于開源”的理念,進迭時空在Debug軟件的開發(fā)與維護中,始終堅持UpstreamFirst原則,積極將優(yōu)化與修復(fù)反饋至開源上游,與全球開發(fā)者共同推動RISC-V生
    的頭像 發(fā)表于 11-17 09:33 ?5734次閱讀
    進迭時空 debug upstream | 取之于<b class='flag-5'>開源</b>,貢獻于<b class='flag-5'>開源</b>

    NVIDIA宣布開源Aerial軟件

    NVIDIA 開源其 Aerial 軟件,并將 NVIDIA Sionna 研究套件和 Aerial 測試平臺引入 NVIDIA DGX Spark 平臺,為研究人員提供強大的工具和便捷的訪問途徑,以加速 AI 原生無線創(chuàng)新。
    的頭像 發(fā)表于 11-03 15:14 ?1219次閱讀

    關(guān)于區(qū)分光模塊拉環(huán)

    模塊
    光模塊廠家TTL電平
    發(fā)布于 :2025年09月26日 10:05:38

    普華基礎(chǔ)軟件亮相2025 CCF中國開源大會

    近日,由中國計算機學(xué)會(CCF)主辦的2025 CCF中國開源大會在上海召開。本屆大會以“蓄勢引領(lǐng)、眾行致遠”為主題,重點聚焦開源操作系統(tǒng)、開源芯片、開源大模型、
    的頭像 發(fā)表于 08-11 09:21 ?1320次閱讀

    BitsButton嵌入式按鍵處理框架

    ; } bits_btn_ring_buffer_t; SPSC(單生產(chǎn)者單消費者)線程安全模型; 無鎖設(shè)計+原子操作; 緩沖區(qū)溢出檢測與統(tǒng)計; 輕量化處理(RAM <20字節(jié)/按鍵); ?4.??模塊化架構(gòu) 模塊
    發(fā)表于 08-02 11:24

    潤和軟件亮相2025開放原子開源生態(tài)大會

    7月23-24日,2025開放原子開源生態(tài)大會在北京國家會議中心盛大舉辦。作為由開放原子開源基金會主辦的年度開源盛會,本屆大會以“開源賦能產(chǎn)業(yè),生態(tài)共筑未來”為主題,匯聚政府領(lǐng)導(dǎo)、專家
    的頭像 發(fā)表于 08-01 17:49 ?2208次閱讀

    普華基礎(chǔ)軟件亮相2025開放原子開源生態(tài)大會

    此前,7月23日-24日,以“開源賦能產(chǎn)業(yè),生態(tài)共筑未來”為主題的2025開放原子開源生態(tài)大會在北京舉辦。工業(yè)和信息化部副部長熊繼軍、北京市人民政府副秘書長許心超出席大會并致辭。普華基礎(chǔ)軟件作為開放
    的頭像 發(fā)表于 07-31 15:56 ?1334次閱讀

    開源項目!FourThirdsEye 開源 M4/3 相機模塊

    FourThirdsEye 是一個開源相機板,專為樹莓派5 (Raspberry Pi 5) 和樹莓派計算模塊4 (Raspberry Pi Compute Module 4) 設(shè)計,采用微型
    發(fā)表于 07-30 13:43

    普華基礎(chǔ)軟件榮膺優(yōu)秀開源項目獎

    近日,2025上海開源創(chuàng)新菁英獎評選結(jié)果正式揭曉。普華基礎(chǔ)軟件開源安全車控操作系統(tǒng)小滿EasyXMen憑借在開源技術(shù)創(chuàng)新與產(chǎn)業(yè)應(yīng)用實踐方面的突出表現(xiàn),榮獲“優(yōu)秀
    的頭像 發(fā)表于 07-28 16:48 ?1080次閱讀

    迅龍軟件亮相2025開放原子開源生態(tài)大會,共繪AI+開源智能圖景

    7月23日,2025開放原子開源生態(tài)大會在北京舉行。大會由開放原子開源基金會主辦,以“開源賦能產(chǎn)業(yè),生態(tài)共筑未來”為主題,旨在展示中國開源生態(tài)“創(chuàng)新發(fā)展+開放協(xié)作”的成果,匯聚全球
    的頭像 發(fā)表于 07-25 18:15 ?1395次閱讀
    迅龍<b class='flag-5'>軟件</b>亮相2025開放原子<b class='flag-5'>開源</b>生態(tài)大會,共繪AI+<b class='flag-5'>開源</b>智能圖景

    請問EZ-Serial固件是否使用任何OSS(開源軟件)庫或軟件?

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

    AS32X601驅(qū)動系列教程 GPIO_按鍵檢測詳解

    在嵌入式系統(tǒng)開發(fā)中,GPIO(通用輸入輸出端口)是實現(xiàn)硬件與軟件交互的關(guān)鍵組件。本節(jié)主要利用的時GPIO的輸入采集功能,本節(jié)的主要功能為,讀取板載按鍵,當(dāng)按鍵按下時,對應(yīng)led亮起,抬起按鍵
    的頭像 發(fā)表于 05-23 16:44 ?996次閱讀
    AS32X601驅(qū)動系列教程 GPIO_<b class='flag-5'>按鍵</b>檢測詳解
    怀安县| 盐城市| 临夏市| 新沂市| 永川市| 航空| 竹山县| 泊头市| 衡东县| 宿州市| 二手房| 平南县| 潢川县| 浙江省| 镇坪县| 左权县| 通化市| 礼泉县| 资兴市| 兰考县| 将乐县| 哈尔滨市| 松潘县| 牡丹江市| 乌恰县| 巩留县| 安岳县| 睢宁县| 南和县| 安吉县| 嘉义市| 富顺县| 鄂托克前旗| 沽源县| 隆化县| 民乐县| 新营市| 藁城市| 巴马| 卓资县| 霍林郭勒市|