AVR學習筆記二十、基于模數(shù)轉(zhuǎn)換的AD鍵盤實驗_第1頁
AVR學習筆記二十、基于模數(shù)轉(zhuǎn)換的AD鍵盤實驗_第2頁
AVR學習筆記二十、基于模數(shù)轉(zhuǎn)換的AD鍵盤實驗_第3頁
AVR學習筆記二十、基于模數(shù)轉(zhuǎn)換的AD鍵盤實驗_第4頁
AVR學習筆記二十、基于模數(shù)轉(zhuǎn)換的AD鍵盤實驗_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、AVR學習習筆記二十十、基于模模數(shù)轉(zhuǎn)換的的AD鍵盤盤實驗20.1 實例功功能在前面的實實例中我們們已經(jīng)學習習了在單片片機系統(tǒng)中中檢測矩陣陣按鍵的接接口電路和和程序設(shè)計計。但是矩矩陣式鍵盤盤仍然要占占用不少II/O口資資源,4XX4鍵盤就就占用了88根I/OO口線,那那么有沒有有更簡單的的辦法,使使用更少的的I/O口口資源檢測測更多的按按鍵呢? 通過前面的的學習,我我們知道按按鍵檢測實實際上是檢檢測連接按按鍵的端口口的高低電電平值,而而我們在前前面的實例例中只是簡簡單的判斷斷連接按鍵鍵的端口的的電平是高高電平(+5V)還還是低電平平(0V)。那么是否否可以通過過電平的微微小變化來來檢測按鍵鍵是否

2、被按按下呢? 在在這個實驗驗中,我們們采用模數(shù)數(shù)轉(zhuǎn)換(AAD)的方方法來實現(xiàn)現(xiàn)1個I/O口識別別16個按按鍵的實驗驗,本實例例分為三個個功能模塊塊,分別描描述如下: 單片機機系統(tǒng):利利用ATmmega116單片機機與AD鍵盤電電路實現(xiàn)11個I/OO口的多按按鍵識別。 外圍電電路:ADD鍵盤電路路、串口電平平轉(zhuǎn)換電路路。 軟件程程序:編寫寫軟件,實實現(xiàn)AD鍵盤識識別16個個按鍵的程程序。通過本實例例的學習,掌掌握以下內(nèi)內(nèi)容: AD鍵鍵盤的電路路設(shè)計和程序?qū)崿F(xiàn)現(xiàn)。 200.2 器件件和原理 200.2.11 AD鍵盤的工工作原理我們知道AAVR單片片機自帶有有內(nèi)部模數(shù)數(shù)轉(zhuǎn)換(AAD)電路路,那么我

3、我們就利用用AVR的的這一特性性來實現(xiàn)利利用一個II/O口檢檢測16個個按鍵的實實驗。圖1為一個個A/D鍵鍵盤的原理理圖,從圖中可可以看出,當當不同的按按鍵被按下下時,ADDC端點處處的電壓不不同,通過過判斷不同同的電壓值值就可以判判斷出是那那個按鍵被被按下。AVR單片片機的A/D轉(zhuǎn)換位位數(shù)為100位,實際際應(yīng)用中我我們只取高高8位的值值就可以分分辨出166個按鍵。我們設(shè)定定AD轉(zhuǎn)換換的參考電電壓為VCCC,這樣樣A/D鍵鍵盤識別準準確度最高高,并且能能夠識別更更多的按鍵鍵。 圖圖1 A/D鍵盤電電路 220.2.2 A/D鍵盤盤的缺陷在實際應(yīng)用用中,我們們是不可能能得到準確確的A/DD轉(zhuǎn)換值

4、的的,這是因因為存在以以下幾種誤誤差:1)、對于于同一點處處的電壓值值,A/DD多次采樣樣的結(jié)果不不可能完全全相同。2)、電阻阻的誤差。電阻值由由于電阻的的精度和環(huán)環(huán)境溫度的的原因,誤誤差較大,所所以A/DD鍵盤各個個按鍵點的的分壓不準準確。3)、為盡盡量減少誤誤差,可以以采取增加加電阻精度度、增加溫溫度補償?shù)鹊确椒?,另另外在軟件件處理時候候要注意消消除按鍵抖抖動等因素素,還要對對實際轉(zhuǎn)換換值和標準準值給出誤誤差補償。4)、如果果按鍵按下下,經(jīng)過AA/D轉(zhuǎn)換換,若實際際轉(zhuǎn)換值在在允許誤差差范圍之內(nèi)內(nèi)(需要實實際測量各各點電壓,并并計算各點點電壓平均均值),則則認為按鍵鍵按下,否否則程序不不響應(yīng)

5、。5)、實際際試驗過程程中,還要要考慮電阻阻的累積誤誤差,選用用精度越高高的電阻,可可分辨的按按鍵數(shù)目越越多。 20.3 電路和連連接 本實驗驗主要有兩兩部分電路路模塊組成成:串口電電平轉(zhuǎn)換電電路,A/D鍵盤盤電路。串口電平平轉(zhuǎn)換電路路在前面的的實例中我我們已經(jīng)做做過介紹,在在此不再重重復。這里里我們重點點介紹一下下A/D鍵盤盤電路。實際試驗驗中我們將將圖1中的的ADC接接點連接到到單片機的的PA1口口,也就是是A/D轉(zhuǎn)轉(zhuǎn)換的ADD1通道。 20.4 程序設(shè)設(shè)計 1、程序序功能在本實例中中,我們利利用串口將A/D鍵盤盤中按下的的按鍵的鍵鍵碼值發(fā)送送到計算機機,通過串串口助手觀觀察實驗結(jié)結(jié)果。

6、2、函數(shù)數(shù)說明 本實例主主要有串口口數(shù)據(jù)發(fā)送送程序和A/D鍵盤識識別程序,串口口數(shù)據(jù)發(fā)送送程序我們們前面例子子中已經(jīng)介介紹過,本本實例的程程序中不再再詳細說明明。 3、編編程說明 使用WIINAVRR開發(fā)環(huán)境境,使用的的是外部112M的晶晶振,所以以需要將mmakeffile文文件中的時時鐘頻率修修改為122M。另外外在程序燒燒錄到單片片機的時候候,熔絲位位也要選擇擇為外部112M晶振振(注意是是晶振,不不是外部振振蕩器,一一定不要選選擇錯了,否否則會導致致單片機不不能再燒寫寫程序)。 4、程序序代碼/* AVRR A/D鍵盤范范例 * MCU: ATmmega116 * 作者: maweei

7、li * 編譯器:WINAAVR * * 20099.4.33 */#incllude #incllude #incllude /中斷斷函數(shù)頭文文件/常量聲聲明#defiine BBAUD 96000 /波波特率設(shè)置置值/全局變變量聲明unsiggned int ADDaata; /AAD轉(zhuǎn)換獲獲得的數(shù)據(jù)據(jù)/函數(shù)聲聲明void Portt_Iniit(vooid); /端口初初始化配置置void Usarrt_Innit(vvoid); /USAART寄存存器設(shè)置void AD_IInit(voidd); /AD初始始化void Usarrt_PuutChaar(unnsignned ccha

8、r cTXDData); /字節(jié)發(fā)發(fā)送函數(shù)void Usarrt_PuutStrring(unsiignedd chaar *ppcStrring); / 字符符串發(fā)送數(shù)數(shù)據(jù)unsiggned int AD_GGetDaata(vvoid); /AAD轉(zhuǎn)換函函數(shù)void GetKKey(vvoid); /顯示示按鍵值int mmain(voidd) unsiignedd chaar Deelay33s;Portt_Iniit();Usarrt_Innit();AD_IInit();Usarrt_PuutStrring(AD鍵鍵盤測試程程序);/Ussart_PutSStrinng(你按下的的按

9、鍵序號號為:);sei(); /使能能全局中斷斷 whille(1)ADDData = ADD_GettDataa();/獲得的的AD值 if(ADDaata 5) /判斷斷是否有按按鍵按下_ddelayy_ms(50); /按按鍵消抖iff(ADDData 5)GGetKeey(); /獲獲取按鍵值值_ddelayy_ms(200);forr(Dellay3ss = 00;Dellay3ss 110;Deelay33s+) /延延時3S_ddelayy_ms(90);/端口狀狀態(tài)初始化化設(shè)置函數(shù)數(shù)void Portt_Iniit()PORTTA = 0X000; DDRAA = 00 x00

10、; /ADCC通道設(shè)置置為輸入口口,高阻態(tài)態(tài)/USAART寄存存器配置函函數(shù)void Usarrt_Innit()UCSRRA = 0X000;UCSRRC |= (1URSSEL) | (11 UCSZZ1) | (1 UUCSZ00); /異步步,數(shù)據(jù)格格式8,N,1 /UUCSRCC寄存器與與UBRRRH寄存器器共用相同同的I/OO地址,寫 UCSSRC 時時, URRSEL 應(yīng)設(shè)置為為 1。UBRRRL = (F_CCPU / BAUUD / 16 - 1) % 2556; /波特率設(shè)設(shè)置UBRRRH = (F_CCPU / BAUUD / 16 - 1) / 2556;UCSRRB

11、|= (1 RRXCIEE) | (1 RXXEN) | (11 TXENN); /發(fā)送使能能/字節(jié)發(fā)發(fā)送函數(shù)void Usarrt_PuutChaar(unnsignned cchar cTXDData)whille( !(UCSSRA & (1 UUDRE) ); /只有數(shù)據(jù)據(jù)寄存器為為空時才能能發(fā)送數(shù)據(jù)據(jù)UDR = cTTXDatta; /發(fā)發(fā)送數(shù)據(jù)送送USARRT I/O數(shù)據(jù)寄寄存器UUDR/接收中中斷函數(shù)ISR(UUSARTT_RXCC_vecct )unsiignedd chaar Reev;Rev = UDDR; /從USARRT I/O數(shù)據(jù)寄寄存器UUDR中讀讀出數(shù)據(jù)Usarr

12、t_PuutChaar(Reev); /將接收收到的數(shù)據(jù)據(jù)發(fā)送void Usarrt_PuutStrring(unsiignedd chaar *ppcStrring)whille (*pcSttringg)Usaart_PPutChhar(*pcSttringg+); Usarrt_PuutChaar(0 xx0D);Usarrt_PuutChaar(0 xx0A); /結(jié)結(jié)尾發(fā)送回回車換行/AD轉(zhuǎn)轉(zhuǎn)換初始化化函數(shù)void AD_IInit()ADMUUX |= (1 RREFS00) | (1 MUUX0) | (11 ADLAAR); /ADCC參考電壓壓為AVccc,ADC結(jié)果果左對齊

13、,選選擇通道AADC1ADCSSRA |= (11 ADENN) | (1 ADDPS2) | (1 ADPPS1); /使能AD轉(zhuǎn)換,ADDC時鐘64分頻/AD轉(zhuǎn)轉(zhuǎn)換函數(shù)unsiggned int AD_GGetDaata()ADCSSRA |= (11 ADSCC); /開始AD轉(zhuǎn)換whille(!(ADCSSRA & (1 AADIF); /等待轉(zhuǎn)轉(zhuǎn)換完成ADCSSRA |= (11 226) & (ADDData 1186) & (ADDaata 1157) & (ADDaata 1135) & (ADDaata 1117) & (ADDaata 1101) & (ADDaata 990) & (AADDatta 778) & (AADDatta 669) & (AADDatta 660) & (AADDatta 552) & (AADDatta 444) & (AADDatta 337) & (AADDatta 228) & (AADDatta 119) & (AADDatta 99) & (ADDDataa 117)Ussart_PutSStrinng(你你按下的按按鍵序號為為:);Ussart_PutCChar(

溫馨提示

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

評論

0/150

提交評論