![基于51單片機控制紅外通信[互聯網+]_第1頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/21/0af0c110-ea9a-476e-afd6-49a5fea6cffb/0af0c110-ea9a-476e-afd6-49a5fea6cffb1.gif)
![基于51單片機控制紅外通信[互聯網+]_第2頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/21/0af0c110-ea9a-476e-afd6-49a5fea6cffb/0af0c110-ea9a-476e-afd6-49a5fea6cffb2.gif)
![基于51單片機控制紅外通信[互聯網+]_第3頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/21/0af0c110-ea9a-476e-afd6-49a5fea6cffb/0af0c110-ea9a-476e-afd6-49a5fea6cffb3.gif)
![基于51單片機控制紅外通信[互聯網+]_第4頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/21/0af0c110-ea9a-476e-afd6-49a5fea6cffb/0af0c110-ea9a-476e-afd6-49a5fea6cffb4.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 紅外通信原理紅外遙控有發(fā)送和接收兩個組成部分。發(fā)送端采用單片機將待發(fā)送的二進制信號編碼調制為一系列的脈沖串信號,通過紅外發(fā)射管發(fā)射紅外信號。紅外接收完成對紅外信號的接收、放大、檢波、整形,并解調出遙控編碼脈沖。為了減少干擾, 采用的是價格便宜性能可靠的一體化紅外接收頭(HS0038, 它接收紅外信號頻率為38kHz,周期約26 s) 接收紅外信號,它同時對信號進行放大、檢波、整形得到 TTL 電平的編碼信號,再送給單片機,經單片機解碼并執(zhí)行去控制相關對象。具體實現過程如下:(在這里特別強調:編碼與解碼是一對逆過程,不僅在原理上是一對逆過程,在碼的發(fā)收過程也是互反的,即以前發(fā)射端原始信號是高電
2、平,那接收頭輸出的就是低電平,反之亦然。因此為了保證解碼過程簡單方便,在編碼時應該直接換算成其反碼。) 1.紅外發(fā)射部分:下圖為紅外發(fā)射部分的電路擬圖:編碼過程: (1) 二進制信號的調制二進制信號的調制由單片機來完成,它把編碼后的二進制信號調制成頻率為38kHz的間斷脈沖串(用定時器來完成),相當于用二進制信號的編碼乘以頻率為38kHz的脈沖信號得到的間斷脈沖串,即是調制后用于紅外發(fā)射二極管發(fā)送的信號。(2)PPM編碼這種遙控編碼具有以下特征:遙控編碼脈沖由前導碼、16 位地址碼(8位地址碼、8 位地址碼的反碼)和 16 位操作碼(8 位操作碼、8 位操作碼的反碼)組成。前導碼:是一個遙控碼
3、的起始部分,由一個9ms的高電平 ( 起始碼 ) 和一個4. 5ms的低電平 ( 結果碼 )組成,作為接受數據的準備脈沖。16位地址碼:能區(qū)別不同的紅外遙控設備,防止不同機種遙控碼互相干擾。16 位操作碼:用來執(zhí)行不同的操作。采用脈寬調制的串行碼,以脈寬為0.56ms、間隔0.56ms、周期為1.12ms的組合表示二進制的“0”;以脈寬為1.68ms、間隔0.56ms、周期為2.24ms的組合表示二進制的“1”。 (3)發(fā)送程序#include static bit OP; /紅外發(fā)射管的亮滅控制位static unsigned int count; /延時計數器static unsigned
4、 int endcount; /終止延時計數static unsigned char flag; /紅外發(fā)送標志sbit P3_4=P34;char iraddr1; /十六位地址的第一個字節(jié)char iraddr2; /十六位地址的第二個字節(jié)void SendIRdata(char p_irdata);/發(fā)送子函數void delay();void main(void) count = 0; flag = 0;/無載波 OP = 0;/不亮 P3_4 = 0;/在后面會發(fā)現用OP賦值的 EA = 1; /允許CPU中斷 TMOD = 0x11; /設定時器0和1為16位模式1 ET0 = 1
5、; /定時器0中斷允許 TH0 = 0xFF; TL0 = 0xE6; /設定時值0為38K 也就是每隔26us中斷一次 TR0 = 1;/開始計數 iraddr1=3;/自定義的一個地址 iraddr2=252;/地址反碼 do delay(); SendIRdata(12); while(1); /定時器0中斷處理 void timeint(void) interrupt 1 TH0=0xFF; TL0=0xE6; /設定時值為38K 也就是每隔26us中斷一次 count+; if (flag=1) OP=OP; /如果是待發(fā)送的有效數據flag=1,就在此產生載波(亮滅交變) else
6、 OP = 0; P3_4 = OP; void SendIRdata(char p_irdata)/發(fā)送數據子函數 int i; char irdata=p_irdata; /*/ /發(fā)送9ms的起始碼,并是載波模式有效 endcount=223; flag=1; count=0; while(countendcount);/等待中斷,控制亮滅交變的總時間為9ms /發(fā)送4.5ms的結果碼,并是載波模式無效 endcount=117 flag=0; count=0; dowhile(countendcount); /*/ /發(fā)送十六位地址的前八位 irdata=iraddr1; for(i=
7、0;i8;i+) /一個周期里規(guī)定先以高電平開始,在以低電平結束。先發(fā)送0.56ms的38KHZ“1”的紅外波(即編碼中0.56ms的高電平) endcount=10; flag=1; count=0; dowhile(countendcount); /停止發(fā)送紅外信號(即編碼中的低電平) if(irdata-(irdata/2)*2) /判斷二進制數個位為1還是0 endcount=41; /1為寬的高電平1.68ms elseendcount=15; /0為窄的高電平0.56ms flag=0; count=0; while(count1;/依次取位 /發(fā)送十六位地址的后八位 irdata
8、=iraddr2;/此處已經是地址的反碼 for(i=0;i8;i+) endcount=10; flag=1; count=0; while(countendcount); if(irdata-(irdata/2)*2) endcount=41; else endcount=15; flag=0; count=0; dowhile(count1; /*/ /發(fā)送八位數據 irdata=p_irdata; for(i=0;i8;i+) endcount=10; flag=1; count=0; while(countendcount); if(irdata-(irdata/2)*2) endc
9、ount=41; else endcount=15; flag=0; count=0; dowhile(count1; /發(fā)送八位數據的反碼 irdata=p_irdata;/要將數據位取反 for(i=0;i8;i+) endcount=10; flag=1; count=0; while(countendcount); if(irdata-(irdata/2)*2) endcount=41; else endcount=15; flag=0; count=0; while(count1; endcount=10; flag=1; count=0; dowhile(countendcount
10、); flag=0;void delay() int i,j; for(i=0;i400;i+) for(j=0;j0;a-) for(b=40;b0;b-); void rem()interrupt 0 /中斷函數 uchar ramc=0; /定義接收了4個字節(jié)的變量 uchar count=0; /定義現在接收第幾位變量 uint i=0; /此處變量用來在下面配合連續(xù)監(jiān)測9MS 內是否有高電平 prem=1; for(i=0;i1100;i+) /以下FOR語句執(zhí)行時間為8MS左右 if(prem) /進入遙控接收程序首先進入引導碼的前半部判斷,即:是否有9MS左右的低電平 retur
11、n; /引導碼錯誤則退出 ,注意與break語句的區(qū)別 while(prem!=1); /等待引導碼的后半部 4.5 MS 高電平開始的到來。 delaytime(50); /延時大于4.5MS時間,跨過引導碼的后半部分,來到真正遙控數據32位中/第一位數據的0.56MS開始脈沖for(ramc=0;ramc4;ramc+)/循環(huán)4次接收4個字節(jié) for(count=0;count8;count+) /循環(huán)8次接收8位(一個字節(jié)) while(prem!=1); /開始判斷現在接收到的數據是0或者1 ,首先在這行本句話時, /保已經進入數據的0.56MS 低電平階段 /等待本次接受數據的高電平
12、的到來。 delaytime(9);/高電平到來后,數據0 高電平最多延續(xù)0.56MS,而數據1,高電平可延續(xù)1.66MS大于0.8MS 后我們可以再判斷遙控接收腳的電平。 if(prem) /如果這時高電平仍然在繼續(xù)那么接收到的數據是1的編碼 ramramc=(ramramc1)+1;/將目前接收到的數據位1放到對應的字節(jié)中 delaytime(11); /如果本次接受到的數據是1,那么要繼續(xù)延遲1MS,這樣才能跨/下個位編碼的低電平中(即是開始的0.56MS中) else /否則目前接收到的是數據0的編碼 ramramc=ramramc1; /將目前接收到的數據位0放到對應的字節(jié)中 /本次
13、接收結束,進行下次位接收,此接收動作進行32次,正好完成4個字節(jié)的接收 if(ram2!=(ram3&0x7f) /本次接收碼的判斷 for(i=0;i4;i+) /沒有此對應關系則表明接收失敗,清除接受到的數據 rami=0;returned;main() IT0=1; /設定INT0為邊沿觸發(fā) EX0=1; /打開外部中斷0 EA=1; /全局中斷開關打開 while(1) switch(dis_num) case 0x81: num=0; break; case 0xcf: num=1; break; case 0x92: num=2; break; case 0x86: num=3; break; case 0xcc: num=4; break; case 0xa4: num=5; break; case 0xa0: num=6; break; case 0x8f: num=7; break; case 0x80: num=8; break; case
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋租賃合同的擔保合同
- 商砼購銷的合同
- 采購合同的主要類型
- 物流公司承運合同
- 網絡營銷執(zhí)行作業(yè)指導書
- 平面設計軟件應用作業(yè)指導書
- 公司給員工的勞動合同
- 2025年南京貨運從業(yè)資格證500道題目答案大全
- 電力分配合同(2篇)
- 2024-2025學年高中英語課時分層作業(yè)3含解析新人教版選修9
- 2025年紀檢辦公室工作計劃范文
- 2024年保險公司柜員年終工作總結
- 2025年南瑞集團招聘筆試參考題庫含答案解析
- 七年級上學期歷史期末考試模擬卷02(原卷版)
- 橋梁建設施工組織設計方案
- (新版)中國動態(tài)血壓監(jiān)測基層應用指南(2024年)
- GB/T 44892-2024保險業(yè)車型識別編碼規(guī)則
- 四新技術培訓
- 人教版一年級數學2024版上冊期末測評(提優(yōu)卷一)(含答案)
- 2024年同等學力申碩英語考試真題
- 浙江省杭州市2024年中考語文試卷(含答案)
評論
0/150
提交評論