按鍵板的原理和實現 基於GPIO的按鍵板

2022-06-30 20:00:15 字數 1962 閱讀 8391

上篇介紹簡單的adc實現,需要ic提供乙個額外的adc。但出於ic成本的考慮,無法提供這個的adc時,但提供了多個額外的gpio(general purpose input output:雙向的:可以為輸入/輸出,只有兩個狀態high/low),就可以使用本篇的實現方法了。

基於gpio的按鍵板

嵌入式開發中,gpio是最常用的控制介面,普通gpio只具有high/low兩個狀態,我們可以對其進行read/write操作。

1:足夠多的gpio供使用

則每個按鍵對應乙個gpio口,電路設計可以保證:無按鍵動作gpio口為low,有按鍵動作gpio口為high,或者相反。軟體設計只需要逐個掃瞄每個gpio口的狀態,就可以知道某個按鍵是否有動作。

2:有限的gpio供使用:使用矩陣掃瞄按鍵方式是最常見的方案。

其原理如下:任意兩個gpio之間連線乙個按鍵,比如gpio_1 & gpio_2,其預設狀態為low,按鍵按下的話,兩者就連通了,這就意味著,我們可以先給gpio_1乙個high訊號,接著去讀取goio_2,如果得到high,則這個按鍵被按下了,否則就是沒有按鍵動作。

數學告訴我們,基於這種方案的n個gpio口,最多可以實現n*(n-1)/2個按鍵,也就是n的組合數。如下圖:4個gpio(a/b/c/d)實現6(key_1…key_6)個按鍵的原理圖

變成也是比較簡單了,給個c**如下:

這裡通過適當的流程設計,可以使得**緊湊有序。在按鍵比較少的情況下,乙個挨著乙個的去讀寫的方法也不錯,但在較多按鍵的時候,上面**的流程設計就比較具有優勢了。能夠在1分鐘內,看明白為什麼使用 i*k+k-1 作為返回索引,我相信你的邏輯能力很ok。

3:進一步擴充套件---2個gpio實現6個按鍵

這種實現方法實際上就是利用了二極體的單嚮導通特性,使得我們可以區分更多的按鍵,分析如下:

1:write gpio_1=1 & gpio_2=1,接著read if gpio_1==0 & gpio_2==0,則為 key_3;

if gpio_1==0 & gpio_2==1,則為 key_1;

if gpio_1==1 & gpio_2==0,則為 key_2;

2:write gpio_1=0 & gpio_2=1, 接著read  if gpio_2==0,則為 key_4 or key_6;

需要進一步判斷:write gpio_1=1 & gpio_2=0 然後read:if gpio_1==0 則為 key_4;

if gpio_1==1 則為 key_6;

3:反序執行步驟2,可以區分出 key4 & key5。

明白了原理,軟體程式設計實現就比較簡單了,給出乙個實現如下:

在這個程式設計實現裡,在寫操作之後,可能需要適當的delay以使得其狀態穩定;若是基於匯流排的嵌入式系統,也需要在函式退出前釋放匯流排。

3:總結與討論

基於矩陣掃瞄方式的按鍵板實現,是很最常用的。在gpio口比較緊缺的情況下,可以通過在電路中適當增加幾個二極體來解決。如果這樣還不能解決,就必須設法擴充套件gpio了,稍後討論。

下面給出了乙個很不錯的 矩陣掃瞄+二極體擴充套件 的電路圖,你能為它寫乙個驅動嗎?相當具有挑戰性哦,試試看吧……

按鍵板的原理與實現 系列3 擴充套件GPIO

在系統可用的gpio口數量有限的情況下實現按鍵板的另乙個選擇就是 擴充套件gpio口。擴充套件gpio的方法有很多,市場上已經有很多種類的gpio口擴充套件器件,但是從成本上考慮,但它們總是顯得昂貴。對於按鍵板的實現,使用基於乙個移位暫存器的方法,因其低成本 方便穩定性而被廣泛使用,這裡我們將討論乙...

按鍵板的原理與實現 ADC

在嵌入式系統產品開發中,按鍵板的設計是最基本的,也是專案評估階段必須要考慮的問題。其實現方式又很多種,具體使用那一種就需要結合特定ic的可用io數量,並綜合考慮成本,做出最終選擇。本系列文章將介紹多種不同按鍵板的原理與實現。使用adc實現按鍵板 這是最簡單的實現方式,它需要系統ic提供乙個內部adc...

按鍵板的原理與實現 系列1 ADC

在嵌入式系統產品開發中,按鍵板的設計是最基本的,也是專案評估階段必須要考慮的問題。其實現方式又很多種,具體使用那一種就需要結合特定ic的可用io數量,並綜合考慮成本,做出最終選擇。本系列文章將介紹多種不同按鍵板的原理與實現。這是最簡單的實現方式,它需要系統ic提供乙個內部adc。如果ic不能提供出額...