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

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

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

一個按鍵的多次擊鍵組合應(yīng)該如何判別詳細(xì)技巧程序概述

Wildesbeast ? 來源:未知 ? 作者:佚名 ? 2019-11-09 10:45 ? 次閱讀

有時在設(shè)計中,往往要用一個按鍵來輸入多種信息。如:單擊/雙擊/三擊、短擊/長擊、還有各種組合擊鍵方式??梢杂靡韵鲁绦騺碜觥?/p>

如果按鍵閉合時間《500MS,判斷為一次短擊(0);

如果按鍵閉合時間》500MS,判斷為一次長擊(1);

兩次擊鍵時間間隔應(yīng)《700MS,如果按鍵釋放后700MS內(nèi)無鍵按下,則結(jié)束讀鍵。

讀鍵完畢返回一個鍵號值KEY_NUM。其意義如下:

KEY_NUM 意義

00000000 無鍵按下過

00000001 無意義

00000010 單次短擊

00000011 單次長擊

00000100 短擊 + 短擊

00000101 短擊 + 長擊

00000110 長擊 + 短擊

00000111 長擊 + 長擊

…… ……

10000000 7次短擊

11111111 7次長擊

上表中的KEY_NUM值的規(guī)律是,從左向右看,第一個“1”后面的每一位代表一次擊鍵;“0”代表短擊,“1”代表長擊。掌握該規(guī)律后,我們可將任何一個8位的二進(jìn)制數(shù)“翻譯”成一種擊鍵組合。例如:01010101,代表的是:短+長+短+長+短+長。

該程序最多可識別7次連續(xù)擊鍵,共254種組合。但并非每個程序中用得上。在大多數(shù)程序中,能判斷雙擊即可以了,這時可將程序中的ZHBIT定義為2。同理,如果要判斷3次按鍵,將ZHBIT定義為3即可。

當(dāng)ZHBIT=“1”時,程序僅能判斷一次擊鍵,包括2種組合(短擊/長擊);當(dāng)ZHBIT=“2”時,程序還能判斷兩次擊鍵,包括6(2+4)種組合(短擊/長擊/(短+短)/(短+長)/(長+短)/(長+長));以次類推,當(dāng)ZHBIT=“3”時,程序能判斷三次擊鍵,包括14(2+4+8)種組合。

ZHBIT 組合種類

1 2

2 2+4=6

3 2+4+8=14

4 2+4+8+16=30

5 2+4+8+16+32=62

6 2+4+8+16+32+64=126

7 2+4+8+16+32+64+128=254

下面這段程序摘自小匠的一個智能充電器程序(MCU是EM78P458),如下:

;********************************

;讀鍵子程序

;出口: KEY_NUM =鍵號值

;中間: KEY_DL =計數(shù)器

;說明:

/*

短擊:鍵按下時間《500MS

長擊:鍵按下時間》500MS

兩次按鍵間隔時間《700MS

鍵號定義:

KEY_NUM=“00000000”: 無鍵按下

KEY_NUM=“00000001”: 無意義

KEY_NUM=“00000010”: 單次短擊

KEY_NUM=“00000011”: 單次長擊

KEY_NUM=“00000100”: 短擊 + 短擊

KEY_NUM=“00000101”: 短擊 + 長擊

KEY_NUM=“00000110”: 長擊 + 短擊

KEY_NUM=“00000111”: 長擊 + 長擊

。..

。..

KEY_NUM=“11111110”: 長擊 + 長擊 + 長擊 + 長擊 + 長擊 + 長擊 + 短擊

KEY_NUM=“11111111”: 長擊 + 長擊 + 長擊 + 長擊 + 長擊 + 長擊 + 長擊

*/

ZHBIT EQU 2 ;按鍵組合位(選擇范圍1~7)

;********************************

READKEY:

CLR KEY_NUM ;清鍵號

JKOFF READKEYF ;鍵未按下跳

BS KEY_NUM,0 ;“1” -》 鍵號低位

;=================

READKEYA:

CLR KEY_DL ;清計數(shù)器

READKEYB:

CALL DL10MS

INC KEY_DL

MOV A,@50

SUB A,KEY_DL

JBC R3,C

JMP READKEYC ;計數(shù)器溢出跳

JKON READKEYB ;鍵未釋放跳

BC R3,C ;C=“0”

JMP READKEYD

;=================

READKEYC:

WDTC ;喂狗

JKON READKEYC ;鍵未釋放跳

BS R3,C ;C=“1”

READKEYD:

RLLC KEY_NUM ;鍵號左移一位,C -》 鍵號低位

JBC KEY_NUM,ZHBIT ;按鍵檢測未完成繼續(xù)

RET

;=================

CLR KEY_DL ;清計數(shù)器

READKEYE:

CALL DL10MS

INC KEY_DL

MOV A,@70

SUB A,KEY_DL

JBC R3,C

READKEYF:

RET ;計數(shù)器溢出返回

JKOFF READKEYE ;鍵未按下跳

JMP READKEYA ;再次檢測

;=================

;鍵閉合跳(宏)

;=================

JKON MACRO ADDRESS

JBS R5,KEY ;鍵斷開跳

FJMP ADDRESS ;鍵閉合跳

CALL DL10MS ;延時去抖動

JBS R5,KEY ;鍵斷開跳

FJMP ADDRESS ;鍵閉合跳

ENDM

;=================

;鍵斷開跳(宏)

;=================

JKOFF MACRO ADDRESS

JBC R5,KEY ;鍵閉合跳

FJMP ADDRESS ;鍵斷開跳

CALL DL10MS ;延時去抖動

JBC R5,KEY ;鍵閉合跳

FJMP ADDRESS ;鍵斷開跳

ENDM
責(zé)任編輯 LK

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

    關(guān)注

    117

    文章

    3790

    瀏覽量

    81149
  • 按鍵
    +關(guān)注

    關(guān)注

    4

    文章

    223

    瀏覽量

    57616
收藏 人收藏

    評論

    相關(guān)推薦

    按鍵學(xué)習(xí) 按鍵漫談+單個按鍵多次擊鍵的檢測方法

    非常好的按鍵學(xué)習(xí)資料,在此共享,為了照顧沒E幣的人,不浪費你們的E幣,我打包起來了。三文件:按鍵漫談.pdf+單個按鍵多次
    發(fā)表于 06-24 22:47

    單個按鍵多次擊鍵的檢測方法

    單個按鍵多次擊鍵的檢測方法
    發(fā)表于 08-19 23:33

    按鍵高級使用:短按、長按、連續(xù)、雙擊、組合鍵實現(xiàn)

    /zhang_en/beauty_key.git視頻地址:【開源的按鍵處理程序-可以實現(xiàn)短按、長按、雙擊、組合】 https://www
    發(fā)表于 10-24 21:35

    如何為單片機(jī)的按鍵鎖防止多次觸發(fā)?

    如何為單片機(jī)的按鍵鎖防止多次觸發(fā)
    發(fā)表于 10-30 08:21

    按鍵多次擊鍵組合判別技巧匯編程序

    由于在學(xué)習(xí)用DS1302來做LED時鐘時,發(fā)現(xiàn)開發(fā)板附的程序按鍵操作,很不靈活,后來在網(wǎng)上找到篇《
    發(fā)表于 06-08 15:00 ?2767次閱讀

    基于狀態(tài)機(jī)的單片機(jī)按鍵短按長按功能的實現(xiàn)

    本文主要介紹了基于狀態(tài)機(jī)的單片機(jī)按鍵短按長按功能的實現(xiàn),按鍵擊鍵過程也是種狀態(tài)的切換,也可以看著是
    發(fā)表于 12-28 08:43 ?2w次閱讀
    基于狀態(tài)機(jī)的單片機(jī)<b class='flag-5'>按鍵</b>短按長按功能的實現(xiàn)

    PID程序算法的詳細(xì)資料概述免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是PID程序算法的詳細(xì)資料概述免費下載
    發(fā)表于 07-24 08:00 ?36次下載

    用兩IO口檢測5按鍵程序詳細(xì)資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是用兩IO口檢測5按鍵程序詳細(xì)資料免費下載。
    發(fā)表于 03-29 15:16 ?26次下載
    用兩<b class='flag-5'>個</b>IO口檢測5<b class='flag-5'>個</b><b class='flag-5'>按鍵</b>的<b class='flag-5'>程序</b><b class='flag-5'>詳細(xì)</b>資料免費下載

    如何為單片機(jī)的按鍵鎖防止多次觸發(fā)實例資料和程序免費下載

    儲存著兩樣信息,力度和鍵值。那么在我寫的程序的項目要求是這樣的,要求每個按鍵次只能觸發(fā)次,并且觸發(fā)的時候要發(fā)出不同的鍵碼,通過音頻解碼盒將該鍵碼值讀出來,比如第
    發(fā)表于 08-14 17:32 ?0次下載
    如何為單片機(jī)的<b class='flag-5'>按鍵</b>加<b class='flag-5'>一</b><b class='flag-5'>個</b>鎖防止<b class='flag-5'>多次</b>觸發(fā)實例資料和<b class='flag-5'>程序</b>免費下載

    應(yīng)該如何學(xué)習(xí)STM32資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是教你應(yīng)該如何學(xué)習(xí)STM32資料概述
    發(fā)表于 11-08 14:45 ?26次下載
    <b class='flag-5'>應(yīng)該</b>如何學(xué)習(xí)STM32資料<b class='flag-5'>概述</b>

    單片機(jī)C程序設(shè)計的六實例詳細(xì)講解

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)C程序設(shè)計的5實例詳細(xì)講解包括了:按鍵程序編寫的基礎(chǔ),模塊化
    發(fā)表于 11-18 08:00 ?1次下載
    單片機(jī)C<b class='flag-5'>程序</b>設(shè)計的六<b class='flag-5'>個</b>實例<b class='flag-5'>詳細(xì)</b>講解

    STM32 獨立按鍵掃描功能大全-支持連擊、組合連擊、任意連擊

    STM32 獨立按鍵掃描功能大全-支持連擊、組合連擊、任意連擊本人剛學(xué)習(xí)STM32開發(fā),最近看了硬漢的按鍵檢測程序,進(jìn)行了架構(gòu)的深度優(yōu)化,所以跟大家分享
    發(fā)表于 12-04 20:36 ?58次下載
    STM32 獨立<b class='flag-5'>按鍵</b>掃描功能大全-支持連擊、<b class='flag-5'>組合</b>連擊、任意連擊

    RT-Thread大會:如何實現(xiàn)4按鍵的手勢組合

    我有基于電極的非觸摸程序,如何實現(xiàn)4按鍵的手勢組合?   通過4路波形判斷手勢   即
    的頭像 發(fā)表于 05-27 11:01 ?1162次閱讀
    RT-Thread大會:如何實現(xiàn)4<b class='flag-5'>個</b><b class='flag-5'>按鍵</b>的手勢<b class='flag-5'>組合</b>?

    stm32單片機(jī)如何實現(xiàn)按鍵切換兩程序?

    ,非常實用。下面,我們將詳細(xì)介紹如何在STM32單片機(jī)上實現(xiàn)按鍵切換兩程序。
    的頭像 發(fā)表于 09-14 14:22 ?6195次閱讀

    idea如何多次運(yùn)行程序

    些實際的示例。 內(nèi)容: 、使用循環(huán)結(jié)構(gòu) 1.1 for循環(huán) 最常用的多次運(yùn)行程序的方法之是使用循環(huán)結(jié)構(gòu)。其中最常用的循環(huán)結(jié)構(gòu)是for
    的頭像 發(fā)表于 12-06 14:59 ?1527次閱讀