鍵盤(pán)是單片機(jī)應(yīng)用系統(tǒng)中重要的輸入設(shè)備,是實(shí)現(xiàn)人機(jī)對(duì)話的紐帶。鍵盤(pán)主要分編碼鍵盤(pán)和非編碼鍵盤(pán)兩大類(lèi),其中鍵的開(kāi)閉的識(shí)別由硬件編碼器來(lái)實(shí)現(xiàn)的稱(chēng)為編碼鍵盤(pán),如計(jì)算機(jī)鍵盤(pán)。而靠軟件編程來(lái)識(shí)別鍵的開(kāi)閉的稱(chēng)為非編碼鍵盤(pán),單片機(jī)系統(tǒng)中常用的鍵盤(pán)為非編碼鍵盤(pán)。
鍵盤(pán)都是由一個(gè)一個(gè)小按鍵構(gòu)成的,按鍵實(shí)際上就是一個(gè)開(kāi)關(guān)元件,單片機(jī)系統(tǒng)中常用的按鍵主要有自鎖按鍵和非自鎖按鍵,分別如圖1、圖2所示。
圖1 自鎖按鍵 圖2 非自鎖按鍵
非編碼鍵盤(pán)通常又分為獨(dú)立鍵盤(pán)和矩陣鍵盤(pán)兩大類(lèi)。所謂獨(dú)立鍵盤(pán)是指按鍵在與單片機(jī)相連時(shí),每一個(gè)按鍵都與一個(gè)單片機(jī)單片機(jī)的I/O口相連,如圖3所示;而對(duì)于一些應(yīng)用系統(tǒng)中若需要較多按鍵時(shí),采用獨(dú)立鍵盤(pán)的連接方法,則比較耗費(fèi)單片機(jī)的I/O口,此時(shí)我們一般會(huì)用到矩陣鍵盤(pán),如圖4所示,16個(gè)按鍵排成4行4列,稱(chēng)為4X4矩陣鍵盤(pán),如按獨(dú)立按鍵法,需要16個(gè)I/O口,而按圖4的接法只需要8個(gè)I/O.
圖3 獨(dú)立鍵盤(pán)
圖4 4X4矩陣鍵盤(pán)
由于在單片機(jī)在應(yīng)用系統(tǒng)中,更多的會(huì)用到獨(dú)立鍵盤(pán),加之兩者的檢測(cè)原理基本相似,所以這一節(jié)里我主要講解獨(dú)立鍵盤(pán)的檢測(cè)原理及程序?qū)崿F(xiàn)的方法。
1、 按鍵的檢測(cè)原理
按鍵與單片機(jī)的連接如圖5所示,按鍵的一端與地相連,另一端直接與單片機(jī)的I/O口相連。此時(shí)我們?cè)诔绦蛑邢冉oI/O口賦值高電平,然后不斷的檢測(cè)I/O口電平的變化。當(dāng)按鍵沒(méi)有被按下時(shí),此I/O口的電平一直為高;當(dāng)按鍵被按下時(shí),由于按鍵的另一端直接與地相連,相當(dāng)于低電平,此時(shí)我們從I/O口讀出的即為高電平,程序一旦檢測(cè)到I/O口由高電平變?yōu)榈碗娖綍r(shí),說(shuō)明按鍵被按下,此時(shí)馬上執(zhí)行相應(yīng)的動(dòng)作,這就是按鍵檢測(cè)的原理。
圖5 按鍵與單片機(jī)連接圖
2、 按鍵的抖動(dòng)與消除
由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開(kāi)時(shí)也不會(huì)一下子斷開(kāi)。因而在閉合及斷開(kāi)的瞬間均伴隨有一連串的抖動(dòng),與單片機(jī)I/O口相接的一端的電壓會(huì)出現(xiàn)相應(yīng)的變化,如圖6所示。
圖6 按鍵按下時(shí)電壓的變化情況
從圖6中我們可以看出,實(shí)際的電壓波形在按下松手的時(shí)候都會(huì)出現(xiàn)一定的抖動(dòng),經(jīng)過(guò)實(shí)驗(yàn)知道,這個(gè)一時(shí)間大概在5-10ms。所在在做單片機(jī)與按鍵相關(guān)的系統(tǒng)時(shí)必須考慮消抖的環(huán)節(jié)。按鍵消抖的方法有兩種,一個(gè)是硬件方法 一個(gè)是軟件的方法,而從節(jié)約成本和盡量簡(jiǎn)化硬件電路的角度出發(fā),一般是采用在程序中加上消抖的方法實(shí)現(xiàn),通常是采用延時(shí)的方法。具體的作法是:
檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生5ms~10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5ms~10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序。后面會(huì)結(jié)合到程序進(jìn)行講解。
下面我寫(xiě)一個(gè)簡(jiǎn)單的程序,功能為:當(dāng)一個(gè)鍵按下時(shí),讓一個(gè)發(fā)光二極管發(fā)光,我們先看下按鍵模塊在實(shí)驗(yàn)板上的原理圖,如圖7和圖8所示。
圖7 發(fā)光二極管模塊原理圖
圖8 按鍵模塊原理圖
例1 按鍵檢測(cè)程序
//功能:當(dāng)按下S8鍵時(shí),L1燈發(fā)光,松手后,L1燈熄滅。相應(yīng)程序如例1.
#include 《reg52.h》
#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);//消除按下時(shí)的抖動(dòng)
if(S1==0)
{
D1=0;
while(!S1);//松手檢測(cè)
delay(20);//消除松手時(shí)的抖動(dòng)
}
else
D1=1;
}
}
例2 按鍵檢測(cè)程序
//功能:當(dāng)每按下S8鍵時(shí),數(shù)碼管自動(dòng)加1,當(dāng)加到F時(shí)又從零開(kāi)始。
#include《reg52.h》
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
sbit S1=P3^4;
uchar temp;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z )
{
uint x ,y;
for(x=z;x》0;x--)
for(y=110;y》0;y--);
}
void main()
{
P3=0xff;
wei=1;
P0=0xfe;
wei=0;
temp=0;
while(1)
{
if(S1==0)
{
delay(20);//消除按下時(shí)的抖動(dòng)
if(S1==0)//
{
temp++;
if(temp==16)temp=0;
}
while(!S1);//松手檢測(cè),防止temp一次多加
delay(20);//消除松手時(shí)的抖動(dòng)
while(!S1);
}
duan=1;
P0=table[temp];
duan=0;
}
}
-
單片機(jī)
+關(guān)注
關(guān)注
6063文章
44925瀏覽量
646988 -
電平
+關(guān)注
關(guān)注
5文章
367瀏覽量
40413 -
鍵盤(pán)
+關(guān)注
關(guān)注
4文章
865瀏覽量
40428
發(fā)布評(píng)論請(qǐng)先 登錄
基于單片機(jī)的矩陣鍵盤(pán)檢測(cè)案例

如何實(shí)現(xiàn)基于單片機(jī)的鍵盤(pán)檢測(cè)

現(xiàn)在想學(xué)以下51單片機(jī)的鍵盤(pán)檢測(cè),有木有相關(guān)資料?。?/a>
單片機(jī)在鍵盤(pán)上的應(yīng)用
單片機(jī)總線模式的鍵盤(pán)檢測(cè)與液晶顯示技術(shù)
單片機(jī)8x8矩陣鍵盤(pán)原理說(shuō)明

單片機(jī)與顯示器件及開(kāi)關(guān)鍵盤(pán)的接口設(shè)計(jì)學(xué)習(xí)課件免費(fèi)下載

51單片機(jī)的鍵盤(pán)檢測(cè)原理

51單片機(jī)按鍵檢測(cè)--獨(dú)立按鍵與矩陣鍵盤(pán)

PIC單片機(jī)矩陣鍵盤(pán)檢測(cè)原理及實(shí)現(xiàn)

PIC單片機(jī)矩陣鍵盤(pán)檢測(cè)原理及實(shí)現(xiàn)

單片機(jī)-鍵盤(pán)檢測(cè)

評(píng)論