單片機中的紅外運用注意事項_第1頁
單片機中的紅外運用注意事項_第2頁
單片機中的紅外運用注意事項_第3頁
單片機中的紅外運用注意事項_第4頁
單片機中的紅外運用注意事項_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1、紅外遙控系統(tǒng)通用紅外遙控系統(tǒng)由發(fā)射和接收兩人部分組成,應(yīng)用編/解碼專用集成電路芯片來進行控制 操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、led紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放人器、解調(diào)、解碼電路。鍵盤f編碼調(diào)制> led 遙控發(fā)射器遙控接收器圖1紅外遙控系統(tǒng)框圖發(fā)射:紅外遙控器接收:0038紅外接收頭另外,使用51單片機進行解碼。2、原理圖jp5irconwol-5t33pixpd111intot touch intpd遵ouch doutouch busypd51<lcd nvrpd6 16lcd nrdpd7 15rxpd01c20pex) (rxd)pd1 (

2、txd)pd2 (intoi pg (hsrri j pmpd5 (ocia)pd6 (wr)pd7 (rd)51單片機紅外接收頭與單片機連接原理圖從原理圖看出,ir的data腳與51的pd2(p32)相連。2、紅外發(fā)射原理要對紅外遙控器所發(fā)的信號進行解碼,必須先理解這些信號。a)波形首先來看看,當(dāng)我們按下遙控器吋,紅外發(fā)射器是發(fā)送了一個什么樣的信號波形,如下圖:108ms位置g)由上圖所示,當(dāng)一個鍵按下超過22ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖 (由位置1所示)。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼由位置3 所示)將僅由起始碼(9ms)和結(jié)束碼(2

3、.5ms)組成。下面把位置1的波形放人:由位置1的波形得知,這108ms發(fā)射代碼由一個起始碼(9ms),一個結(jié)果碼(4.5ms),低8 位地址碼(川戶編碼)(9ms18ms),高8位地址碼(用戶編碼)(9ms-18ms) ,8位數(shù)據(jù)碼(鍵 值數(shù)據(jù)碼)(9ms18ms)和這8位數(shù)據(jù)的反碼(鍵值數(shù)據(jù)碼反碼)(9ms-18ms)組成。b)編碼格式遙控器發(fā)射的信號由一串0和1的二進制代碼組成.不同的芯片對0和1的編碼有所不同。 通常冇曼徹斯特編碼和脈沖寬度編碼。xs-091遙控板的0和1采用pwm方法編碼,即脈 沖寬度調(diào)制。下圖為一個發(fā)射波形對應(yīng)的編碼方法:4.5ms n r1n一 _n n_yjns

4、4引導(dǎo)碼001i放大0和1的波形如下圖:bic “訂! 0.56m$2.25ms1.125ms遙控碼的“0 "和r粹這種編碼具有以下特征:以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進 制的“0";以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的t”。3、紅外接收原理 a)波形紅外接收頭將38k載波信號過慮,接收到的波形剛好與發(fā)射波形相反:1 發(fā)射數(shù)據(jù)引導(dǎo)碼起始碼001101019ms4. 5ms125b32. 2smlrmj u ltli ltu38k載波 紅外發(fā)射 接收解碼放人,位定義()和位定義1波形如下:

5、遙控碼的“0 ”和r ”4、解碼原理及算法注:代碼寬度算法:16位地址碼的最短寬度:1.12xl6=18ms 16位地址碼的最長寬度:2.24msx 16=36ms 可以得知8位數(shù)據(jù)代碼及其8位反代碼的寬度和不變:(1.12ms+2.24ms) x8=27ms 所有32位代碼的寬度為(18ms+27ms) (36ms+27ms)對于紅外線遙控對于很多電了愛好者來講,都感覺到非常神奇,看不到,摸不著,但能實現(xiàn) 無線遙控,其實控制的關(guān)鍵就是我們要用單片機芯片來識別紅外線遙控器發(fā)出紅外光信號, 即我們通常所說的解碼。單片機得知發(fā)過來的是什么信號,然后再做出相應(yīng)的判斷為控制, 如我們按電視機遙控器的頻

6、道按鈕,則單片機會控制更換電視頻道,如按的是遙控器音量鍵, 則單片機會控制增減音量。解碼的關(guān)鍵是如勺識別“0”和“1”!!從位的定義我們可以發(fā)現(xiàn)丫尸、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同!, “0”為0.56ms,t為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“廠。如果從0.56ms低電平過后,開始延時,0.56ms以后,若讀到的電平為低,說明該位為“(t, 反之則為“1”,為了可靠起見,延時必須比0.56ms長些,但乂不能超過1.12ms,否則如果該 位為“0”,讀到的已是下一位的高電平,因此?。?2ms+0.56ms) /2=0.84ms最為可靠,一 般取0

7、.84ms左右均可。根據(jù)碼的格式,應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才 能讀碼。5、實例代碼:注意一下幾點:1. 從上面“紅外接收頭與單片機連接原理圖"來看,紅外接收頭的型號腳是與51的into和連, 所以需要使用into(外部中斷0).2. 由于解碼過程屮涉及到延時,為精確起見,我們選擇使用定期時1來計時。實例代碼:# include# include/函數(shù)原型void systemlnit(void);void delay_840us(void);void delay_2400us(void);void leddispo;unsigned char getcode(

8、void);/獲得碼 void delay(unsigned char loop);/位變量sbit irin = p3a2;sbit beep=p1a6;sbit swch = p1a7;機器碼鍵值碼;數(shù)碼管顯示緩沖/變量unsigned char kcyvaluc; unsigned char mavalue; unsigned char disbuf4j;unsigned char scan4=0x04,0x08,0x10,0x20; p2 位選擇 unsigned char code tablc16= 共陰碼0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07

9、,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/*延時*/void dclay(unsigncd char loop)unsigned char i;for(i=0;i>8);tr1 = 1;whilc(!tfl);tf1=o;tr1=o;*延時9ms*/void delay_9000us(void) tl1 = 153.6;th 1 =223.6;tri = 1;while(!tfl);tf1 = 0;tri =0;*延時4.5ms*/void delay_4500us(void) th1 = 239.8;tl1 = 204.8;tri = 1;wh

10、ile(!tfl);tfi =0;tri =0;*系統(tǒng)初始化*/void systemlnit(void)irin = 1;ito = 1;tmod = 0x10;/into負(fù)跳變觸發(fā)定時器1工作在方式1ea =exo-+*讀碼*/unsigned char getcode()unsigned char n;static temp = 0;for( n = 0; n v 8; n+ )while(!irin); /等待高電平,開始解碼delay_840us(); / 延時 0.84msif(irin) 若仍然為高電平,則為1,否則為0 temp = (0x80l(tcmp» 1);

11、/ 1 while(irin);/等待跳變成低電平 else temp=()x()()l(temp» 1); / 0return temp;*數(shù)碼管顯示*/void leddispounsigned char i; for(i=0;iv4;i+)po=tabledisbufi;p2 = scani; delay(50); p0=0x00;void main(void)systemlnit();while(l)以卜是杳表顯示disbufo=(keyvalue&0xf0)»4)&0x0f); disbuff l=kcy value &oxof; disb

12、uf2=(mavalue&0xf0)»4)&0x0f); disbuf3j=mavalue&oxof;leddispo;void inten_ir(void) interrupt 0*用戶碼和機器碼*/unsigned char addrl,addrh,num 1 ,num2;ea = 0; 先關(guān)閉外部中斷0delay_9000us(); / 檢測 9ms 開始碼訐(irin) ea= 1;return ;/檢測是否為干擾信號/重新開啟外部中斷0/退出解碼while(!irin); /等待跳為高電平delay_4500us(); / 檢測 4.5ms 結(jié)果碼i

13、f (irin) /檢測是否為干擾信號ea=1;/重新開啟外部中斷0return ;退出解碼/讀碼addrl=getcode(); /用戶編碼高位addrh=getcode(); /用戶編碼低位numl=getcode(); / 機器碼num2=getcode(); / 機器碼反碼校驗是否為錯碼if(numl !=num2)keyvalue=14;ea=1;return;keyvalue=num2;mavalue=addrh;ea=1;代碼分析(只分析關(guān)鍵部位):1. 系統(tǒng)初始化systemlnit()系統(tǒng)初始化時,我們設(shè)置irin為高電平,同時把it0設(shè)置成1,即下降沿(負(fù)跳變)觸發(fā) 中斷。

14、這是用于接收波形的引導(dǎo)碼是從低電平開始的(如上而接收波形所示)。這樣,當(dāng)按 下按鍵時,紅外接收到信號,irin則發(fā)生從預(yù)先設(shè)置的高電平跳為低電平,從而產(chǎn)生中斷。2. 解碼沖斷程序interr_ir(void)首先,第一步把ex0關(guān)中斷,這步至關(guān)重要,因為一個接收波形許多的下降沿,這樣會產(chǎn) 生干擾中斷。接下來,使用定期時0延時9ms,跳過開始碼。注意,延吋后,需要檢測一下干擾信號。下一步,while(!ir!n);等待4.5ms高電平的到來,再延時4.5ms,跳過結(jié)果。引導(dǎo)碼過后,開始讀碼,執(zhí)行g(shù)etcode():32位數(shù)據(jù)碼,分4次讀取,所以執(zhí)行4次getcode(),讀取一個字節(jié)數(shù)據(jù)過程如下: unsigned char getcode()unsigned char n;static temp = 0;for( n = 0; n < 8; n+ )whilc(!irin); /等待高電平,開始解碼delay_840us(); / 延時 0.84msif(irin) 若仍然為高電平,則為1,否則為0temp = (0x80l(tcmp»l); /1while(irin); /等待跳變成低電平else temp=()x()()l(temp» 1); / 0return

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論