由于在單片機在應用系統中,更多的會用到獨立鍵盤,加之兩者的檢測原理基本相似,所以這一節里我主要講解獨立鍵盤的檢測原理及程序實現的方法。
1、 按鍵的檢測原理
按鍵與單片機的連接如圖5所示,按鍵的一端與地相連,另一端直接與單片機的I/O口相連。此時我們在程序中先給I/O口賦值高電平,然后不斷的檢測I/O口電平的變化。當按鍵沒有被按下時,此I/O口的電平一直為高;當按鍵被按下時,由于按鍵的另一端直接與地相連,相當于低電平,此時我們從I/O口讀出的即為高電平,程序一旦檢測到I/O口由高電平變為低電平時,說明按鍵被按下,此時馬上執行相應的動作,這就是按鍵檢測的原理。
圖5 按鍵與單片機連接圖
2、 按鍵的抖動與消除
由于機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,與單片機I/O口相接的一端的電壓會出現相應的變化,如圖6所示。
圖6 按鍵按下時電壓的變化情況
從圖6中我們可以看出,實際的電壓波形在按下松手的時候都會出現一定的抖動,經過實驗知道,這個一時間大概在5-10ms。所在在做單片機與按鍵相關的系統時必須考慮消抖的環節。按鍵消抖的方法有兩種,一個是硬件方法 一個是軟件的方法,而從節約成本和盡量簡化硬件電路的角度出發,一般是采用在程序中加上消抖的方法實現,通常是采用延時的方法。具體的作法是:
檢測出鍵閉合后執行一個延時程序,產生5ms~10ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態,如果仍保持閉合狀態電平,則確認為真正有鍵按下。當檢測到按鍵釋放后,也要給5ms~10ms的延時,待后沿抖動消失后才能轉入該鍵的處理程序。后面會結合到程序進行講解。
下面我寫一個簡單的程序,功能為:當一個鍵按下時,讓一個發光二極管發光,我們先看下按鍵模塊在實驗板上的原理圖,如圖7和圖8所示。
圖7 發光二極管模塊原理圖
圖8 按鍵模塊原理圖
例1 按鍵檢測程序
//功能:當按下S8鍵時,L1燈發光,松手后,L1燈熄滅。相應程序如例1.
#include
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^0;
sbit S1=P3^4;
void main()
{
P3=0xff;
while(1)
{
if(S1==0) //第一次檢測按鍵是否按下
delay(20); //消除按下時的抖動
if(S1==0) //再次確定是否按下狀態
{
D1=0; //如果是按下狀態,執行操作
while(!S1); //檢測是否是按鍵彈起
delay(20); //消除松開時的抖動
}
else
D1=1;
}
}
-
模塊
+關注
關注
7文章
2707瀏覽量
47476 -
電平
+關注
關注
5文章
360瀏覽量
39900 -
鍵盤
+關注
關注
4文章
859瀏覽量
39670 -
硬件
+關注
關注
11文章
3328瀏覽量
66224 -
程序
+關注
關注
117文章
3787瀏覽量
81049
發布評論請先 登錄
相關推薦
評論