通過lcd1602顯示,有兩個界面,可以用四位的獨立鍵盤進行調位、加減、切換界面。
按鍵
一、實驗目的
二、按鍵原理圖
三、相關操作函數
四、關于消抖
五、按鍵控制實現程序
六、HAL庫的按鍵實現
七、一些思考與問題
- 在流水燈實現中,我們通過對GPIO與LED燈相連的相應引腳輸出高低電平來控制燈的亮滅。使用的是輸出模式。
- 今天的實驗學習要使用GPIO口的輸入模式,通過對與按鍵相連的引腳數據的讀取來控制燈的亮滅。
- 了解什么是按鍵抖動和軟件消抖的方法。
- 在圖中我們看到,KEY1鍵和KEY2、3、4鍵有些不同。KEY1鍵按下輸出為高電平,而其他三個鍵按下左接地輸出低電平。
- 同時可以看出KEY1接GPIOA的0號引腳,KEY2、3、4分別接GPIOE的1、2、3號引腳。
 - 除了我們在流水燈中講到的時鐘使能函數,幾個GPIO控制函數外,僅需要用到另外一個GPIO控制函數,函數定義如下圖。(同樣是在上章提到的固件庫中)。
- 該函數是讀入引腳信號的,既可以用于讀按鍵信號
- 當然,除了按位讀取,也可以多位讀取,相關的函數有興趣可自己查閱固件庫。
機械的按鍵結構中必然有彈簧,由于彈簧的彈性,按鍵按下或松開的短暫過程中不會立即改變電平狀態,而是需要一定的接觸、不充分接觸、斷開導致的電平變化過程,一定時間后才能穩定電位,稱之為抖動。 - 抖動會影響按鍵狀態的讀取,需要通過消除抖動來達到確定按鍵狀態,方法有硬件消抖和軟件消抖。本實驗板不具備硬件消抖,既必須通過軟件進行消抖。
- 軟件消抖有什么方法呢?
- 通過中斷,定時讀取引腳狀態,確定時限內連續幾次讀入狀態一致,則可確定其進入抖動后的穩定狀態,則可開始下一步操作。但目前我們未學習使用STM32的中斷控制,所以不采用這種方法。
- 第二種方法是延時。在第一次讀到某種狀態后,通過延時函數使CPU合適的時間的無意義操作后,再次讀取狀態,若兩次狀態,則可以認為進入穩定裝入,則可開始下一步操作。
按鍵控制實現程序
六、HAL庫的按鍵實現 - 同樣是像流水燈中介紹的方式創建工程,設置時鐘,設置燈的引腳狀態。但多了對按鍵引腳的設置。找到PA0和PE1設置為輸出推挽不上不下拉低速模式。其他步驟流水燈工程創建一致。
接下來我們看具體的程序。
這兩個庫的程序在判斷按鍵狀態的時候是并行判斷,準確來說是一個先一個后的if判斷,并沒有討論同時按下兩個鍵如何判斷和操作原則。雖然這種if并行判斷可以處理一些同時按下的情況,但不能對應到所有的情況。那么,可以思考下,如何實現雙鍵按下的判斷?
完整的Word格式文檔51黑下載地址:
按鍵.docx
(1.05 MB, 下載次數: 34)
2019-3-8 19:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
流水燈.docx
(4.7 MB, 下載次數: 20)
2019-3-8 19:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|