吴忠躺衫网络科技有限公司

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

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

3天內不再提示

STM32按鍵檢測之短按與長按方法

冬至子 ? 來源:奇遇單片機 ? 作者:奇遇單片機 ? 2023-06-12 11:41 ? 次閱讀

電路設計中,我們經常需要讀取外部的電平信號。比如,在項目中,我們需要通過按鍵來輸入一些數據,那么就需要檢測按鍵是否被按下。電平分為高電平讀取和低電平讀取,讀取高電平,需要設置IO為下拉電阻輸入模式,反之,設置IO為上拉電阻輸入模式。

圖片

S4按下時,單片機IO為高電平,S1-S3按下時,為低電平。我們設置S1為上拉輸入模式,S4為下拉輸入模式。本節使用按鍵實現2個功能:

S1短按一次,LED2點亮,S1再短按一次,LED2熄滅。S1長按,LED1點亮,S1再長按,LED1熄滅。這種方式可以用來實現短按調節菜單,長按保存參數

S4短按一次,LED4點亮,S4再短按一次,LED4熄滅。S4長按且不松手,LED4閃爍。這種方式可以用來實現短按調節數字,長按快速調節數字。在下一節,我們講解數碼管數字顯示時,再來實現數字慢調和快調這個功能。下圖是程序的大概流程思路以及框架:

圖片

關于IO輸入輸出初始化,上一節講過如何配置。這里按鍵設置上拉輸入和下拉輸入,LED設置推挽低速輸出。一般來說,我們會把應用代碼寫在單獨的一個文件里,比如按鍵檢測就是KEY.c,然后其他文件用到的函數和宏定義,可以直接寫在對應的頭文件里KEY.h。在哪個文件里使用,就在該文件里include頭文件即可。每個外設電路都由一組C文件和H文件組成,一般來說,在復雜的項目中,在USER.c文件里調用外設函數編寫用戶程序,在主函數里調用用戶函數即可。下圖就是一個按鍵的頭文件。

圖片

下圖列出了一些按鍵檢測的核心代碼,KEY.c部分代碼:

圖片

ScanKey()函數中的if語句是用來判斷鍵值是否變化的,如果鍵值變化,則執行按鍵處理函數keyDeal();

按鍵鍵值讀取的思路:while語句每循環一次所需時間是已知的,假設是100us,按鍵在被按下的過程中,IO的電平是劇烈變化的,只有完全按下時,IO的電平才會穩定。因此,當檢測到低電平時,開始計數,每100us檢測一次,假設檢測了100次都是低電平,那么就可以確定按鍵真的被按下了。這里千萬別采用長延時,防止程序被堵塞,一直空等待。

有的人是這樣設計的,當檢測到低電平時,就開始延遲100ms,然后再次檢測到低電平,就認為按鍵被按下一次。這種方式是不合理的,在這100ms延時期間,CPU什么也沒干,一直在那空運行,以至于其他程序無法被執行。而我們現在采用的策略是,while循環體里一般會有一些程序要被執行,這些程序執行是需要花時間的,那么循環一次花的時間,乘以循環次數,就可以達到延遲的目的。這樣做,既可以延遲,也不影響其他程序執行。下面列出一些按鍵檢測的核心代碼。

圖片

關于長按,短按,是根據不同的循環次數來區分的。當達到長循環次數時,就認為長按,在鍵值上加上長按標志。如果松手后,循環次數沒有達到長按次數,就認為是短按。如果檢測到長按,就在長按執行代碼里,設置另一個變量,每循環幾次就執行數字遞增或者遞減。這就是長按快速計數的原理。

如果長按用來實現數據保存,那么,就直接在長按執行代碼里設置保存標志位或者直接保存數據。這里KEY4按鍵長按LED閃爍是在按鍵檢測函數里直接執行的,而短按是在鍵值處理函數里執行的。之所以這么做,是因為按鍵長按不松手,鍵值一直不變,按鍵處理函數只會被執行一次,請看前文的ScanKey函數。KEY1長按,短按都是在鍵值處理函數里執行的。

在按鍵處理函數中,首先分離出長按標志位,然后根據鍵值去匹配是哪個按鍵被按下。在鍵值處理代碼段里,根據長按標志位來判斷執行短按操作還是長按操作。

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 上拉電阻
    +關注

    關注

    5

    文章

    363

    瀏覽量

    30734
  • 下拉電阻
    +關注

    關注

    4

    文章

    147

    瀏覽量

    20595
  • led燈
    +關注

    關注

    22

    文章

    1592

    瀏覽量

    108419
  • STM32單片機
    +關注

    關注

    59

    文章

    549

    瀏覽量

    58823
收藏 人收藏

    評論

    相關推薦

    跪求基于verilog的短按鍵長按鍵的程序

    小弟新手,只會短按鍵的程序,跪求基于verilog的短按鍵長按鍵的程序,不勝感激
    發表于 03-18 14:47

    mico按鍵長按短按怎么實現

    mico按鍵長按短按怎么實現?
    發表于 07-31 17:02

    stm32按鍵是如何去實現長按及其短按

    stm32按鍵是如何去實現長按及其短按的?具體實現過程是怎樣的?
    發表于 12-01 08:06

    stm32按鍵長按/短按怎么實現?

    stm32按鍵長按/短按怎么實現?
    發表于 12-02 07:41

    實現單片機按鍵長按短按功能的方法

    寫在前面?一般我們在寫單片機程序的時候都要用到按鍵,在按鍵較少的情況下我們需要一個按鍵可以返回不同的按下結果,也就是長按短按。程序實現?大
    發表于 12-06 07:40

    stm32f103按鍵短按得識別原理是什么

    stm32f103按鍵短按得識別原理需要一個定時器,用來計算按鍵按下的時間,可以一秒鐘檢測100次, 設置初始化為10ms的中斷,比如使用
    發表于 01-06 07:03

    STM32按鍵短按加一次而長按連續加的功能實現

    STM32按鍵短按加一次而長按連續加的功能題目要求思路過程解決過程anjian.c注意anjian.htimer.c注意timer.h題目
    發表于 01-06 07:03

    MCU里按鍵短按長按功能如何實現?

    MCU里按鍵短按長按功能如何實現?
    發表于 02-09 06:54

    STM32按鍵長按短按控制指示燈閃爍

    大佬們,這個怎么寫呀利用狀態機設計思想,編寫按鍵長按短按處理程序,按鍵B1長按則控制指示燈LD2閃爍2次后關閉;
    發表于 10-12 22:05

    按鍵長按短按效果

    按鍵長按短按效果 C51單片機源碼,KEIL源文件,C語言編寫
    發表于 06-20 16:15 ?64次下載

    基于狀態機的單片機按鍵短按長按功能的實現

    本文主要介紹了基于狀態機的單片機按鍵短按長按功能的實現,按鍵的擊鍵過程也是一種狀態的切換,也可以看著是一個狀態機,一個按鍵的擊鍵過程包括:按
    發表于 12-28 08:43 ?2w次閱讀
    基于狀態機的單片機<b class='flag-5'>按鍵</b><b class='flag-5'>短按</b><b class='flag-5'>長按</b>功能的實現

    使用單片機實現按鍵長按短按效果的C語言程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現按鍵長按短按效果的C語言程序免費下載。
    發表于 11-26 17:31 ?56次下載

    瑞薩單片機之外部中斷實現按鍵長按短按(二)

    瑞薩單片機通過外部中斷實現按鍵長按短按
    發表于 11-22 14:21 ?20次下載
    瑞薩單片機之外部中斷實現<b class='flag-5'>按鍵</b>的<b class='flag-5'>長按</b>與<b class='flag-5'>短按</b>(二)

    基于STM32F103C8T6的多按鍵檢測 | 有限狀態機短按長按識別 | 標準庫函數實現方法

    制作航模遙控器需要用到多按鍵檢測,使用有限狀態機實現檢測短按、長按,修正了原文中的一些錯誤
    發表于 11-26 11:21 ?36次下載
    基于<b class='flag-5'>STM32</b>F103C8T6的多<b class='flag-5'>按鍵</b><b class='flag-5'>檢測</b> | 有限狀態機<b class='flag-5'>短按</b>、<b class='flag-5'>長按</b>識別 | 標準庫函數實現<b class='flag-5'>方法</b>

    基于89C51單片機的按鍵長按短按效果源程序

    基于89C51單片機的按鍵長按短按效果源程序
    發表于 05-16 09:45 ?18次下載
    百家乐桌子豪华| 新世百家乐的玩法技巧和规则| 建阳市| 闲和庄百家乐赌场娱乐网规则| 赤壁百家乐官网娱乐城| 博彩赌场| 太阳城巧克力| 嬴澳门百家乐的公式| 钱隆百家乐官网的玩法技巧和规则 | 真人百家乐官网送钱| 清水河县| 大发888设置| 百家乐官网庄闲筹码| 娱乐城在线| 菲利宾太阳城娱乐网| 百家乐打格式| 百家乐玩法皇冠现金网| 皇城百家乐官网娱乐城| 678百家乐官网博彩娱乐平台| 永和县| 赌博游戏| 世界顶级赌场排名| 路劲太阳城金旭园| 财神百家乐的玩法技巧和规则| 360棋牌游戏| 至尊百家乐于波| 红宝石百家乐娱乐城| 超级百家乐2龙虎斗| 百家乐打法分析| 发中发百家乐官网的玩法技巧和规则 | 大都会百家乐的玩法技巧和规则 | 百家乐官网庄闲和收益| 百家乐官网连长| 网上玩百家乐官网好吗| 红原县| 皇家娱乐| 龙博娱乐城| 明升备用网站| 鱼台县| 潢川县| 百家乐官网ipone|