AVR學(xué)習(xí)筆記十九、4X4矩陣鍵盤(pán)實(shí)驗(yàn)_第1頁(yè)
AVR學(xué)習(xí)筆記十九、4X4矩陣鍵盤(pán)實(shí)驗(yàn)_第2頁(yè)
AVR學(xué)習(xí)筆記十九、4X4矩陣鍵盤(pán)實(shí)驗(yàn)_第3頁(yè)
AVR學(xué)習(xí)筆記十九、4X4矩陣鍵盤(pán)實(shí)驗(yàn)_第4頁(yè)
AVR學(xué)習(xí)筆記十九、4X4矩陣鍵盤(pán)實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

AVR學(xué)習(xí)筆記十九、4X4矩陣鍵盤(pán)實(shí)驗(yàn)19.1實(shí)例功能在前面的實(shí)例中我們已經(jīng)學(xué)習(xí)了在單片機(jī)系統(tǒng)中檢測(cè)獨(dú)立式按鍵的接口電路和程序設(shè)計(jì),獨(dú)立式按鍵的每個(gè)按鍵占用1位I/O口線(xiàn),其狀態(tài)是獨(dú)立的,相互之間沒(méi)有影響,只要單獨(dú)測(cè)試鏈接案件的I/O口線(xiàn)電平的高低就能判斷鍵的狀態(tài)。獨(dú)立式按鍵電路簡(jiǎn)單、配置靈活,軟件結(jié)構(gòu)也相對(duì)簡(jiǎn)單。此種接口方式適用于系統(tǒng)需要按鍵數(shù)目較少的場(chǎng)合。在按鍵數(shù)量較多的情況下,如系統(tǒng)需要8個(gè)以上按鍵的鍵盤(pán)時(shí),采用獨(dú)立式接口方式就會(huì)占用太多的I/O口,這對(duì)于I/O口資源不太豐富的單片機(jī)系統(tǒng)來(lái)說(shuō)顯得相當(dāng)浪費(fèi),那么當(dāng)按鍵數(shù)目相對(duì)較多的時(shí)候,為了減少I(mǎi)/O口資源的占用,應(yīng)該采取什么樣的方式才能夠既滿(mǎn)足多按鍵識(shí)別,又減少I(mǎi)/O口的占用呢?當(dāng)然我們可以采用端口擴(kuò)展器件比如串并轉(zhuǎn)換芯片實(shí)現(xiàn)單片機(jī)I/O口的擴(kuò)展,但是這種方式既增加了電路的復(fù)雜性,又增加了系統(tǒng)的成本開(kāi)銷(xiāo)。有沒(méi)有比較經(jīng)濟(jì)實(shí)惠的方法呢?事實(shí)上,在實(shí)際引用中我們經(jīng)常采用矩陣式鍵盤(pán)的方式來(lái)節(jié)約I/O口資源和系統(tǒng)成本。在這個(gè)實(shí)驗(yàn)中,我們采用4X4矩陣鍵盤(pán)來(lái)實(shí)現(xiàn)使用8個(gè)I/O口識(shí)別16個(gè)按鍵的實(shí)驗(yàn),本實(shí)例分為三個(gè)功能模塊,分別描述如下:●單片機(jī)系統(tǒng):利用ATmega16單片機(jī)與矩陣鍵盤(pán)電路實(shí)現(xiàn)多按鍵識(shí)別。●外圍電路:4X4矩陣鍵盤(pán)電路、LED數(shù)碼管顯示電路?!褴浖绦颍壕帉?xiě)軟件,實(shí)現(xiàn)4X4矩陣鍵盤(pán)識(shí)別16個(gè)按鍵的程序。通過(guò)本實(shí)例的學(xué)習(xí),掌握以下內(nèi)容:●4X4矩陣鍵盤(pán)的電路設(shè)計(jì)和程序?qū)崿F(xiàn)。19.2器件和原理19.2.1當(dāng)鍵盤(pán)中按鍵數(shù)量較多時(shí),為了減少對(duì)I/O口的占用,通常將按鍵排列成矩陣形式,也稱(chēng)為行列鍵盤(pán),這是一種常見(jiàn)的連接方式。矩陣式鍵盤(pán)接口見(jiàn)圖1所示,它由行線(xiàn)和列線(xiàn)組成,按鍵位于行、列的交叉點(diǎn)上。當(dāng)鍵被按下時(shí),其交點(diǎn)的行線(xiàn)和列線(xiàn)接通,相應(yīng)的行線(xiàn)或列線(xiàn)上的電平發(fā)生變化,MCU通過(guò)檢測(cè)行或列線(xiàn)上的電平變化可以確定哪個(gè)按鍵被按下。圖1為一個(gè)4x4的行列結(jié)構(gòu),可以構(gòu)成16個(gè)鍵的鍵盤(pán)。很明顯,在按鍵數(shù)量多的場(chǎng)合,矩陣鍵盤(pán)與獨(dú)立式按鍵鍵盤(pán)相比可以節(jié)省很多的I/O口線(xiàn)。圖14X4鍵盤(pán)掃描電路 矩陣鍵盤(pán)不僅在連接上比單獨(dú)式按鍵復(fù)雜,它的按鍵識(shí)別方法也比單獨(dú)式按鍵復(fù)雜。在矩陣鍵盤(pán)的軟件接口程序中,常使用的按鍵識(shí)別方法有行掃描法和線(xiàn)反轉(zhuǎn)法。這兩種方法的基本思路是采用循環(huán)查循的方法,反復(fù)查詢(xún)按鍵的狀態(tài),因此會(huì)大量占用MCU的時(shí)間,所以較好的方式也是采用中斷的方法來(lái)設(shè)計(jì),盡量減少鍵盤(pán)查詢(xún)過(guò)程對(duì)MCU的占用時(shí)間。在本實(shí)例中只是簡(jiǎn)單演示矩陣鍵盤(pán)的按鍵識(shí)別技術(shù),所以仍然采用查詢(xún)方法。19下面以圖2為例,介紹采用行掃描法對(duì)矩陣鍵盤(pán)進(jìn)行判別的思路。圖2中,PA0、PA1、PA2、PA3為4根列線(xiàn),這4根列線(xiàn)通過(guò)電阻接正電源,即上拉(當(dāng)然AVR單片機(jī)I/O口有內(nèi)部上拉電阻,可以設(shè)置內(nèi)部上拉電阻使能,從而不用連接4個(gè)外部上拉電阻),PA4、PA5、PA6、PA7為4根行線(xiàn)。將行線(xiàn)所接的I/O口作為輸出端,列線(xiàn)所接的I/O口作為輸入端。這樣,當(dāng)沒(méi)有按鍵按下時(shí),所有的輸入端都是高電平,。設(shè)置行線(xiàn)輸出低電平,一旦有鍵按下,則輸入線(xiàn)會(huì)被拉低,這樣通過(guò)讀取輸入線(xiàn)的狀態(tài)就可以得知是否有按鍵按下。行掃描法按鍵識(shí)別的過(guò)程如下。圖2ATmega16與4X4鍵盤(pán)的連接1)、判斷鍵盤(pán)中是否有按鍵按下。將全部行線(xiàn)PA4-PA7置低電平輸出,然后讀PA0-PA3四根輸入列線(xiàn)的狀態(tài)。只要有低電平出現(xiàn),則說(shuō)明有鍵按下(實(shí)際編程時(shí),還要考慮按鍵的消抖)。如讀到的都是高電平,則表示無(wú)鍵按下。2)、判斷閉合鍵所在位置。在確認(rèn)有鍵按下后,即可進(jìn)入確定具體哪個(gè)鍵按下的過(guò)程。其思路是:依次將4根行線(xiàn)分別置為低電平,即在某根行線(xiàn)置為低電平時(shí),其余行線(xiàn)為高電平,在確定某根行線(xiàn)置為低電平后,再逐列檢查各列線(xiàn)的電平狀態(tài),若某列為低電平,則該列線(xiàn)與置為低電平的行線(xiàn)交叉處的按鍵就是閉合的按鍵。矩陣按鍵的識(shí)別僅僅是確認(rèn)和定位了行和列的交叉點(diǎn)上的按鍵,接下來(lái)還要考慮鍵盤(pán)的編碼,即對(duì)各個(gè)按鍵進(jìn)行編號(hào)。在軟件中常通過(guò)計(jì)算的方法或查表的方法對(duì)按鍵進(jìn)行具體的定義和編號(hào)。在單片機(jī)嵌入式系統(tǒng)中,鍵盤(pán)掃描只是MCU的工作內(nèi)容之一。MCU除了要檢測(cè)鍵盤(pán)和處理鍵盤(pán)操作之外,還要進(jìn)行其他事物的處理,因此,MCU如何響應(yīng)鍵盤(pán)的輸入需要在實(shí)際系統(tǒng)程序設(shè)計(jì)時(shí)認(rèn)真考慮。 通常,完成鍵盤(pán)掃描和處理的程序是系統(tǒng)程序中的一個(gè)專(zhuān)用子程序,MCU調(diào)用該鍵盤(pán)掃描子程序?qū)︽I盤(pán)進(jìn)行掃描和處理的方式有三種:程序控制掃描、定時(shí)掃描和中斷掃描。程序控制掃描方式。在主控程序中的適當(dāng)位置調(diào)用鍵盤(pán)掃描程序,對(duì)鍵盤(pán)進(jìn)行讀取和處理。定時(shí)掃描方式。在該方式中,要使用MCU的一個(gè)定時(shí)器,使其產(chǎn)生一個(gè)10ms的定時(shí)中斷,MCU響應(yīng)定時(shí)中斷,執(zhí)行鍵盤(pán)掃描,當(dāng)在連續(xù)兩次中斷中都讀到相同的按鍵按下(間隔10ms作為消抖處理),MCU才執(zhí)行相應(yīng)的鍵處理程序。中斷方式。使用中斷方式時(shí),鍵盤(pán)的硬件電路要做一定的改動(dòng),增加一個(gè)按鍵產(chǎn)生中斷信號(hào)的輸入線(xiàn),當(dāng)鍵盤(pán)有按鍵按下時(shí),鍵盤(pán)硬件電路產(chǎn)生一個(gè)外部的中斷信號(hào),MCU響應(yīng)外部中斷,進(jìn)行鍵盤(pán)處理。在本實(shí)例中我們介紹基于程序控制掃描方式的鍵盤(pán)處理系統(tǒng)的設(shè)計(jì)方法。19.3電路和連接本實(shí)驗(yàn)主要有兩部分電路模塊組成:數(shù)碼管顯示電路,4X4鍵盤(pán)電路。數(shù)碼管顯示電路電路在前面的實(shí)例中我們已經(jīng)做過(guò)介紹,在此不再重復(fù)。這里我們重點(diǎn)介紹一下4X4鍵盤(pán)電路。4X4鍵盤(pán)電路如圖3所示圖34X4鍵盤(pán)電路18.4程序設(shè)計(jì)1、程序功能在本實(shí)例中,我們利用數(shù)碼管將4X4鍵盤(pán)中按下的按鍵的鍵碼值顯示出來(lái)。2、函數(shù)說(shuō)明本實(shí)例主要有數(shù)碼管顯示程序和4X4鍵盤(pán)識(shí)別程序,數(shù)碼管顯示程序我們前面例子中已經(jīng)介紹過(guò),本實(shí)例的程序中不再詳細(xì)說(shuō)明。3、編程說(shuō)明使用WINAVR開(kāi)發(fā)環(huán)境,使用的是外部12M的晶振,所以需要將makefile文件中的時(shí)鐘頻率修改為12M。另外在程序燒錄到單片機(jī)的時(shí)候,熔絲位也要選擇為外部12M晶振(注意是晶振,不是外部振蕩器,一定不要選擇錯(cuò)了,否則會(huì)導(dǎo)致單片機(jī)不能再燒寫(xiě)程序)。4、程序代碼關(guān)于數(shù)碼管顯示程序,在此不再列出,直接打包到程序文件夾中。下面列出主程序以及4X4鍵盤(pán)識(shí)別程序。/***************************************************AVR使用范例4*4矩陣鍵盤(pán)檢測(cè)*******MCU:ATmega16*******作者:maweili*******編譯器:usbisp************** 2009.04.03**************************************************/#include<avr/io.h>//io端口寄存器配置文件,必須包含#include<util/delay.h>//GCC中的延時(shí)函數(shù)頭文件unsignedcharDisp_Buff[16]={0xaf,0xa0,0xc7,0xe6,0xe8,0x6e,0x6f,0xa2,0xef,0xee,0xeb,0x6d,0x0f,0xe5,0x4f,0x4b}; //數(shù)碼管字型碼表顯示:0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,FunsignedcharKeyNumber;//函數(shù)聲明voidDelayus(unsignedintlus);//us延時(shí)函數(shù)voidDelayms(unsignedintlms);//ms延時(shí)函數(shù)unsignedcharRead_Key(void);//讀取鍵值intmain(void)//GCC中main文件必須為返回整形值的函數(shù),沒(méi)有參數(shù){ PORTB=0X00;//PORTB口全部輸出低電平,使數(shù)碼管的段位全部為低電平,不亮 DDRB=0XFF;//配置端口PB全部為輸出口 PORTC&=~(1<<PC6);//配置數(shù)碼管0的位選通口為低電平,不導(dǎo)通數(shù)碼管 DDRC|=(1<<PC6);/// KeyNumber=16;//開(kāi)始沒(méi)有按鍵按下,不顯示 while(1) { Read_Key();//讀取鍵值 PORTB=Disp_Buff[KeyNumber];//鍵值送數(shù)碼管顯示 PORTC|=(1<<PC6);//數(shù)碼管的位選通端口輸出高電平,使數(shù)碼管顯示 }}//us級(jí)別的延時(shí)函數(shù)voidDelayus(unsignedintlus){ while(lus--) { _delay_loop_2(3);//_delay_loop_2(1)是延時(shí)4個(gè)時(shí)鐘周期,參數(shù)為3則延時(shí)12 //個(gè)時(shí)鐘周期,本實(shí)驗(yàn)用12M晶體,則12個(gè)時(shí)鐘周期為12/12=1us}}//ms級(jí)別的延時(shí)函數(shù)voidDelayms(unsignedintlms){ while(lms--) { Delayus(1000);//延時(shí)1ms}}//4*4矩陣鍵盤(pán)掃描,PD高四位為行輸出口,低四位為列輸入口unsignedcharRead_Key(void){ unsignedchari,j; DDRD=0xf0;//設(shè)置PD高四位為輸出口,低四位為輸入口 PORTD=0x00;//初始運(yùn)行輸出全為0 if((PIND&0x0f)==0x0f)return0;//判斷有無(wú)按鍵動(dòng)作,沒(méi)有,返回0 else { Delayms(20);//按鍵消抖 if((PIND&0x0f)==0x0f)return0;//再次判斷是否有按鍵動(dòng)作 else { for(i=4

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論