能否說明獨立式鍵盤的特點及適用場合,是如何用軟件法消除按鍵的?

古古怪怪嘎嘎嘎豐富


特點

獨立鍵盤的特點是廉價、簡單,幾乎可以應用在所有需要控制的場景中。

只要按下去會返回的幾乎都是獨立式鍵盤,最明顯的就是iphone的Home鍵了,在你按下去之後,它的鍵盤還會回到最初始的狀態,這就是獨立式鍵盤。

除此之外,我們的電腦鍵盤、遙控鍵盤這些也是獨立鍵盤。

但是這種鍵盤不是獨立鍵盤,比如iPhone的靜音鍵,它有兩種狀態,分別是靜音和非靜音狀態,且不能自己恢復。

電路符號

獨立鍵盤和非獨立鍵盤的電路符號如下:

獨立按鍵的好處是可以反覆的施加同一個信號,比如手機的音量鍵,我們按下去一次,音量增加一點,以此往復。

總之獨立按鍵可以做很多非獨立按鍵不能做的事情。

軟件消抖

什麼是軟件消抖?

我們先看一下獨立按鍵的應用場景

當按鍵未按下的時候,單片機檢測到的是5V電平;

當按鍵按下時,單片機檢測到的是0V;

但是呢,真是的按鍵按下的時候不是這樣的。

我們可以看一下按鍵在按下的這一瞬間電位的波形。

從波形可以看出,按鍵並不是按下之後立馬變為0V,而是有一個抖動的過程。

如果單片機直接檢測,可能會亂動作,這時候應該給單片機加一個延時,比如說在第一次檢測到按鍵按下之後,延時30ms,然後再檢測一次,如果此時檢測到的還是按下的狀態,則說明按鍵被按下。

至於這個延時是多少,還得具體按鍵具體分析,如果是做產品要用到軟件消抖,一定要拿示波器測試一下抖動的波形,看看抖動的時間到底是多少!


愛上半導體


朋友們好,我是電子及工控技術,我來回答這個問題。鍵盤作為一種輸入設備,它是人機交換的重要入口。通過鍵盤的機械按鍵的斷開與閉合可以向單片機輸入各種命令和數據,這些機械按鍵可以組成互相獨立互不干涉的按鍵我們叫它獨立按鍵、還有的按鍵是相互關聯的,我們叫它矩陣按鍵。下面我們根據題目的要求和朋友們聊聊獨立按鍵的這些問題。

獨立按鍵

1、獨立按鍵的結構與工作過程

獨立按鍵從原理圖中可以看出它們的按鍵一端都是與GND接地的,按鍵的另一端呢?它是與單片機的I/O口連接。若用手按下按鍵時相對應的I/O口就會被接地端的按鍵拉成低電平(0V),如果手鬆開時獨立按鍵所對應的I/O口就會被上拉電阻提升到高電平。就這樣單片機通過程序指令實時檢測所對應獨立按鍵I/O口的高低電平情況就可以判斷出每個I/O口是否被按下了。

第一步是先判斷是不是有按鍵被按下,上面講了通過檢測高低電平就可以判斷出有沒有按鍵按下。

第二步是要對按鍵的抖動進行處理,因為我們常用的按鍵都是機械式的微動按鍵,在用手按下或鬆開的瞬間由於按鍵的機械結構原因會有大約15毫秒左右的抖動,這樣就會在電平的下降沿和上升沿就會出現一系列的抖動波形,這樣會對單片機產生誤操作,必須要採取消抖動的方法。具體如何操作下面與朋友們分享。

第三步是抖動消除完成後需要再一次判定按鍵的動作是不是真的被按下,如果這時單片機還是檢測到是低電平說明按鍵確實被按下了,然後就該確定是哪個按鍵被按下了,這時我們就可以給按鍵通過程序起個“名字”(鍵碼),然後就可以去執行相應的任務了。

第四步是要回覆按鍵的初始狀態,也就是說要判斷按鍵是不是被鬆開了,因為我們不能一直按著按鍵不動,需要把手解放出來。最後再把我們所接的按鍵I/O口恢復到初始的高電平狀態。就這樣按照這四個方法按鍵就可以穩定地去“發號施令”了。

2、獨立按鍵的特點

獨立按鍵的特點可以從原理圖中看出它們各個按鍵彼此都是獨立的,每個按鍵輸入線的輸入電平變化不會相互之間受到受影響的。每一個按鍵要佔用一個獨立的I/O口,這種按鍵所佔用單片的端口資源比較多,使用較多按鍵時會佔用較多的單片機端口,一般需要在按鍵較少的場合用比較合適。

另一個方面,從整個獨立按鍵的組成看它們的結構是很簡單的,在編寫程序時比較容易編寫按鍵的輸入程序,因此這種獨立按鍵配置靈活、結構簡單、操作程序很容易實現。

用軟件防按鍵抖動處理的方法


軟件的抖動前面我們已經做了簡單的介紹,在這裡我與朋友們分享一下如何對按鍵進行防抖動的處理。在按鍵消抖動的問題上我們一般採用兩種方法,一種是軟件的消抖動的方法另一種是硬件消抖動的方法。

1、用短暫延時法去消抖動的方法

軟件消抖動主要是通過編寫程序,通過一定的“算法”來實現。由於這種算法比較多,下面我就介紹兩種供朋友們參考一下。第一種就是“入門級”的方法,對於剛學單片機的朋友們較常用的。我們暫且稱為“短暫延時法”,其工作過程就是在第一次檢測到有按鍵按下時,我們用一個延時15毫秒左右的子程序把這個前沿抖動的不確定的電平直接“屏蔽”掉,然後再一次確認該電平的狀態,如果檢測到按鍵還是閉合的狀態說明按鍵確實按下了,就去執行相應的命令就行了,如果按鍵不是閉合說明是因為干擾造成的,單片機就無響應。

2、按鍵連續掃描判斷法

第二種方法是我在學單片機時單片機老師給介紹的一種,今天借這個機會給朋友們分享一下,首先在編寫程序時我們要用單片機裡面的一個定時器作為每2ms產生一次中斷並掃描一次按鍵電平狀態存儲起來,就這樣連續檢測 8 次後看看這連續 8 次的按鍵狀態是不是一樣的。 檢測8 次按鍵的時間大約在 16ms,如果在 16ms 內按鍵都是一樣的電平就說明按鍵處於了穩定的狀態。就這樣每經過 2ms 左移一次,每移動一次就判斷當前連續的 8 次按鍵狀態是不是全為高電平(1) 或者全為低電平(0) ,如果是全為高電平(1)則說明是按鍵彈起了,如果低電平(0)的話則說明按鍵時處於按下的狀態,如果既有高電平(1) 也有低電平(0)就說明按鍵是處於抖動的時間,不做任何判定。

利用這種軟件的方法可以避免通過延時消抖佔用單片機執行時間,提過了單片機執行程序的效率,如果有傳感器需要採樣的話更能突出這個軟件防抖動的優勢,現在我編寫按鍵防抖動一般都採用這種方法。

用硬件防按鍵抖動處理的方法

用硬件防按鍵抖動的方法不是很常見,但是在有的單片機控制場合也會用到。它一也般採用兩種方法,一種是採用雙穩態消抖動電路,另一種是用濾波消抖動電路。前者主要是用兩個與非門構成一個RS觸發器來實現的,後者是用RC積分電路具有吸收干擾脈衝的功能來實現的。

這種電路的原理是根據電容兩端的電壓不能突變來實現的,就是說當按鍵按下時只要電容C兩端的電平的波動不超過非門的開啟電壓(0.8V),那麼門電路的輸出就不會變化,只要選擇好適當的電容和電阻就可以比較理想地防護按鍵的抖動了。

矩陣按鍵

以上我們都是說的獨立按鍵,但是在相當一部分單片機控制電路里由於I/O口的數量限制,當需要較多的按鍵輸入口時都採用了矩陣的按鍵模式。

如下圖原理圖所示的那樣,如果 KeyOut1 輸出一 個低電平(0),那麼就相當於KeyOut1是 接地的,這就類似 四個獨立按鍵。此時就必須把 KeyOut2、 KeyOut3、KeyOut4 都置為高電平輸出才行,只有這樣才能保證與它們相連的三路按鍵 不會對這一路產生干擾。

這種矩陣電路可以佔用較少的I/O口,對於使用按鍵較多的單片機控制電路中用這種按鍵方式比較好。以上就是我對這個問題的解答。歡迎朋友們參與討論,敬請關注電子及工控技術,感謝點贊。


電子及工控技術


單片機系統當中,最常用的外設和人機輸入就是按鍵,按鍵常分為獨立按鍵,矩陣按鍵,AD按鍵等。


什麼是獨立按鍵以及特點

一個按鍵獨立佔用一個單片機端口,完成高低電平的變化,從而實現各種按鍵的邏輯判斷。

獨立按鍵的特點,區別於AD按鍵和矩陣鍵盤,獨立按鍵的邏輯判斷簡單,硬件設計簡單,主要是佔用單片機的端口資源。

獨立按鍵的應用場景, 一般來說在按鍵個數較少,或者按鍵有多重功能複用時,考慮使用獨立按鍵。

按鍵的消抖方式

為什麼需要消抖,這是因為在按鍵按下時候,會形成一個簡短機械的反覆電平抖動,而這種電平的抖動會容易造成誤判干擾,所以必須避開,一般有兩鍾方法。

硬件消抖,在按鍵並聯電容,利用電容對快速變化的電平有濾波作用而消抖。這種方式其實很少用。

軟件消抖,在單片機判斷時,在按鍵按下的這個過程中,軟件避開抖動電平的區間。一般按鍵都是使用軟件消毒消抖。

獨立按鍵實現長按,短按,連按的實現思路和方法

在很多的初級教學視頻當中,常見使用delay函數延時10到 20ms避開抖動,其實這種方式有很大缺陷,不適合批量產品。

原因:單片機執行程序的時候,是使用順序執行,使用delay消抖,佔用了單片機資源,沒辦法處理其他的任務。也沒辦法複用按鍵,對連按,短按,長按,按下起反應,按後起反應進行區分與處理。

按鍵的思路:

1需要一個能夠計時的設備,計算你需要延時消抖的時間時長,這個部分就需要使用定時器。

2,每次按鍵按下,電平變化,定時器計數變量開始計數,等到時間,按鍵依舊有效,則觸發,如果中途按鍵電平變化,則計數變量清零,一般這個時間設置為10ms即可。

3,當鬆開按鍵,電平回覆成正常時,則清除計數變量的值。如下圖所示,則是對按鍵的 按鍵鬆開起反應的代碼說明,按鍵鬆開後,按鍵狀態位值1。

我是科技電小二,一名嵌入式開發工程師,如果您覺得這篇文章對您有所幫助,那麼點個贊,並加個關注吧。

科技電小二


機械按鍵應該十分廣泛,去抖是必須的流程

輕觸開關在電子產品中的應用是極為廣泛的,雖然觸摸感應技術已經非常成熟,有著防水、防塵、壽命長的優勢,但機械的開關也有著它的優點,機械式的按鍵手感更好,不易誤觸發。

輕觸開關原理

輕觸開關內部有一個窩仔狀的金屬片,俗稱為窩仔片。當用力按下時,窩仔片中心就會與底下的金屬觸點導通。失去作用力後,窩仔片恢復原狀,觸點斷開。

輕觸開關按下和釋放的瞬間會出現抖動,特別是按下瞬間,會出現多次連續的、快速的導通和斷開的過程,所以剛按下瞬間的導通是不可靠的,如果把這些瞬間導通都當作輸入,就會出現誤操作。

軟件去抖原理

讀取按鍵輸入時,需要把導通瞬間的抖動去除,才可以獲取到可靠的按鍵輸入。最簡單的去抖方法就是延時。比如檢測到按鍵按下時,我們可以延時大約10~50ms(根據按鍵的特性),再次讀取按鍵的狀態,如果還是按下狀態,就可以認為是可靠的輸入了。

延時去抖是最簡單的方法了,但延時過程直接佔用MCU的資源,不能運行其它程序,如果其它任務時間要求較高的話,可以想一下其它方法。

程序循環去抖法:第一次檢測到按鍵按下時,只設置一個標誌位,程序再次(或者多次)循環回來時,再讀取按鍵狀態,如果還是處於按下狀態才認為是可靠的輸入,否則清除標誌位。

定時去抖法:第一次檢測到按鍵按下時,打開一個計時器進行計時,計時器到達20ms後,再讀取按鍵狀態,如果還是處於按下狀態才認為是可靠的輸入。

還可以給按鍵並聯一個小電容,在硬件上進行去抖,但軟件去抖還是必不可少的。

歡迎關注@電子產品設計方案,一起享受分享與學習的樂趣!關注我,成為朋友,一起交流一起學習

  • 記得點贊和評論哦!非常感謝!


分享到:


相關文章: