




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、紅外接收程序講解1、紅外遙控系統(tǒng)通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。 下面,我們將使用下面兩種設(shè)備:另外,使用51單片機(jī)進(jìn)行解碼。2、原理圖從原理圖看出,IR的data腳與51的PD2(P3.2)相連。 2、紅外發(fā)射原理要對(duì)紅外遙控器所發(fā)的信號(hào)進(jìn)行解
2、碼,必須先理解這些信號(hào)。a) 波形首先來看看,當(dāng)我們按下遙控器時(shí),紅外發(fā)射器是發(fā)送了一個(gè)什么樣的信號(hào)波形,如下圖:由上圖所示,當(dāng)一個(gè)鍵按下超過22ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖(由位置1所示)。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼由位置3所示)將僅由起始碼(9ms)和結(jié)束碼(2.5ms)組成。下面把位置1的波形放大: 由位置1的波形得知,這108ms發(fā)射代碼由一個(gè)起始碼(9ms),一個(gè)結(jié)果碼(4.5ms),低8位地址碼(用戶編碼)(9ms18ms),高8位地址碼(用戶編碼)(9ms18ms),8位數(shù)據(jù)碼(鍵值數(shù)據(jù)碼)(9ms18ms)和
3、這8位數(shù)據(jù)的反碼(鍵值數(shù)據(jù)碼反碼)(9ms18ms)組成。b) 編碼格式遙控器發(fā)射的信號(hào)由一串0和1的二進(jìn)制代碼組成不同的芯片對(duì)0和1的編碼有所不同。通常有曼徹斯特編碼和脈沖寬度編碼。XS-091遙控板的0和1采用PWM方法編碼,即脈沖寬度調(diào)制。下圖為一個(gè)發(fā)射波形對(duì)應(yīng)的編碼方法:放大0和1的波形如下圖: 這種編碼具有以下特征:以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”。3、紅外接收原理a) 波形紅外接收頭將38K載波信號(hào)過慮,接收到的波形剛好與發(fā)射波形相
4、反:放大,位定義0和位定義1波形如下: 4、解碼原理及算法注:代碼寬度算法:16位地址碼的最短寬度:1.12×16=18ms 16位地址碼的最長寬度:2.24ms×16=36ms可以得知8位數(shù)據(jù)代碼及其8位反代碼的寬度和不變:(1.12ms+2.24ms)×8=27ms所有32位代碼的寬度為(18ms+27ms)(36ms+27ms)對(duì)于紅外線遙控對(duì)于很多電子愛好者來講,都感覺到非常神奇,看不到,摸不著,但能實(shí)現(xiàn)無線遙控,其實(shí)控制的關(guān)鍵就是我們要用單片機(jī)芯片來識(shí)別紅外線遙控器發(fā)出紅外光信號(hào),即我們通常所說的解碼。單片機(jī)得知發(fā)過來的是什么信號(hào),然后再做出相
5、應(yīng)的判斷與控制,如我們按電視機(jī)遙控器的頻道按鈕,則單片機(jī)會(huì)控制更換電視頻道,如按的是遙控器音量鍵,則單片機(jī)會(huì)控制增減音量。解碼的關(guān)鍵是如何識(shí)別“0”和“1” !從位的定義我們可以發(fā)現(xiàn)“0”、“1”均以 0.56ms的低電平開始,不同的是高電平的寬度不同!,“0”為0.56ms,“1”為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“1”。如果從0.56ms低電平過后,開始延時(shí),0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時(shí)必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56
6、ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。根據(jù)碼的格式,應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。5、實(shí)例代碼:注意一下幾點(diǎn):1. 從上面“紅外接收頭與單片機(jī)連接原理圖”來看,紅外接收頭的型號(hào)腳是與51的int0相連,所以需要使用INT0(外部中斷0).2. 由于解碼過程中涉及到延時(shí),為精確起見,我們選擇使用定期時(shí)1來計(jì)時(shí)。實(shí)例代碼:C+ view plaincopy1. #include 2. #include 3. 4. / 函數(shù)原型
7、; 5. void SystemInit(void); 6. void Delay_840us(void); 7. void Delay_2400us(void); 8. void LedDisp(); 9. unsigned char GetCode(void);/獲得碼 10. void delay(unsigned char loop); 11.
8、 12. / 位變量 13. sbit IRIN = P32; 14. sbit BEEP = P16; 15. sbit swch = P17; 16. 17. / 變量 18. unsigned char KeyValue; &
9、#160;/機(jī)器碼 19. unsigned char MaValue; /鍵值碼; 20. unsigned char disbuf4; /數(shù)碼管顯示緩沖 21. unsigned char scan4=0x04,0x08,0x10,0x20; /p2位選擇 22. unsigned char code
10、 table16 = /共陰碼 23. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71; 24. 25. /* 26. * 延時(shí) 27. */ 28. void delay(unsigned char loop) 29.
11、160; 30. unsigned char i; 31. for(i=0;i>8); 32. TR1=1; 33. while(!TF1);
12、0; 34. TF1=0; 35. TR1=0; 36. 37. 38. /* 39. * 延時(shí)9ms 40. */ 41. void Delay_9000us(void) 42. 43.
13、0;TL1 = 153.6; 44. TH1 = 223.6; 45. TR1 = 1; 46. while(!TF1); 47. TF1 = 0; 48. TR1
14、60;= 0; 49. 50. 51. /* 52. * 延時(shí)4.5ms 53. */ 54. void Delay_4500us(void) 55. 56. TH1 = 239.8; 57. TL1 = 204.8;
15、 58. TR1 = 1; 59. while(!TF1); 60. TF1 = 0; 61. TR1 = 0; 62. 63. 64. /* 65. * 系
16、統(tǒng)初始化 66. */ 67. void SystemInit(void) 68. 69. IRIN = 1; 70. IT0 = 1; /INT0負(fù)跳變觸發(fā) 71.
17、; TMOD = 0x10; /定時(shí)器1工作在方式1 72. EA = 1; 73. EX0 = 1; 74. 75. 76. /* 77. * 讀碼 78. */ 79.
18、unsigned char GetCode() 80. 81. unsigned char n; 82. 83. static temp = 0; 84. 85. for( n = 0;
19、0;n < 8; n+ ) 86. 87. while(!IRIN); / 等待高電平,開始解碼 88. 89. Delay_840us(); / 延時(shí)0.8
20、4ms 90. 91. if(IRIN) / 若仍然為高電平,則為1,否則為0 92. 93. temp = (0x80|(temp>&g
21、t;1); / 1 94. while(IRIN); /等待跳變成低電平 95. 96. else
22、0;97. temp=(0x00|(temp>>1); / 0 98. 99. 100. 101. return&
23、#160;temp; 102. 103. 104. /* 105. * 數(shù)碼管顯示 106. */ 107. void LedDisp() 108. 109. unsigned char i; 110. for(i=0;i<4;i+)
24、0; 111. 112. P0=tabledisbufi; 113. P2 = scani; 114. delay(50);
25、60; 115. P0=0x00; 116. 117. 118. 119. void main(void) 120. 121. SystemInit(); 122. 123. &
26、#160; while(1) 124. 125. /以下是查表顯示 126. disbuf0=(KeyValue&0xf0)>>4)&0x0f); 127. &
27、#160; disbuf1=KeyValue&0x0f; 128. disbuf2=(MaValue&0xf0)>>4)&0x0f); 129. disbuf3=MaValue&0x0f; 130.
28、160; LedDisp(); 131. 132. 133. 134. 135. void interr_ir(void) interrupt 0 136. 137. /* 138.
29、; * 用戶碼和機(jī)器碼 139. */ 140. unsigned char addrl,addrh,num1,num2; 141. 142. EA = 0; /先關(guān)閉外部中斷0 143. 144. &
30、#160; Delay_9000us(); / 檢測9ms開始碼 145. 146. if (IRIN) / 檢測是否為干擾信號(hào) 147. EA = 1; /
31、0;重新開啟外部中斷0 148. return / 退出解碼 149. 150. 151. while(!IRIN)
32、; / 等待跳為高電平 152. 153. Delay_4500us(); / 檢測4.5ms結(jié)果碼 154. 155. if (IRIN) / 檢測是否為干擾信號(hào) 156.
33、 EA = 1; / 重新開啟外部中斷0 157. return / 退出解碼 158. 159. 160. / 讀
34、碼 161. addrl=GetCode(); / 用戶編碼高位 162. addrh=GetCode(); / 用戶編碼低位 163. num1=GetCode(); / 機(jī)器碼 164. num2=GetCode(); /
35、 機(jī)器碼反碼 165. 166. /校驗(yàn)是否為錯(cuò)碼 167. if(num1!=num2) 168. 169. KeyValue=14; 170.
36、60; EA=1; 171. return; 172. 173. 174. KeyValue=num2; 175. MaValue=addrh;
37、0;176. 177. EA=1; 178. 代碼分析(只分析關(guān)鍵部位):1. 系統(tǒng)初始化SystemInit()系統(tǒng)初始化時(shí),我們設(shè)置IRIN為高電平,同時(shí)把IT0設(shè)置成1,即下降沿(負(fù)跳變)觸發(fā)中斷。這是用于接收波形的引導(dǎo)碼是從低電平開始的(如上面接收波形所示)。這樣,當(dāng)按下按鍵時(shí),紅外接收到信號(hào),IRIN則發(fā)生從預(yù)先設(shè)置的高電平跳為低電平,從而產(chǎn)生中斷。2. 解碼-中斷程序 interr_ir(void)首先,第一步把EX0關(guān)中斷,這步至關(guān)重要,因?yàn)橐粋€(gè)接收波形
38、許多的下降沿,這樣會(huì)產(chǎn)生干擾中斷。接下來,使用定期時(shí)0延時(shí)9ms,跳過開始碼。注意,延時(shí)后,需要檢測一下干擾信號(hào)。下一步,while(!IRIN); 等待4.5ms高電平的到來,再延時(shí)4.5ms,跳過結(jié)果。引導(dǎo)碼過后, 開始讀碼,執(zhí)行GetCode():32位數(shù)據(jù)碼,分4次讀取,所以執(zhí)行4次GetCode(),讀取一個(gè)字節(jié)數(shù)據(jù)過程如下:C+ view plaincopy1. unsigned char GetCode() 2. 3. unsigned
39、 char n; 4. 5. static temp = 0; 6. 7. for( n = 0; n < 8; n+ ) 8. 9. while(!IRIN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南錫業(yè)職業(yè)技術(shù)學(xué)院《網(wǎng)絡(luò)路由與交換》2023-2024學(xué)年第二學(xué)期期末試卷
- 大連大學(xué)《兒童文學(xué)作品欣賞》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴陽職業(yè)技術(shù)學(xué)院《獸藥殘留分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 河南農(nóng)業(yè)職業(yè)學(xué)院《中學(xué)數(shù)學(xué)教學(xué)設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 曹妃甸職業(yè)技術(shù)學(xué)院《舞臺(tái)美術(shù)設(shè)計(jì)與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京電影學(xué)院《刑法(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 雅安職業(yè)技術(shù)學(xué)院《中級(jí)財(cái)務(wù)會(huì)計(jì)(上)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京審計(jì)大學(xué)《醫(yī)學(xué)微生物學(xué)理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 白城醫(yī)學(xué)高等專科學(xué)?!陡唠妷号c絕緣技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 齊齊哈爾理工職業(yè)學(xué)院《廣告策劃與新媒體設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 生物+昆一中2025屆高三聯(lián)考試卷及答案(九)
- 2025-2030中國家政行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資研究報(bào)告
- 2025年共青團(tuán)入團(tuán)考試題庫及答案
- 質(zhì)量、環(huán)境、職業(yè)健康安全三合一程序文件
- 學(xué)校教輔征訂管理“三公開、兩承諾、一監(jiān)督”制度
- 課題申報(bào)書:現(xiàn)代產(chǎn)業(yè)學(xué)院內(nèi)部治理結(jié)構(gòu)研究
- 2025年人教版小學(xué)五年級(jí)下冊奧林匹克數(shù)學(xué)競賽試卷(附參考答案)
- 《油氣井套管工程檢測技術(shù)》課件
- 2025年全國國家版圖知識(shí)競賽(中小學(xué)組)題庫及答案(共五篇)匯編
- 2025屆高考語文復(fù)習(xí):2024年新課標(biāo)二卷第九題說題 課件
- 2025年高考語文作文終極押題03 關(guān)于Deepseek(押題理由+作文真題++審題立意+高分范文)(全國)
評(píng)論
0/150
提交評(píng)論