-
1 # Karsa295
-
2 # 中級科技分子steop
微控制器的獨立按鍵用於一端接地,另一端與I/O引腳相連。按鍵按下為低電平,未按下為高電平。與矩陣鍵盤相比,使用獨立按鍵可以使微控制器程式設計更加簡單,但是浪費I/O口,畢竟微控制器的I/O口是有限的。同時每個按鍵單獨佔用一個I/O口線,每個按鍵的工作不會影響其他I/O口線的狀態。同時,當只需要幾個按鍵的情況,採用獨立按鍵較為合適。
在按鍵較少的情況下,使用獨立鍵盤配置靈活。但按鍵較多時,就會浪費I/O口線。同時獨立按鍵可以查詢哪個按鍵被按下。
-
3 # 科技電小二
很多的嵌入式或者微控制器系統中,一般都需要向嵌入式或者微控制器系統輸入資訊的外設,以及嵌入式或者微控制器向外輸出資訊的外設
我們常見的顯示屏,數碼管等就是嵌入式或者微控制器系統輸出外設
觸控板,獨立按鍵等就是嵌入式或者微控制器系統輸入的一種外設。
所以,關於微控制器系統中運用獨立按鍵的目的,是為了滿足使用者在微控制器系統已有的功能中,選擇自己需要的功能,或者設定對應的引數。
一般來說,獨立按鍵是透過物理機械式的接觸,將VCC或者GND短接,達到微控制器的某一個IO電平變化的按鍵方式。
它與矩陣鍵盤,ADC按鍵等其他的按鍵方式,有電路設計簡單穩定,軟體處理簡單的優點,但這種形式相對於矩陣鍵盤和ADC按鍵的形式,更多佔用IO口
一般獨立按鍵在硬體上設計時,如下圖所示
採取上拉式,其中的電阻是限流電阻,保護MCU的IO不會損壞,電容是濾波電容,
按鍵沒有按下時,MCU埠一直高電平,當按鍵按下時,埠就會變為低電平
在軟體設計過程中,可以採用外部中斷形式,或者IO埠迴圈掃描的形式進行鍵值的獲取,在按鍵狀態獲取時,需要考慮軟體消抖,同時建議不要使用Delay延時,使用時間計數方式來計算按鍵狀態時間,避免了佔用MCU資源,無法處理其他的任務。
按鍵的運用在軟體中,按鍵的運用較為靈活,當多個按鍵同時存在時,可以透過組合按鍵操作實現某一個功能,但當只有一個按鍵,專案又需要多個功能實現切換的時候,可以考慮,短按+長按,按鍵按中+按鍵鬆開,單擊+雙擊+多擊,多種形式靈活組合實現各個不同的操作流程。
比如
關機狀態,短按進入待機X狀態
待機X狀態短按,進入狀態B,
待機X狀態,快速多連擊進入狀態D
等等這樣的操作形式或者流程,就能利用一個獨立按鍵,實現多個功能程式碼的設計。
獨立按鍵是微控制器系統中一個很重要的設計,簡單運用很簡單,但深入靈活的組合實現也是需要自己仔細琢磨,將獨立按鍵的用法吃透,在實際的專案開發過程中,會讓您的解決問題可選方案增加很多,工作更加得心應手。
-
4 # 玩轉嵌入式
按鍵是最常用的輸入方式,學習微控制器時,按鍵輸入是必學習的內容,在大學課程《51微控制器》有介紹,微控制器的按鍵輸入分為獨立式按鍵和矩陣式按鍵。
1.什麼是獨立式按鍵所謂獨立式按鍵就是指,每個按鍵佔用一個GPIO口,如下圖所示,就是兩個獨立按鍵,佔用了兩個微控制器的GPIO口。
獨立式按鍵在程式設計時比較簡單、方便,但是嚴重浪費微控制器的GPIO口資源。如果一個微控制器系統中有多個按鍵,則需要考慮矩陣式按鍵或者是擴充套件GPIO口。
2.獨立式按鍵有什麼用按鍵都是用作輸入的,在微控制器系統中自然也被當作輸入,微控制器需要檢測按鍵的輸入情況做相應的邏輯處理。如下圖所示,是微控制器所實現的一個數字時鐘,用到了四個獨立按鍵。
可以利用這四個按鍵來設定時間、設定日期、設定鬧鐘等,從而實現與微控制器的人機互動。
3.多按鍵的擴充套件方式有些場合會用到比較多的按鍵輸入,如用微控制器設計一個多通道的搶答器、用微控制器實現一個計算器、密碼鎖等,這類情況如果再使用獨立式按鍵需要佔用大量的GPIO口。為了節省GPIO,可以透過矩陣式按鍵或者使用串入並出的移位暫存器來擴充套件。
上圖是典型的矩陣式按鍵的原理圖,透過8個GPIO即可實現4×4的矩陣鍵盤。矩陣式按鍵可以節省GPIO,但是程式相對複雜。
除了矩陣式按鍵外,還可以使用晶片來擴充套件,如74HC595等。
回覆列表
我這按鍵是機械彈性按鍵,所以具有彈性,按鍵在按下和鬆開的瞬間均伴隨有一連串的抖動,鍵抖動會引起一次按鍵被誤
讀多次,然後為了保證cpu對鍵的一次閉合僅作一次處理,所以我們必須去除抖動。去除抖動有2種,硬體消抖和軟體消抖。
其中一軟體消抖最方便。所以我就以軟體消抖為例。
獨立按鍵的原理圖和led的原理圖如上,8個led的陽極都接了vcc(vcc認為是電源正極,gnd認為是電源負極),所以只需要led的陰極接的p2i(i取值0到7)口輸入低電平(即0v)對應的led就可以發亮了.
接下來看看獨立按鍵的原理圖,首先K1是和rxd管腳相連的,然後rxd管腳又是和P3^1口連線的,所以可以P3^1口是和k1開關連線的,可以知道當k1按鍵按下時電路就導通了,因為k1右邊接了gnd,所以P3^1這個io口的輸出電平就被拉低變0電平了。(p31io口電平能被拉低是因為P3口是準雙向io口),所以我們可以透過判斷P3^1io口的電平來獲知按鍵的狀態,P3^1==1,則按鍵k1沒有按下,P3^1==0,則按鍵k1按下了。
接下來展示一個透過獨立鍵盤裡的按鍵k1來控制led1的亮滅的程式
;
#include<reg52.h>
sbit led1=P2^0;//因為led1由p2^0口控制
sbit k1=P3^1;//P31口的輸出電平由按鍵k1控制
void delay(int i)
{
while(i--);
}
void keyproc()
{
if(k1==0)
{
delay(1000);//延時消抖
if(k1==0)
{
led1=~led1;////led1狀態反轉,亮變滅,滅變亮
}
while(!k1) ;
}
}
void main()
{
while(1)
{
keyproc();
}
}
把這程式碼燒到微控制器後,我們一按k1,led1就會亮,再按一次就會滅,一直這樣下去