(三)微控制器按鍵檢測

2021-10-10 13:17:56 字數 2019 閱讀 9138

好了,微控制器這個東西呢,無非是輸入和輸出,所以經過前面兩個led燈,實際上微控制器就學完了一半了?,甚至是學完了一大半了,畢竟任何乙個微控制器都不可能沒有輸出,沒有輸出的微控制器是沒有任何意義的,但是可以沒有輸入,比如流水燈,不需要進行任何資訊的輸入,也是可以好好的閃燈的。

今天寫寫另一半,輸入之典型—按鍵。

比較常見的按鍵檢測電路有好幾種設計方法,其中最常見的就是乙個埠加乙個按鍵,如圖1,還有矩陣鍵盤,如圖二。還有一些鍵盤比如利用微控制器的ad功能,可以實現乙個ad腳檢測電壓的功能,接4個甚至8個按鍵,通過按鍵實現不同的阻值導通,達到分壓的效果,實現每個按鍵對應乙個電壓值,達到按鍵區分的效果;還有些微控制器內部整合了觸控按鍵的檢測電路,只需要在微控制器管腳上接上金屬片,當觸控時也能檢測到按鍵。

1. 單按鍵單次按下

#include

"reg52.h"

//定義管腳

sbit key = p2^0;

void

main()

//如果key彈起(0),且上一次狀態是按下(1)

//則執行對應**,並將狀態改為按下(1)

if(key &&

!key_status)

}}

2. 三行**按鍵掃瞄

本來想著這一篇就是寫這個三行**的,寫著寫著它就成了乙個小小節了。

//僅示例**,不保證能用

byte trg;

byte cont;

void

keyread

(void

)

按鍵按下時各變數的變化,尤其需要注意trg變數只變化一次,cont則會保持狀態。

3. 矩陣鍵盤掃瞄

//僅示例**,不保證能用

byte trg;

byte cont;

void

keyread

(void

)byte scankey()

; byte temp, key =

0, i;

for(i =

0; i <

4; i++)}

p2 = val[i]

;return key;

}

由於按鍵屬於一種機械結構(即使是觸控按鍵也沒辦法保證能夠一瞬間保持穩定的電平),那麼在按下(彈起)時就很難直接從高電平降到低電平,而是會經歷一定的抖動逐漸的達到穩定的低電平狀態。還有另外一種情況,即使我們沒有按下按鍵,管腳也可能由於收到外界干擾而產生低電平(當年開發esp8266就出現這種問題,拿螺絲刀敲擊遮蔽殼,就可能會出現外部中斷管腳被觸發的情況,講該管腳換成軟體檢測,並新增去抖程式後解決問題),所以按鍵的去抖是很重要而且很有必要的,那麼去抖我了解到的主要有兩種方式,即硬體去抖和軟體去抖。

1. 軟體去抖

軟體去抖的原理比較簡單,就是當檢測的低電平時,進行時間延時,當經過一定時間(比如20ms)後,再次對該管腳進行檢測,如果仍然是低電平,則可以認為管腳狀態已經穩定了,也就是確定是按下了。好處麼,實現簡單,不花錢。

2. 硬體去抖

硬體去抖的原理是採用了電容的濾波作用,抖動的過程實際就是電平波動的過程,在設計時可以給按鍵併聯乙個104(0.1uf)的電容,經過實際驗證,通過示波器進行檢視時,電平變化基本就是直上直下,沒有抖動電平的出現,好處就是不需要加延時了。

實際上,即使不加電容,如果手比較穩定,抖動也不像想象中的那麼的嚴重,但是不去抖肯定是不行的。而且去抖可以軟硬體相結合,確保萬無一失。

51微控制器 按鍵,鍵盤檢測

但凡做和51微控制器有關的東西,我們組都會用到按鍵.迷之有緣 獨立按鍵的原理很簡單,沒有按鍵按下時,全部為高電平,按下時接觸地變為地電平,檢測是否有低電平來檢測按下動作。矩陣鍵盤稍微複雜一點,分別檢測行,檢測列,以此來確定按鍵位置。注意的是,按下時會有抖動,因為寫程式時,需要消抖。常用的方式是延時函...

微控制器按鍵檢測,狀態機編寫

include include define key1 rb5 define key state 0 0 define key state 1 1 define key state 2 2 int key number 0 unsigned char read key void else key s...

微控制器 按鍵掃瞄

按鍵掃瞄,我想應該是比較簡單的微控制器應用了,但是有時候看起來簡單的東西反而不好寫。本文拿大部分人覺得簡單的按鍵掃瞄聊聊我工作至今對於軟體結構的理解。嗯,對的,是結構,不是架構,暫時不敢提架構這個詞。下面說說我個人對於乙個按鍵檢測的 理解。按鍵檢測需要做什麼事情呢?乙個是按鍵按下的這個物理事件的檢測...