基于單片機的紅外遙控設計與制作_第1頁
基于單片機的紅外遙控設計與制作_第2頁
基于單片機的紅外遙控設計與制作_第3頁
基于單片機的紅外遙控設計與制作_第4頁
基于單片機的紅外遙控設計與制作_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于單片機的紅外遙控設計與制作13工試2班陳舒佳章韜略設計目的對于本課題的研究,其理論中的價值是對紅外線這種電磁波的特性進行更加深入的研究。同時在與單片機和電子電路的共同作用下,找到單片機及電子電路在實際運用中的更多功能,從而挖掘出紅外線和硬件設備結合中的更多可能性。在現實意義中,對于紅外線的使用,它不僅提高了單片機、硬件設備和硬件系統(tǒng)在智能遙控領域的廣泛應用,而相對了在硬件設施上使用了紅外線的遙控技術,也同時大大拓寬了硬件設施的應用范圍。在不久的將來,我相信,人們對于紅外遙控控制的運用,會變得越來越廣。設計要求根本功能要求:以一個單片機作為控制遙控器,另一個單片機控制系統(tǒng)為被遙控對象;用遙控器的10個遙控開關,控制遙控對象的10個電源開關通斷;能實現10個電源開關狀態(tài)顯示;能實現定時開關某一個電源開關。擴展功能:能實現燈光亮度連續(xù)調節(jié);能根據不同電器實現不同時間通斷控制;其他擴展功能。方案設計3.1紅外遙控發(fā)射電路的方案采用指令鍵產生電路產生不同的控制指令,單片機進行狀態(tài)的編碼,直接由單片機的口輸出方波信號控制紅外發(fā)射管進行發(fā)射。紅外發(fā)射管采用普通的紅外發(fā)射二極管。3.2紅外遙控接收電路的方案遙控系統(tǒng)采用紅外線脈沖個數編碼,直接利用單片機軟件解碼,實現功能的遙控。3.3單片機的選擇本設計所編寫的程序比擬簡單,功能也比擬少,所用到的輸入輸出端口也不是很多,所以我們決定用STC89C52單片機來完本錢設計,既方便也很實用。3.4紅外遙控系統(tǒng)電路的原理框圖以及各局部作用各局部作用:〔1〕行列式鍵盤行列式鍵盤又稱為矩陣式鍵盤,用I/O線組成行列結構,按鍵設置在行列的交點上,行列式分別連接到按鍵開關的兩端。鍵盤中有無按鍵按下是由行線送入掃描字及列線讀入列線狀態(tài)字來判斷的,有鍵按下時通過查鍵并執(zhí)行鍵功能程序?!?〕紅外線發(fā)射電路遙控器信息碼由單片機的定時器1中斷產生40KHZ紅外線方波信號。由P3.5口輸出,經過三極管放大,由紅外線發(fā)射管發(fā)送?!?〕單片機單片機用于輸出方波信號控制紅外發(fā)射電路的工作。3.5紅外接收局部原理框圖以及各局部作用各局部作用:(1)+5V電源電路給單片機最小系統(tǒng)、控制電路提供以及紅外接收電路提供電壓。〔2〕紅外接收電路紅外接收電路把接收到的狀態(tài)在內部進行解碼,從而實現不同的功能?!?〕控制電路通過發(fā)射電路的按鍵實現對控制電路的控制作用。3.6系統(tǒng)硬件電路的設計紅外發(fā)射電路:紅外接收電路:遙控發(fā)射及接收控制電路的軟件設計4.1軟件設計流程圖4.1.1鍵掃描程序流程圖相應的按鍵掃描程序:#include<reg52.h>#defineuintunsignedint#defineucharunsignedchar#definekeyrowP0#definekeylineP2ucharcodekeyv[8]={1,2,4,8};ucharkeyscan(void){ucharkeyval,i;keyval=0;keyrow=0xfe;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+1;keyrow=0xfd;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+5;keyrow=0xfb;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+9;keyrow=0xf7;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+13;while(keyline!=0xff);return(keyval);}4.1.2遙控碼發(fā)射程序流程圖紅外信號發(fā)射過程:該遙控器采用脈沖個數編碼,不同的脈沖個數代表不同的碼,最小為2個脈沖,最大為17個脈沖,為了使接收可靠,第一位碼寬為3ms,其余為1ms,遙控碼數據幀間隔大于10ms。當某個被控電器的電源開關被按下時,單片機先讀出鍵值,然后根據鍵值設定遙控碼的脈沖個數,再調制成40kHz方波由紅外線發(fā)光管發(fā)身出去。相應的遙控碼發(fā)射程序如下:sbitremoteout=P3^5;externvoiddelay1ms(uinttime);/*************初始化函數***********/voidinit(void){remoteout=0;IE=0x00;IP=0x08;TMOD=0x22;TH1=0xf3;TL1=0xf3;EA=1;}/*****************發(fā)射函數***********/voidsend_infrared(ucharkeyval){ucharm;ET1=1;TR1=1;delay1ms(3);ET1=0;TR1=0;remoteout=0;for(m=keyval;m>0;m--){delay1ms(1);ET1=1;TR1=1;delay1ms(1);ET1=0;TR1=0;remoteout=0;}delay1ms(10);}/******************40KHZ發(fā)生器************/voidtime_intt1(void)interrupt3{remoteout=~remoteout;}4.1.3遙控發(fā)射主程序流程圖遙控發(fā)射的主程序流程圖:首先初始化程序,然后調用鍵掃描程序。相應的發(fā)射主程序如下:#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharexternucharkeyscan(void);externvoidinit(void);externvoidsend_infrared(ucharkeyval);voiddelay1ms(uinttime){uinti,j;for(i=0;i<time;i++)for(j=0;j<110;j++);}voidmain(){uintkeyval;init();while(1){keyval=keyscan();while(keyscan());if(keyval){send_infrared(keyval);}}}中斷程序流程圖中斷過程:首先判斷低電平脈寬度是否大于2ms,假設脈寬不到2ms,那么中斷返回;假設低電平大于2ms,那么接收并對低電平脈沖計數,接下來看判斷高電平脈寬度沖是否大于3ms,假設脈寬不到3ms,那么返回上一接收計數過程;假設高電平脈寬大于3ms,那么按照脈沖個數至對應功能程序。此時中斷返回。相應的中斷程序如下:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitremotein=P3^1;externvoiddelay1ms(uinttime);ucharvalue;/***********初始化********/voidclearmen(void){EX0=1;EA=1;}/**************外中斷遙控接收函數**************/voidintt0(void)interrupt0{ucharkeyval,k,sign;EX0=0;sign=0;keyval=0;if(remotein==0){delay1ms(2);if(remotein==0)while(1){while(remotein==0);keyval++;k=0;delay1ms(1);while(remotein==1){delay1ms(1);k++;if(k>2){value=keyval-1;sign=1;break;}}if(sign)break;}}EX0=1;}4.1.5遙控接收器主程序流程圖相應的接收主程序:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintexternvoidclearmen(void);externucharvalue;uchartemp;voiddelay1ms(uinttime){uinti,j;for(i=0;i<time;i++)for(j=0;j<110;j++);}voidyouyi(void)//7個流水燈逐個閃動{uinti;temp=0x01;for(i=0;i<8;i++){P2=~temp;delay1ms(1000);temp<<=1;}}voidzuoyi(void)//7個流水燈反向逐個閃動{uinti;temp=0x80;for(i=0;i<8;i++){P2=~temp;delay1ms(1000);Temp>>=1;}}voidquanliang(void){uinti;temp=0xfe;for(i=0;i<8;i++)//7個流水燈依次全部點亮{P2=temp;delay1ms(1000);temp<<=1;}}voidfquanliang(void){uinti;temp=0x7f;for(i=0;i<8;i++)//7個流水燈依次全部點亮{P2=temp;delay1ms(1000);Temp>>=1;}}voidmain(){clearmen();P0=0xff;while(1){if(value==1){P2=0xfe;}if(value==2){P2=0xfd;}if(value==3){P2=0xfb;}if(value==4{P2=0xf7;}if(value==5){P2=0xef;}if(value==6){P2=0xdf;}if(value==7){P2=0xbf;}if(value==8){P2=0x7f;}if(value==9){P1=0xfe;}if(value==10){P1=0xfd;}if(value==11)youyi();if(value==12)zuoyi();if(value==13)quanliang();if(value==14)fquanliang();}}演示結果當按下鍵1時,發(fā)光二極管LED1亮;當按下鍵2時,發(fā)光二極管LED2亮;當按下鍵3時,發(fā)光二極管LED3亮;當按下鍵4時,發(fā)光二極管LED4亮;當按下鍵5時,發(fā)光二極管LED5亮;當按下鍵6時,發(fā)光二極管LED6亮;當按下鍵7時,發(fā)光二極管LED7亮;當按下鍵8時,發(fā)光二極管LED8亮;當按下鍵9時,發(fā)光二極管LED9亮;當按下鍵10時,發(fā)光二極管LED10亮;當按下鍵11時,發(fā)光二極管LED8-LED1依次漸亮;當按下鍵12時,發(fā)光二極管LED1-LED8依次漸亮;當按下鍵13時,發(fā)光二極管LED8-LED1依次全亮;當按下鍵14時,發(fā)光二極管LED1-LED8依次全亮;附錄:1.程序:#include<reg52.h>#defineuintunsignedint#defineucharunsignedchar#definekeyrowP0#definekeylineP2ucharcodekeyv[8]={1,2,4,8};ucharkeyscan(void){ucharkeyval,i;keyval=0;keyrow=0xfe;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+1;keyrow=0xfd;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+5;keyrow=0xfb;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+9;keyrow=0xf7;if(keyline!=0xff)for(i=0;i<4;i++)if(~keyline==keyv[i])keyval=i+13;while(keyline!=0xff);return(keyval);}sbitremoteout=P3^5;externvoiddelay1ms(uinttime);/*************初始化函數***********/voidinit(void){remoteout=0;IE=0x00;IP=0x08;TMOD=0x22;TH1=0xf3;TL1=0xf3;EA=1;}/*****************發(fā)射函數***********/voidsend_infrared(ucharkeyval){ucharm;ET1=1;TR1=1;delay1ms(3);ET1=0;TR1=0;remoteout=0;for(m=keyval;m>0;m--){delay1ET1=1;TR1=1;delay1ms(1);ET1=0;TR1=0;remoteout=0;}delay1ms(10);}/******************40KHZ發(fā)生器************/voidtime_intt1(void)interrupt3{remoteout=~remoteout;}externucharkeyscan(void);externvoidinit(void);externvoidsend_infrared(ucharkeyval);voiddelay1ms(uinttime){uinti,j;for(i=0;i<time;i++)for(j=0;j<110;j++);}voidmain(){uintkeyval;init();while(1){keyval=keyscan();while(keyscan());if(keyval){send_infrared(keyval);}}}接收系統(tǒng):#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitremotein=P3^1;externvoiddelay1ms(uinttime);ucharvalue;/***********初始化********/voidclearmen(void){EX0=1;EA=1;}/**************外中斷遙控接收函數**************/voidintt0(void)interrupt0{ucharkeyval,k,sign;EX0=0;sign=0;keyval=0;if(remotein==0){delay1ms(2);if(remotein==0)while(1){while(remotein==0);keyval++;k=0;delay1ms(1);while(remotein==1){delay1ms(1);k++;if(k>2){value=keyval-1;sign=1;break;}}if(sign)break;}}EX0=1;}接收主程序:externvoidclearmen(void);externucharvalue;uchartemp;voiddelay1ms(uinttime){uinti,j;for(i=0;i<time;i++)for(j=0;j<110;j++);}voidyouyi(void){uinti;temp=0x01;for(i=0;i<8;i++){P2=~temp;delay1ms(1000);temp<<=1;}}voidzuoyi(void){uinti;temp=0x80;for(i=0;i<8;i++){P2=~temp;delay1ms(1000);Temp>>=1;}}voidquanliang(void){uinti;temp=0xfe;for(i=0;i<8;i++){P2=temp;delay1ms(1000);temp<<=1;}}voidfquanliang(void){uinti;temp=0x7f;for(i=0;i<8;i++){P2=temp;delay1ms(1000);Temp>>=1;}}voidmain(){clearmen();P0=0xff;while(1){if(value==1){P2=0xfe;}if(value==2){P2=0xfd;}if(value==3)

溫馨提示

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

評論

0/150

提交評論