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

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

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

一種按鍵的處理方法方式:MultiButton

Q4MP_gh_c472c21 ? 來源:嵌入式技術開發(fā) ? 作者:嵌入式技術開發(fā) ? 2022-04-28 14:58 ? 次閱讀

今天來分享一種按鍵的處理方法方式:MultiButton。

1.Multi_Button簡介

MultiButton 是Github上的一個開源的按鍵處理組件,作者0x1abin。

GIthub地址:https://github.com/0x1abin/MultiButton

d79ab164-c6a9-11ec-bce3-dac502259ad0.png

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

按鍵支持的事件包括:

d7b39f8a-c6a9-11ec-bce3-dac502259ad0.png

2.Multi_Button的使用

模塊只有兩個文件multi_button.c和multi_button.h,使用時,將.c文件添加到工程中。這里以STM32為例。

2.1.包含頭文件#include“multi_button.h”

2.2.定義按鍵結(jié)構(gòu)體和按鍵ID,這里定義了2個按鍵:

Button button1;Button button2;

#define btn1_id

1#define btn2_id 2

2.3.編寫一個讀取按鍵GPIO電平的函數(shù):

uint8_t read_button_GPIO(uint8_t button_id){

// you can share the GPIO read function with multiple Buttons switch(button_id)

{

case btn1_id:

return HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin);

break;

case btn2_id:

return HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin);

break;

default:

return 0;

break;

}}

2.4.初始化按鍵對象:

button_init(&button1, read_button_GPIO, 0, btn1_id);button_init(&button2, read_button_GPIO, 0, btn2_id);

在button_init函數(shù)中:

第一個參數(shù)為2.2中定義的按鍵結(jié)構(gòu)體指針。

第二個參數(shù)為綁定的2.3中編寫的讀取按鍵GPIO電平的函數(shù)。

第三個參數(shù)為按鍵的有效電平,0代表低電平有效,1代表高電平有效。

第四個參數(shù)為按鍵ID。

2.5.綁定按鍵回調(diào)函數(shù):

button_attach(&button1, PRESS_DOWN,

BTN_PRESS_DOWN_Handler);button_attach(&button1, PRESS_UP,

BTN_PRESS_UP_Handler);button_attach(&button1, PRESS_REPEAT,

BTN_PRESS_REPEAT_Handler);button_attach(&button1,

SINGLE_CLICK,

BTN_SINGLE_Click_Handler);button_attach(&button1,

DOUBLE_CLICK,

BTN_DOUBLE_Click_Handler);button_attach(&button1,

LONG_PRESS_START,

BTN_LONG_PRESS_START_Handler);button_attach(&button1,

LONG_PRESS_HOLD,

BTN_LONG_PRESS_HOLD_Handler);

button_attach(&button2,

PRESS_DOWN,

BTN_PRESS_DOWN_Handler);button_attach(&button2,

PRESS_UP,

BTN_PRESS_UP_Handler);button_attach(&button2,

PRESS_REPEAT,

BTN_PRESS_REPEAT_Handler);button_attach(&button2,

SINGLE_CLICK,

BTN_SINGLE_Click_Handler);button_attach(&button2,

DOUBLE_CLICK,

BTN_DOUBLE_Click_Handler);button_attach(&button2,

LONG_PRESS_START,

BTN_LONG_PRESS_START_Handler);button_attach(&button2,

LONG_PRESS_HOLD,

BTN_LONG_PRESS_HOLD_Handler);

這里綁定了所有的按鍵功能,用戶可根據(jù)實際需求進行刪減。不同的按鍵回調(diào)函數(shù)可以相同,以按鍵按下的回調(diào)函數(shù)為例,函數(shù)如下:

void BTN_PRESS_DOWN_Handler(void* btn){

Button *temp_button = (Button *)btn;

switch(temp_button-》button_id)

{

case btn1_id:

printf(“btn1 press down

”);

break;

case btn2_id:

printf(“btn2 press down

”);

break;

default:

break;

}}

2.6.調(diào)用啟動函數(shù):

button_start(&button1);button_start(&button2);

2.7.最后,需要在一個定時任務中循環(huán)調(diào)用按鍵掃描函數(shù):

void scan_key(){

if(key_tick 《 TICKS_INTERVAL)return;

key_tick = 0;

button_ticks();}

需要注意的是,按鍵的掃描周期、長按、短按、雙擊的時間定義可以在.h文件中修改:

//According to your need to modify the constants.#define TICKS_INTERVAL

10

//ms#define DEBOUNCE_TICKS

3

//MAX 8#define SHORT_TICKS

(300 /TICKS_INTERVAL)#define LONG_TICKS

(1000 /TICKS_INTERVAL)

最后來測試一下效果,按鍵的按下、彈起、單擊、雙擊、長按等都能被檢測到,用起來還是挺方便的。

d7c54028-c6a9-11ec-bce3-dac502259ad0.png

這個開源按鍵模塊的源代碼只有200行左右,有興趣的朋友可以自己研究一下。

測試工程鏈接:

鏈接:https://pan.baidu.com/s/1e33eN0Sbc2Pz8VnNjShjfw

提取碼:ijqz

審核編輯 :李倩

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

    關注

    1

    文章

    108

    瀏覽量

    20115
  • 組件
    +關注

    關注

    1

    文章

    495

    瀏覽量

    17731
  • GitHub
    +關注

    關注

    3

    文章

    461

    瀏覽量

    16235

原文標題:開源按鍵組件Multi_Button的使用,含測試工程

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    rup是一種什么模型

    RUP(Rational Unified Process,統(tǒng)建模語言)是一種軟件開發(fā)過程模型,它是一種迭代和增量的軟件開發(fā)方法。RUP是由Rational Software公司(現(xiàn)為
    的頭像 發(fā)表于 07-09 10:13 ?783次閱讀

    觸摸按鍵的工作原理是什么

    觸摸按鍵技術是現(xiàn)代電子設備中常見的一種交互方式,它允許用戶通過觸摸屏幕上的虛擬按鍵來控制設備的功能。這種技術的發(fā)展和應用已經(jīng)深入到我們生活的方方面面,從智能手機、平板電腦到家用電器等,
    的頭像 發(fā)表于 02-04 14:27 ?5071次閱讀

    請問AD9643BCPZ-250屬于哪一種管腳定義方式?

    從數(shù)據(jù)手冊看,AD9643芯片有兩管腳定義方式, 平行的LVDDS 和 多氧化(日/日/日/日)LVDS 。請問AD9643BCPZ-250屬于哪一種管腳定義方式?
    發(fā)表于 12-06 06:54

    一種產(chǎn)生激光脈沖的新方法

    英國和韓國的科學家提出了一種產(chǎn)生激光脈沖的新方法,其功率是現(xiàn)有激光脈沖的1000多倍。
    的頭像 發(fā)表于 11-20 16:56 ?463次閱讀
    <b class='flag-5'>一種</b>產(chǎn)生激光脈沖的新<b class='flag-5'>方法</b>

    一種具有實用價值的OFDM幀同步方法

    電子發(fā)燒友網(wǎng)站提供《一種具有實用價值的OFDM幀同步方法.pdf》資料免費下載
    發(fā)表于 11-08 15:47 ?0次下載
    <b class='flag-5'>一種</b>具有實用價值的OFDM幀同步<b class='flag-5'>方法</b>

    一種高效、靈巧的多通信信號產(chǎn)生方法

    電子發(fā)燒友網(wǎng)站提供《一種高效、靈巧的多通信信號產(chǎn)生方法.pdf》資料免費下載
    發(fā)表于 11-07 09:54 ?0次下載
    <b class='flag-5'>一種</b>高效、靈巧的多通信信號產(chǎn)生<b class='flag-5'>方法</b>

    按鍵消抖都有哪些處理方式?

    按鍵消抖都有哪些處理方式除了硬件消抖電路用軟件怎么實現(xiàn)
    發(fā)表于 11-01 07:06

    一種基于PPM調(diào)制解調(diào)的改進方法

    電子發(fā)燒友網(wǎng)站提供《一種基于PPM調(diào)制解調(diào)的改進方法.pdf》資料免費下載
    發(fā)表于 10-26 11:15 ?0次下載
    <b class='flag-5'>一種</b>基于PPM調(diào)制解調(diào)的改進<b class='flag-5'>方法</b>

    個應用于單片機的按鍵處理模塊!

    個應用于單片機的按鍵處理模塊!
    的頭像 發(fā)表于 10-24 16:28 ?586次閱讀
    <b class='flag-5'>一</b>個應用于單片機的<b class='flag-5'>按鍵</b><b class='flag-5'>處理</b>模塊!

    一種OQPSK信號的調(diào)制方法

    電子發(fā)燒友網(wǎng)站提供《一種OQPSK信號的調(diào)制方法.pdf》資料免費下載
    發(fā)表于 10-23 11:25 ?0次下載
    <b class='flag-5'>一種</b>OQPSK信號的調(diào)制<b class='flag-5'>方法</b>

    一種小型專用鍵盤的設計方法

    電子發(fā)燒友網(wǎng)站提供《一種小型專用鍵盤的設計方法.pdf》資料免費下載
    發(fā)表于 10-20 11:35 ?0次下載
    <b class='flag-5'>一種</b>小型專用鍵盤的設計<b class='flag-5'>方法</b>

    一種實現(xiàn)占位傳感器的方法

    電子發(fā)燒友網(wǎng)站提供《一種實現(xiàn)占位傳感器的方法.pdf》資料免費下載
    發(fā)表于 10-20 08:34 ?0次下載
    <b class='flag-5'>一種</b>實現(xiàn)占位傳感器的<b class='flag-5'>方法</b>

    一種可用于單片機的中斷高效處理與事件機制方法

    一種可用于單片機的中斷高效處理與事件機制方法
    的頭像 發(fā)表于 10-17 15:08 ?627次閱讀

    一種心電信號處理系統(tǒng)設計

    電子發(fā)燒友網(wǎng)站提供《一種心電信號處理系統(tǒng)設計.pdf》資料免費下載
    發(fā)表于 10-11 09:16 ?2次下載
    <b class='flag-5'>一種</b>心電信號<b class='flag-5'>處理</b>系統(tǒng)設計

    一種簡便的PLC通訊方式控制變頻器的方法

    本文介紹一種非常簡便的三菱FX系列PLC通訊方式控制變頻器的方法:它只需在PLC主機上安裝塊RS-485通訊板或掛接塊RS-485通訊模
    發(fā)表于 10-04 15:46 ?810次閱讀
    <b class='flag-5'>一種</b>簡便的PLC通訊<b class='flag-5'>方式</b>控制變頻器的<b class='flag-5'>方法</b>