《按鍵控制鍵盤檢測原理與應用》由會員分享,可在線閱讀,更多相關《按鍵控制鍵盤檢測原理與應用(7頁珍藏版)》請在裝配圖網上搜索。
1、按鍵控制鍵盤檢測原理與應用
一、任務目標:
認知目標
1、掌握按鍵分類及工作原理
2、掌握IF條件選擇結構和使用方法
3、掌握循環(huán)結構和使用原理
4、掌握獨立按鍵子函數的編寫原理及方法
1、 獨立鍵盤
在簡單的單片機應用系統(tǒng)中,往往只需要幾個功能鍵就能滿足要求,此時,可采用獨立式按鍵結構。
獨立式按鍵是直接用I/O口線構成的單個按鍵電路,其特點是每個按鍵單獨占用一根I/O口線,每個按鍵的工作不會影響其它I/O口線的狀態(tài)。獨立式按鍵的典型應用如圖1.2.1所示。
獨立式按鍵示意圖
獨立式按鍵電路配置靈活,軟件結構簡單,但每個按鍵必須占用一根I/O口線,因此,在按鍵較
2、多時,I/O口線浪費較大,不宜采用。
程序開始,檢測按鍵是否被按下,若按下,則移動機器人啟動,未被按下,繼續(xù)檢測。這里將程序分成三個部分,分別是延時子函數、按鍵子函數、主函數。
延時子函數,通過參數t設置延時時間;按鍵模塊子函數需用到延時函數,對按鍵進行消抖;主函數主要調用按鍵檢測程序,實現對移動機器人的控制。程序流程圖如圖1.2.2所示
程序流程圖
程序示例:
在編寫程序開始的部分,將系統(tǒng)頭文件“STC89C52RC.H”包含進來,對常用的變量類型進行宏定義,規(guī)劃各函數和變量,對變量進行定義和初始化,對自定義子函數進行聲明并添加相應標注,程序開始部分如下
sbit IN1=
3、P1^0;
sbit IN2=P1^1;
Void key();
編寫主函數,在主函數中就是調用按鍵檢測函數。
Void main()
{
key();
}
編寫key()按鍵檢測函數,按鍵按下,輸出低電平,通過if語句檢測低電平,延時10ms后,再次檢測,若檢測為高電平,則表示為機械抖動,若檢測到低電平表示按鍵按下。
Void key()
{
if(IN1==0)
{
delay_ms(10);
if(IN1==0)
{
while(IN1==0);
IN2=~IN2;
}
4、 }
}
在上面的程序中,就只有一個檢查按鍵掃描的函數key(),key()函數是檢查有沒有按鍵按下編寫的。當有按鍵下的時候P2口取反。
2、 矩陣鍵盤
(1)矩陣連接式鍵盤
在單片機系統(tǒng)中鍵盤中按鈕數量較多時,為了減少I/O口的占用,常常將按鈕排列成矩陣形式,如下圖所示:
矩陣鍵盤形式
矩陣按鍵實物圖
矩陣連接式鍵盤鍵按矩陣排列,各鍵處于矩陣行/列的結點處,CPU通過對連在行(列)的I/O線送已知電平的信號,然后讀取列(行)線的狀態(tài)信息。逐線掃描,得出鍵碼。其特點是鍵多時占用I/O口線少,硬件資源利用合理,但判斷按鍵速度慢。多用于設置
5、數字鍵,適用于鍵數多的場合。
(2)按鍵識別方法
① 掃描法
第1步,識別鍵盤有無鍵按下;第2步,如有鍵被按下,識別出具體的鍵位。其工作過程為先把所有列線均置為0,然后檢查各行線電平是否都為高,如果不全為高,說明有鍵按下,否則無鍵被按下。再采用逐列掃描法,在某一時刻只讓1條列線處于低電平,其余所有列線處于高電平,識別出按鍵具體位置。
綜上所述,掃描法的思想是,先把某一列置為低電平,其余各列置為高電平,檢查各行線電平的變化,如果某行線電平為低電平,則可確定此行此列交叉點處的按鍵被按下。
② 線反轉法
線反轉法的具體步驟為讓行線編程為輸入線,列線編程為輸出線,并使
6、輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵所在行。再把行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全低電平,則列線中電平由高變低所在列為按鍵所在列。
程序編寫
矩陣式鍵盤最主要的是按鍵識別,按鍵識別是采用線翻轉的方法。線翻轉法是先讓P2= 0xf0;當有按鍵按下時P2口的狀態(tài)就會改變不在是0xf0,當按鍵按下時,P2的狀態(tài)改變了,此時存儲當前P2口的狀態(tài)1,然后讓P2=0xf0因為程序執(zhí)行時間很短,此時按鍵還沒抬起來,由于按鍵按下的原因P2狀態(tài)不再是0xf0,存儲此時P2口的狀態(tài)2,把狀態(tài)1與狀態(tài)2的值相或,因為每個按鍵按下的值都是不一樣的,根據按鍵返回的值給數碼管賦
7、不同的斷碼值,從而達到顯示0~F的目的。利用線反轉法編寫程序流程如圖1.2.4所示:
程序流程圖
程序示例
編寫keyscan函數注釋,定義keyscan函數并編寫框架。keyscan函數主要負責掃描矩陣鍵盤是否被按下,并且根據按下的按鍵返回不同的值,所以應該為無參、有返回值函數。因為有按鍵按下時返回值是將兩次P2=0xf0和P2=0x0f的結果相或,無按鍵按下時返回值為0xff,所以將函數返回值定義為uchar型即可。
uchar keyscan(void)
{
uchar cord_h=0;
uchar cord_l=0;
P2=0xf0;
if(P2
8、!=0xf0)
{ Delay_ms(10);
if(P2!=0xf0)
{
cord_h=P2;
P2=0x0f;
cord_l=P2;
return(cord_h|cord_l);
}
}
return(0xff);
}
編寫主函數,系統(tǒng)從主函數開始執(zhí)行,首先點亮數碼管,將數字“0”的段碼賦值給P0口,然后進入while無限循環(huán),在while循環(huán)里,調用keyscan函數,并將返回值賦值給變量key,同時要定義變量可以。
void main()
{
uchar key;
P0=0X
9、C0;
while(1)
{
key=keyscan();
switch(key)
{
case 0xee:P0=LED_Val[0];break;
case 0xed:P0=LED_Val[1];break;
case 0xeb:P0=LED_Val[2];break;
case 0xe7:P0=LED_Val[3];break;
case 0xde:P0=LED_Val[4];break;
case 0xdd:P0=LED_Val[5];break;
case 0xdb:P0=LED_Val[6];break
10、;
case 0xd7:P0=LED_Val[7];break;
case 0xbe:P0=LED_Val[8];break;
case 0xbd:P0=LED_Val[9];break;
case 0xbb:P0=LED_Val[10];break;
case 0xb7:P0=LED_Val[11];break;
case 0x7e:P0=LED_Val[12];break;
case 0x7d:P0=LED_Val[13];break;
case 0x7b:P0=LED_Val[14];break;
case 0x77
11、:P0=LED_Val[15];break;
}
}
}
1、 實物調試
1)、電路連接
電路連接
2)、上電調試
上電測試
五、背景知識:
在控制系統(tǒng)中,通常需利用按鍵進行系統(tǒng)參數的設置。按鍵時單片機應用系統(tǒng)中常用的輸入設備之一,線性鍵盤分為獨立按鍵、矩陣鍵盤兩種。
鍵盤是由一組規(guī)則排列的按鍵組成,一個按鍵實際上是一個開關元件,也就是說鍵盤是一組規(guī)則排列的開關。鍵盤的工作方式有3種,即程序控制掃描、定時掃描和中斷掃描方式。
通常,按鍵的開關為機械彈性觸點開關,它是利用機械觸點接觸和分離實現電路的通、斷。由于機械觸點的彈性作用,加上人們按鍵時的力度、方
12、向的不同,按鍵開關從按下到接觸穩(wěn)定要經過數毫秒的彈跳抖動,既在按下的幾十毫秒時間里會連續(xù)產生多個脈沖。釋放按 鍵時,電路也不會一下斷開,同樣會產生抖動。這兩次抖動的時間分別為 10.20ms 左右,而按鍵的穩(wěn)定閉合期通常大于 0.3.0.5 秒。因此,為了確保 MCU 對一次按鍵動作只確認一次,在確認按鍵是否閉合時,必須要進行消抖處理。否則,由于 MCU 軟件執(zhí)行的速度很快,非常可能將抖動產生的多個脈沖誤認為多次的按鍵。
消除按鍵的抖動既可采用硬件方法,也可采用軟件的方法。使用硬件消抖的方式,需要在按鍵連接的硬件設計上增加硬件消抖電路,如采用 R.S 觸發(fā)器或 RC 積分電路等。采用硬件消
13、抖方式增加了系統(tǒng)的成本,而利用軟件方式消抖則是比較經濟的做法,但增加了軟件設計的復雜性。
軟件方式消抖的基本原理是在軟件中對按鍵進行兩次測試確認,既在第一次檢測到按鍵按下后,間隔 10ms 左右再次檢測該按鍵是否按下,只有在兩次都測到按鍵按下時才最終確認有鍵按下,從而消除了抖動的影響。在按鍵接口軟件中,除了要考慮按鍵消抖外,一般還要判別按鍵的釋放,只有檢測到按鍵釋放以后,才能確定為一次完整的按鍵動作完成。
按鍵識別方法分為三種,分別是程序控制掃描方式、定時掃描方式和中斷掃描方式。
①程序控制掃描方式
程序控制掃描方式是指單片機在空閑時,才調用鍵盤掃描子程序,并反復地掃描鍵盤,直到用戶
14、從鍵盤上輸入命令或數據,而在執(zhí)行鍵入命令或處理鍵入數據過程中,CPU將不再響應鍵入要求,直到CPU重新掃描鍵盤為止。
過程如下:
⑴判斷有無鍵按下;
⑵延時后判斷是否確實有鍵按下。如果有,確認有鍵按下,如果沒有,那么確認為鍵抖動;
⑶判斷是哪個鍵被按下(鍵掃描獲得閉合鍵的行、列值);
⑷等待按鍵被釋放。如果沒有釋放,繼續(xù)等待;如果釋放,轉到相應的處理程序進行處理。
②定時掃描方式
定時掃描方式就是每隔一定時間對鍵盤掃描一次,它利用單片機內部的定時器產生一定的時間的定時,當定時時間到就產生定時器溢出中斷,CPU響應中斷后對鍵盤進行掃描,并在有鍵按下時識別出該鍵執(zhí)行響應的鍵功能程序。
③中斷掃描方式
鍵盤工作在程序控制掃描方式時,當無鍵按下時CPU要不間斷的掃描鍵盤,直到有鍵按下為止。如果CPU要處理很多事情,這種方式將不能適應。定時掃描方式只要時間一到,CPU就去掃描鍵盤,工作效率有了進一步的提高。但這兩種方式常使CPU處于空掃狀態(tài),而中斷方式下,CPU可以一直處理自己的工作,知道有鍵閉合時發(fā)出中斷申請,CPU響應中斷,執(zhí)行相應的中斷服務程序,才對鍵盤進行掃描,從而提高了CPU的工作效率。