實(shí)驗(yàn)4-矩陣鍵盤的設(shè)計(jì)與應(yīng)用_第1頁(yè)
實(shí)驗(yàn)4-矩陣鍵盤的設(shè)計(jì)與應(yīng)用_第2頁(yè)
實(shí)驗(yàn)4-矩陣鍵盤的設(shè)計(jì)與應(yīng)用_第3頁(yè)
實(shí)驗(yàn)4-矩陣鍵盤的設(shè)計(jì)與應(yīng)用_第4頁(yè)
實(shí)驗(yàn)4-矩陣鍵盤的設(shè)計(jì)與應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)四矩陣鍵盤的設(shè)計(jì)與應(yīng)用在單片機(jī)及智能儀器應(yīng)用中,鍵盤是人機(jī)交互的又一個(gè)重要的部分。 在單片機(jī)應(yīng)用系統(tǒng)中為了控制系統(tǒng)的工作狀態(tài),以及向系統(tǒng)中輸入數(shù)據(jù),鍵盤是必不可少的輸入設(shè)備,它由若干個(gè)按鍵組成。單片機(jī)應(yīng)用系統(tǒng)中所配備的鍵盤,通常是非編碼鍵盤即:鍵盤中的按鍵及鍵值由單片機(jī)中的鍵盤掃描程序來識(shí)別和解釋。由此看來在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中其鍵盤掃描程序段是肯定存在的。因此,我們有必要將單片機(jī)中鍵盤的設(shè)計(jì)與鍵值的解釋作為一種單片機(jī)應(yīng)用的技能來加以訓(xùn)練。本實(shí)驗(yàn)我們主要討論鍵盤的工作原理、組成鍵盤的硬件電路設(shè)計(jì)以及按鍵識(shí)別和鍵值解釋的程序設(shè)計(jì)。第一部分教學(xué)要求一、 目的要求1了解鍵盤的工作原理。2掌握簡(jiǎn)單

2、鍵盤的設(shè)計(jì)方法和鍵盤掃描程序的設(shè)計(jì)方法。3利用51系列單片機(jī)的P1口進(jìn)行簡(jiǎn)單鍵盤設(shè)計(jì)及鍵盤掃描程序設(shè)計(jì)訓(xùn)練。4鍵盤及鍵盤掃描程序的排(查)錯(cuò)訓(xùn)練。二、 預(yù)備知識(shí)1 在電子電路中按鍵的狀態(tài)是以開關(guān)量形式表示的(閉合與斷開),具體到單片機(jī)電路中按鍵的狀態(tài)即以TTL電平(5V3V表示邏輯“1”,2V0V表示邏輯“0”)來表示,即邏輯“1”與邏輯“0”分別表示按鍵的兩種狀態(tài)。2 單片機(jī)邏輯電平的輸入形式:圖23 51系列單片機(jī)的I/O指令1) 直接對(duì)單片機(jī)引腳的位操作指令:JB bit, relJNB bit, rel2) 對(duì)單片機(jī)擴(kuò)展I/O口地輸入指令:MOV DPTR, #addr16MOVX A

3、, DPTR鍵盤組成原理1. 獨(dú)立的按鍵電路圖3按鍵斷開時(shí),由于上拉電路的存在讀入按鍵的狀態(tài)為邏輯“1”。按鍵閉合時(shí),由于按鍵的另一端接地,此時(shí),讀入按鍵的狀態(tài)為邏輯“0”。由獨(dú)立按鍵組成的鍵盤系統(tǒng),每一個(gè)按鍵都要占用一位I/O接口位。例:若某應(yīng)用系統(tǒng)有4個(gè)按鍵,4個(gè)按鍵通過8031的P1.0、P1.1、P1.2及P1.3接入,設(shè)計(jì)如下:圖4特點(diǎn):電路及鍵盤解釋程序簡(jiǎn)單。由于每個(gè)按鍵都要占用一位I/O接口位。若鍵盤的按鍵全部為獨(dú)立按鍵,則該鍵盤中按鍵的數(shù)量通常少于6個(gè)。2. 鍵盤矩陣由于由獨(dú)立按鍵組成的鍵盤系統(tǒng)每一個(gè)按鍵都要占用一位I/O接口位,而對(duì)于單片機(jī)系統(tǒng)而言,每一位I/O接口位都是非常

4、寶貴的資源。這對(duì)于應(yīng)用系統(tǒng)中有較多數(shù)量按鍵的系統(tǒng)而言,采用由獨(dú)立按鍵組成的鍵盤系統(tǒng)顯然是不可取的。為了節(jié)省寶貴的I/O接口位可采用鍵盤矩陣方法,將所有的按鍵組織成一個(gè)有X行Y列的矩陣,按照坐標(biāo)的原理在矩陣中的每一個(gè)按鍵都有一個(gè)不同的坐標(biāo)值(編碼),我們可根據(jù)不同的坐標(biāo)值來識(shí)別每一個(gè)按鍵。下面以一個(gè)4X4的鍵盤(實(shí)驗(yàn)平臺(tái)實(shí)際電路)來具體說明鍵盤矩陣工作原理:圖5將A鍵至P鍵按圖5的方式組織成一個(gè)4X4的矩陣,其中4根“行”線分別接入8031的P1.0P1.3,4根“列”線,則分別接入8031的P1.4P1.7 并同時(shí)通過4個(gè)上拉電阻接5V電源。當(dāng)鍵盤中無(wú)任何鍵按下時(shí),讀入8031的P1.4P1.

5、7的編碼應(yīng)為“1111”(4個(gè)上拉電阻的狀態(tài))。為了使鍵盤中的按鍵具有各自不同的編碼,可使8031的P1.0P1.3依次輸出邏輯“0”,即只輸出“0111”(P1.0輸出邏輯“0”, P1.1P1.3均輸出邏輯“1”)、“1011”、“1101”和“1110”四組編碼。當(dāng)有按鍵被按下時(shí),按鍵所在的“行”線與“列”線便會(huì)連通,此時(shí)若“行”線輸出邏輯“0”,則8031讀入“列”線的編碼便會(huì)是一個(gè)非全“1”碼。例如圖5中的P1.0P1.3輸出為“0111”(P1.0輸出邏輯“0”, P1.1P1.3均輸出邏輯“1”),此時(shí)若A鍵被按下,則8031讀入8031的P1.4P1.7的編碼應(yīng)為“1110”(

6、 P1.4P1.6為邏輯“1”,B、C、D鍵未按下。P1.7為邏輯“0”,A鍵被按下)。根據(jù)同樣的原則,A鍵至P鍵的編碼見下表:表1矩陣式鍵盤就是根據(jù)這些不同的編碼來識(shí)別不同的按鍵的。特點(diǎn):利用較少的I/O接口位,獲得較多按鍵數(shù)(8位I/O接口位,16個(gè)按鍵)。而且,鍵盤矩陣越大所節(jié)省的I/O接口位就越多。電路及鍵盤解釋程序較獨(dú)立按鍵的鍵盤復(fù)雜。a) 按鍵狀態(tài)變化過程由于按鍵是一個(gè)機(jī)械器件,在進(jìn)行按鍵操作時(shí)由于按鍵的機(jī)械特性,按鍵在閉合與斷開的瞬間都存在一個(gè)抖動(dòng)期,抖動(dòng)期的長(zhǎng)短與按鍵質(zhì)量有關(guān),一般為520ms。圖6圖6中t1、t2為抖動(dòng)期,t2為按鍵被按下的時(shí)間。目前51單片機(jī)處理與判斷事件的

7、速度為us級(jí),而按鍵的抖動(dòng)期是ms級(jí)的。顯然若不加以處理,這個(gè)抖動(dòng)期對(duì)按鍵操作的識(shí)別是有影響的,具體反映是:實(shí)際為單次按鍵操作,而識(shí)別為多次按鍵操作,俗稱“連擊”。處理方法是在按鍵操作進(jìn)入抖動(dòng)期后,先讓51單片機(jī)延時(shí)20ms,然后再進(jìn)行按鍵邏輯值的判斷,這樣就避開了按鍵的抖動(dòng)期。3. 按鍵識(shí)別及鍵盤掃描程序在以單片機(jī)為核心應(yīng)用系統(tǒng)中,鍵盤除了具體的電路結(jié)構(gòu)外,管理鍵盤的程序也是鍵盤的另一個(gè)重要組成部分,管理鍵盤的程序通常稱為鍵盤掃描程序。鍵盤掃描程序有兩項(xiàng)主要的任務(wù):1)按鍵識(shí)別,判斷鍵盤中那一個(gè)按鍵被按下;2)鍵值解釋,該按鍵的具體意義。以下是對(duì)圖4、圖5中鍵盤的鍵盤掃描程序的結(jié)構(gòu)示意,使大

8、家對(duì)鍵盤掃描程序有一個(gè)初步了解。 a) 對(duì)圖4結(jié)構(gòu)鍵盤的鍵盤掃描程序:圖:按鍵1掃描程序流程ORG 0100HK1: JB P1.0, K2 ;判斷按鍵1是否被按下?P1.0=”1”,未按下,轉(zhuǎn)去判斷按鍵2K11: ACALL 延時(shí)20ms ;P1.0=”0”,按鍵1以被按下,延時(shí),避開按鍵的抖動(dòng)期。JNB P1.0, K11 ;等待按鍵1釋放ACALL K1的鍵值解釋;轉(zhuǎn)去解釋按鍵1K2: JB P1.1, K3K22: ACALL 延時(shí)20msJNB P1.1, K22 ;與以上類似ACALL K2的鍵值解釋K3: JB P1.2, K4K33: ACALL 延時(shí)20msJNB P1.2,

9、 K33 ;與以上類似ACALL K3的鍵值解釋K4: JB P1.3, KENDK44: ACALL 延時(shí)20msJNB P1.3, K44 ;與以上類似ACALL K4的鍵值解釋KEND: :AJMP K1 ;繼續(xù)鍵盤掃描1對(duì)圖5結(jié)構(gòu)鍵盤的鍵盤掃描程序:圖:第一行鍵盤掃描程序流程ORG 0100HSCAN: CLR P1.0SETB P1.1 1110” SETB P1.2SETB P1.3JB P1.4, NEXT1 ;判斷A鍵是否被按下? ACALL 延時(shí)20ms ;A鍵被按下,A鍵去抖 KA: JB P1.4, KA0 ;等待A鍵釋放AJMP KAKA0: ACALL A鍵的鍵值解釋

10、;A鍵鍵值解釋NEXT1: JB P1.5, NEXT2 ;判斷B鍵是否被按下?ACALL 延時(shí)20ms ;B鍵被按下,B鍵去抖第1 KB: JB P1.5, KB0 ;等待B鍵釋放AJMP KBKB0: ACALL B鍵的鍵值解釋;B鍵鍵值解釋NEXT2: JB P1.6,NEXT3ACALL 延時(shí)20msKC: JB P1.6, KC0 鍵處理AJMP KCKC0: ACALL C鍵的鍵值解釋NEXT3: JB P1.7, NEXT4ACALL 延時(shí)20msKD: JB P1.4,KD0 鍵處理AJMP KDKD0: ACALL D鍵的鍵值解釋NEXT4: SETB P1.0CLR P1.

11、1 設(shè)置行編碼“1101”SETB P1.2SETB P1.3JB P1.4, NEXT5 ;判斷E鍵是否被按下? ACALL 延時(shí)20ms ;E鍵被按下,E鍵去抖 KE: JB P1.4, KE0 ;等待E鍵釋放AJMP KEKE0: ACALL E鍵的鍵值解釋;E鍵鍵值解釋NEXT5: JB P1.5, NEXT6 ;判斷F鍵是否被按下?ACALL 延時(shí)20ms ;F鍵被按下,F(xiàn)鍵去抖第2 KF: JB P1.5, KF0 ;等待F鍵釋放AJMP KFKF0: ACALL F鍵的鍵值解釋;F鍵鍵值解釋NEXT6: JB P1.6,NEXT7ACALL 延時(shí)20msKG: JB P1.6,

12、KG0 鍵處理AJMP KGKG0: ACALL G鍵的鍵值解釋NEXT7: JB P1.7, NEXT8ACALL 延時(shí)20msKH: JB P1.4,KH0 鍵處理 AJMP KHKH0: ACALL H鍵的鍵值解釋NEXT8: SETB P1.0SETB P1.1 1011” CLR P1.2SETB P1.3JB P1.4, NEXT9ACALL 延時(shí)20msKI: JB P1.4, KI0 I鍵處理 AJMP KIKI0: ACALL I鍵的鍵值解釋;NEXT9: JB P1.5, NEXT10ACALL 延時(shí)20ms ; J鍵處理 KJ: JB P1.5, KJ0 ;AJMP KJ

13、KJ0: ACALL J鍵的鍵值解釋;NEXT10: JB P1.6, NEXT11 ACALL 延時(shí)20msKK: JB P1.6, KK0 鍵處理 AJMP KKKK0: ACALL K鍵的鍵值解釋NEXT11: JB P1.7, NEXT12ACALL 延時(shí)20msKL: JB P1.4,KL0 鍵處理 AJMP KLKL0: ACALL L鍵的鍵值解釋NEXT12: SETB P1.0SEYB P1.1 設(shè)置行編碼“0111” SETB P1.2CLR P1.3JB P1.4, NEXT13ACALL 延時(shí)20ms ;KM: JB P1.4, KM0 ; M鍵處理 AJMP KMKM0

14、: ACALL M鍵的鍵值解釋;NEXT13: JB P1.5, NEXT14 ;ACALL 延時(shí)20ms KN: JB P1.5, KN0 ; 鍵處理 AJMP KNKN0: ACALL N鍵的鍵值解釋;NEXT14: JB P1.6,NEXT15 第3行掃描 第4行掃描ACALL 延時(shí)20msKO: JB P1.6, KO0 O鍵處理AJMP KOKO0: ACALL O鍵的鍵值解釋NEXT15: JB P1.7, NEXT16ACALL 延時(shí)20msKP: JB P1.4,KP0鍵處理AJMP KPKP0: ACALL P鍵的鍵值解釋:AJMP SCAN ;繼續(xù)鍵盤掃描三、 實(shí)驗(yàn)內(nèi)容按照

15、下面的原理圖接線,編寫程序,完成矩陣鍵盤的設(shè)計(jì)(4×4),給每一個(gè)按鍵賦予一個(gè)數(shù)字,運(yùn)行程序后,按鍵后的數(shù)字顯示在LED數(shù)碼管上。同學(xué)們按照以下接線方法和程序,完成實(shí)驗(yàn)。然后對(duì)一下幾個(gè)問題進(jìn)行分析并解答:1、 通過實(shí)驗(yàn),驗(yàn)證鍵盤消抖時(shí)間多少最為合適?2、 實(shí)驗(yàn)有消抖和沒消抖效果上的不同。建議驗(yàn)證方案采用按一次鍵計(jì)數(shù)器加一送LED顯示器顯示。3、 將消抖時(shí)間由小變大,觀察效果上的不同,確定出你的鍵盤合適的消抖時(shí)間。4、 鍵盤設(shè)計(jì)需要考慮那些問題。5、 比較獨(dú)立鍵盤和矩陣鍵盤的特點(diǎn)。6、 比較查詢法和中斷法識(shí)別按鍵性能上的不同。7、 對(duì)下面例子程序中的關(guān)鍵函數(shù)做出說明。矩陣鍵盤原理圖實(shí)驗(yàn)

16、板接線圖靜態(tài)數(shù)碼管注意:這次使用的LED數(shù)碼管是共陽(yáng)極接線、靜態(tài)數(shù)碼管。/* * 武漢理工大學(xué)電子信息工程系-* 實(shí)驗(yàn)名 : 矩陣鍵盤顯示試驗(yàn)* 實(shí)驗(yàn)說明 : 靜態(tài)數(shù)碼管顯示矩陣鍵盤鍵值* 連接方式 : 見連接圖* 注意 :*/#include<reg51.h>/-定義使用的IO口-/#define GPIO_DIG P0#define GPIO_KEY P1/-定義全局變量-/unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7

17、9,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char KeyValue;/用來存放讀取到的鍵值/-聲明全局函數(shù)-/void Delay10ms(unsigned int c); /延時(shí)10msvoid KeyDown(); /檢測(cè)按鍵函數(shù)/* * 函數(shù)名 : main* 函數(shù)功能 : 主函數(shù)* 輸入 : 無(wú)* 輸出 : 無(wú)*/ void main(void)while(1)KeyDown();GPIO_DIG = DIG_CODEKeyValue;/* * 函數(shù)名 : KeyDown* 函數(shù)功能 : 檢測(cè)有按鍵按下并讀取鍵值* 輸入

18、: 無(wú)* 輸出 : 無(wú)*/void KeyDown(void)char a = 0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)/讀取按鍵是否按下 Delay10ms(1);/延時(shí)10ms進(jìn)行消抖 if(GPIO_KEY!=0x0f)/再次檢測(cè)鍵盤是否按下 /測(cè)試列 GPIO_KEY=0X0F; switch(GPIO_KEY) case(0X07): KeyValue=0;break; case(0X0b): KeyValue=4;break; case(0X0d): KeyValue=8;break; case(0X0e): KeyValue=12;break; /測(cè)試行 GPIO_KEY=0XF0; switch(GPIO_KEY) case(0X70): KeyValue=KeyValue+3;break; case(0Xb0): KeyValue=KeyValue+2;break; case(0Xd0): KeyValue=KeyValue+1;break; case(0Xe0): KeyValue=Key

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論