版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 紅外線接收發(fā)送裝置設(shè)計</p><p><b> 摘 要</b></p><p> 利用紅外線傳輸信息的方式可用于近距離遙控、飛機內(nèi)廣播和航天飛機內(nèi)宇航員間的通信等。同時紅外通信技術(shù)適合于低成本、跨平臺、點對點高速數(shù)據(jù)連接,尤其是嵌入式系統(tǒng)。其主要應(yīng)用:設(shè)備互聯(lián)、信息網(wǎng)關(guān)。設(shè)備互聯(lián)后可完成不同設(shè)備內(nèi)文件與信息的交換。信息網(wǎng)關(guān)負責(zé)連接信息終端和
2、互聯(lián)網(wǎng)。紅外通信技術(shù)是在世界范圍內(nèi)被廣泛使用的一種無線連接技術(shù),被眾多的硬件和軟件平臺所支持。紅外線通信是目前使用較廣泛的一種通信手段。</p><p> 與一般通用的紅外遙控器不同的是它不是利用專用的編解碼芯片來實現(xiàn)發(fā)收端的編解碼,而是應(yīng)用C51 單片機,通過單片機的編、解碼程序來實現(xiàn)紅外信號的發(fā)收,從而實現(xiàn)紅外遙控通信功能。此通信系統(tǒng)經(jīng)過一些必要的擴展,完全可以實現(xiàn)通用和各種專用紅外遙控器的功能。</
3、p><p> 本文所要介紹的內(nèi)容就是如何利用單片機,結(jié)合紅外線器件設(shè)計構(gòu)造出一套簡易的紅外線通信系統(tǒng),以實現(xiàn)在中短距離內(nèi)的紅外無線通信的功能。</p><p> 關(guān)鍵字:單片機紅外通信發(fā)射、接收、遙控、串行接口</p><p><b> 1 緒論</b></p><p> 隨著社會生產(chǎn)力的發(fā)展和技術(shù)的進步,單片機的應(yīng)
4、用越來越廣泛。在遙控應(yīng)用領(lǐng)域,單片機尤其得到了很好的應(yīng)用。很多單片機應(yīng)用系統(tǒng)中,常常利用非電信號傳送控制信息和數(shù)據(jù)信息,以實現(xiàn)遙控或遙測的功能。在各種非電信號中, 紅外線光信號是最經(jīng)常用的。它在各領(lǐng)域都得到廣泛的應(yīng)用,紅外線為不可見光,具有很強的隱蔽性和保密性,因此其在防盜、警戒等安全保衛(wèi)裝置也得到了廣泛的應(yīng)用。因為紅外線通信具有成本低廉、控制簡單、實施方便、簡單易用、結(jié)構(gòu)緊湊和抗干擾能力強、傳輸可靠性高的特點,因此在小型的通信移動設(shè)備
5、中獲得了廣泛的應(yīng)用。試想一下,如果沒有紅外通信,連接這其中的兩個設(shè)備就必須要有一條特制的連線,如果要使它們能夠任意地兩兩互聯(lián)傳輸數(shù)據(jù),該需要多少條連線呢?而有了紅外線通信口,這些問題就都迎刃而解了。本課題要設(shè)計完成的就是一個簡單的基于單片機的紅外通信系統(tǒng),通過單片機的編、解碼程序來實現(xiàn)紅外信號的發(fā)收,從而實現(xiàn)紅外遙控通信功能.此通信系統(tǒng)經(jīng)過一些必要的擴展,完全可以實現(xiàn)通用和各種專用紅外遙控器的功能。實現(xiàn)單片機系統(tǒng)紅外通信的關(guān)鍵在于紅外接
6、口電路的設(shè)計以及接口驅(qū)動程序設(shè)計。</p><p> 2 紅外通信各硬件電路</p><p> 我們這里把整個遙控器系統(tǒng)分為發(fā)射模塊及接收模塊兩部分,和一般通用的遙控器結(jié)構(gòu)相同,本課題設(shè)計的通信系統(tǒng)發(fā)射部分也包括鍵盤矩陣電路、編碼調(diào)制電路、LED 紅外發(fā)射電路;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)解碼電路和解碼顯示電路。各部分電路的設(shè)計思路和具體實現(xiàn)如下。</p><
7、p> 2.1 紅外發(fā)射模塊電路的實現(xiàn)</p><p> 當按下某一按鍵后,遙控器上的遙控芯片便進行編碼產(chǎn)生一組句柄,結(jié)合載波電路的載波(38KHz)而成為合成信號,經(jīng)過放大器提升功率而推動紅外發(fā)射二極管,將紅外線信號發(fā)射出去,所要發(fā)射的句柄必須加上載波才能使信號傳送的距離加長,一般遙控器的有效距離為7m。</p><p> 圖1 基于I/O口的紅外發(fā)射電路</p>
8、<p> 2.1.1 載波信號電路的設(shè)計</p><p><b> 圖2 載波電路圖</b></p><p> 為使紅外信號能夠正確的傳送出去和傳送更遠,我們也需要在編碼信號輸出端加上一個高頻載波信號。通過載波信號的調(diào)制,把編碼信號的有用信息“攜帶”出去,這樣信號的傳送距離就能更長,而且能有效的避免干擾。通過555 時基電路和選擇合適的外圍元件組成頻
9、率為38KHz 的載波脈沖振蕩器,如圖2 所示。圖中,通過調(diào)節(jié)200 歐精密可調(diào)變阻器RP2 的阻值,可以調(diào)整使555 的輸出端輸出為38KHz 的載波信號。</p><p> 2.1.2按鍵輸入電路</p><p><b> 圖3 按鍵輸入電路</b></p><p> 2.1.3串口通信的硬件電路</p><p&g
10、t;<b> 如下圖4所示。</b></p><p> 圖4 串口通信電路</p><p> 2.1.4 紅外發(fā)射電路模塊的系統(tǒng)綜合電路圖</p><p> 通過上面對發(fā)射模塊各部分電路的具體設(shè)計,我們可以得出發(fā)射模塊的系統(tǒng)綜合電路設(shè)計圖如下圖5所示。</p><p> 圖5 發(fā)射模塊系統(tǒng)綜合電路圖</
11、p><p> 2.2 紅外接收模塊電路的實現(xiàn)</p><p> 下圖為紅外接收的工作方塊圖,其主要控制組件為紅外線接收模塊,其內(nèi)部含有高頻的載波電路,專門用來濾除紅外線合成信號的載波信號(38KHz)而送出發(fā)射器的控制信號。當紅外線合成信號進入紅外線接收模塊,在其輸出端便可以得到原先的數(shù)字控制編碼,只要經(jīng)過單片機譯碼程序進行譯碼,便可以得知按下了哪一按鍵,而作出相對應(yīng)的控制處理,完成紅外遙
12、控的動作。</p><p> 圖6 紅外接收工作方塊圖</p><p> 2.2.1 解碼后控制電路</p><p> 無線通信的最終目的就是為了實現(xiàn)無線接收后的控制功能。本課題的無線接收后控制電路設(shè)計為一個數(shù)碼顯示電路和一個響鈴報警電路,這樣既可以實現(xiàn)了紅外無線接收后的控制功能,也可以通過這個電路很直觀的識別解碼的成功與否。具體電路設(shè)計見下圖7。</p
13、><p> 圖7 解碼后數(shù)碼顯示電路</p><p> 電路中根據(jù)發(fā)射端發(fā)射按鍵的數(shù)目,設(shè)計一位的數(shù)碼管來顯示,數(shù)碼管采用的是一個共陰極接法的一位數(shù)碼顯示管,其中0—9 數(shù)碼顯示數(shù)字表示的是發(fā)射按鍵的0—9 的編號數(shù),關(guān)閉按鍵的數(shù)碼顯示符號則用“E”來表示。報警電路部分則只采用了一個5伏電磁型蜂鳴器來報響,通過蜂鳴器的報響從而表示譯碼的成功。</p><p>
14、2.2.2 接收模塊的系統(tǒng)綜合電路圖</p><p> 通過上面對接收模塊各部分電路的具體設(shè)計,我們不難得出接收模塊的系統(tǒng)綜合電路設(shè)計圖見圖8</p><p> 圖8 接收模塊的系統(tǒng)綜合電路圖</p><p> 3 紅外通信系統(tǒng)的軟件設(shè)計</p><p> 軟件的設(shè)計,要求準確無誤的實現(xiàn)紅外遙控器的控制功能,并要求系統(tǒng)具有高的可靠性、
15、快的反應(yīng)速度、以及低的系統(tǒng)功耗。本系統(tǒng)的控制功能主要包括發(fā)射端的鍵盤按鍵輸入,按鍵信息的編碼輸出,接收端的譯碼顯示以及報響控制等功能。</p><p> 下面是對紅外發(fā)射與紅外接收軟件程序設(shè)計的具體闡述。</p><p> 3.1 紅外遙控發(fā)射的軟件程序?qū)崿F(xiàn)</p><p> #include <reg52.h></p><p&
16、gt; #include <intrins.h> //_nop_ ();</p><p> void scan_k0(void); //0</p><p> void scan_k1(void); //1</p><p> void scan_k2(void); //2</p><p> void scan_k3(voi
17、d); //3</p><p> void scan_k4(void); //4</p><p> void scan_k5(void); //5</p><p> void scan_k6(void); //6</p><p> void scan_k7(void); //7</p><p> void s
18、can_k8(void); //8</p><p> void scan_k9(void); //9</p><p> void scan_k10(void);//10</p><p> void send_9000(void);</p><p> void send_1685(void);</p><p>
19、 void send_2000(void);</p><p> void send(unsigned char Data);</p><p> void timer0_int(void);// interrupt 1 ; //T0 中斷子程序 //2ms 計數(shù)器</p><p> ****************************************
20、***************************</p><p> sbit OUT=P1^0;//發(fā)射腳</p><p> sbit K0 =P2^0;</p><p> sbit K1 =P2^1;</p><p> sbit K2 =P2^2;</p><p> sbit K3 =P2^3;<
21、;/p><p> sbit K4 =P2^4;</p><p> sbit K5 =P2^5;</p><p> sbit K6 =P2^6;</p><p> sbit K7 =P2^7;</p><p> sbit K8 =P1^5;</p><p> sbit K9 =P1^6;&
22、lt;/p><p> sbit K10=P1^7;</p><p> sbit TEST1=P3^0;//TEST1</p><p> sbit TEST2=P3^1;//TEST2</p><p> sbit TEST3=P3^2;//TEST3</p><p> sbit TEST4=P3^3;//TEST4
23、</p><p> *******************************************************************</p><p> unsigned char ss ; //system status</p><p> unsigned char n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10; /
24、/鍵齡</p><p> unsigned char wait; //等待釋放</p><p> ###################################################################</p><p> void main()</p><p><b> {</b>&
25、lt;/p><p> OUT=0; //關(guān)閉發(fā)射</p><p> TMOD=0x11; //定時器0 和1 都設(shè)置為方式1 即16 位計數(shù)器</p><p> TL0=0x30;TH0=0x0F8; //T0 定時2ms</p><p> EA=1; //開放總中斷</p><p> ET0=1; //允許T0
26、 中斷</p><p> ET1=0; //禁止T1 中斷</p><p> TR0=1; //啟動T0</p><p><b> while(1);</b></p><p><b> }</b></p><p> *************************
27、******************************************</p><p> void scan_k0(void) //</p><p><b> {</b></p><p> if (K0==0) //按鍵按下時I/O 口為0.</p><p><b> {</b>
28、;</p><p> if (++n0>=9) //鍵盤防抖延時2ms*9=18ms</p><p><b> {</b></p><p> wait=250,n0=0;</p><p><b> send(0);</b></p><p><b>
29、}</b></p><p><b> }</b></p><p><b> }</b></p><p> *******************************************************************</p><p> void scan_
30、k1(void) //</p><p><b> {</b></p><p> if (K1==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p> if (++n1>=9) //鍵盤防抖延時2ms*9=18ms</p><p
31、><b> {</b></p><p> wait=250,n1=0;</p><p><b> send(1);</b></p><p><b> }</b></p><p><b> }</b></p><p>
32、<b> }</b></p><p> *******************************************************************</p><p> void scan_k2(void) //</p><p><b> {</b></p><p>
33、 if (K2==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p> if (++n2>=9)</p><p><b> {</b></p><p> wait=250,n2=0;</p><p><b>
34、 send(2);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> *************************************************
35、******************</p><p> void scan_k3(void) //</p><p><b> {</b></p><p> if (K3==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p>
36、if (++n3>=9)</p><p><b> {</b></p><p> wait=250,n3=0;</p><p><b> send(3);</b></p><p><b> }</b></p><p><b>
37、}</b></p><p><b> }</b></p><p> *******************************************************************</p><p> void scan_k4(void) //</p><p><b>
38、{</b></p><p> if (K4==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p> if (++n4>=9)</p><p><b> {</b></p><p> wait=250,n4=0
39、;</p><p><b> send(4);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> *****************
40、**************************************************</p><p> void scan_k5(void) //</p><p><b> {</b></p><p> if (K5==0) //按鍵按下時I/O 口為0.</p><p><b> {&
41、lt;/b></p><p> if (++n5>=9)</p><p><b> {</b></p><p> wait=250,n5=0;</p><p><b> send(5);</b></p><p><b> }</b>
42、</p><p><b> }</b></p><p><b> }</b></p><p> *******************************************************************</p><p> void scan_k6(void) //
43、</p><p><b> {</b></p><p> if (K6==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p> if (++n6>=9)</p><p><b> {</b><
44、/p><p> wait=250,n6=0;</p><p><b> send(6);</b></p><p><b> }</b></p><p> *******************************************************************<
45、/p><p> void scan_k7(void) //</p><p><b> {</b></p><p> if (K7==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p> if (++n7>=9)</p&
46、gt;<p><b> {</b></p><p> wait=250,n7=0;</p><p><b> send(7);</b></p><p><b> }</b></p><p><b> }</b></p>
47、<p><b> }</b></p><p> *******************************************************************</p><p> void scan_k8(void) //</p><p><b> {</b></p>
48、<p> if (K8==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p> if (++n8>=9)</p><p><b> {</b></p><p> wait=250,n8=0;</p><p>
49、<b> send(8);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> ***************************************
50、****************************</p><p> void scan_k9(void) //</p><p><b> {</b></p><p> if (K9==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p>&
51、lt;p> if (++n9>=9)</p><p><b> {</b></p><p> wait=250,n9=0;</p><p><b> send(9);</b></p><p><b> }</b></p><p>&
52、lt;b> }</b></p><p><b> }</b></p><p> *******************************************************************</p><p> void scan_k10(void) //</p><p>
53、<b> {</b></p><p> if (K10==0) //按鍵按下時I/O 口為0.</p><p><b> {</b></p><p> if (++n10>=9)</p><p><b> {</b></p><p>
54、wait=250,n10=0;</p><p><b> send(10);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> **
55、*****************************************************************</p><p> void send(unsigned char Data)</p><p><b> {</b></p><p> EA=0; //關(guān)中斷</p><p> //-
56、-下面開始發(fā)碼頭--</p><p> send_9000();</p><p> send_4500();</p><p> //..下面開始發(fā)識別碼..</p><p> send_565();//0</p><p> send_560();</p><p> send_565(
57、);//1</p><p> send_565();//0</p><p> send_560();</p><p> send_565();//1</p><p> send_1685();</p><p> send_565();//0</p><p> send_560();&
58、lt;/p><p> send_565();//1</p><p> send_1685();</p><p> send_565();//1</p><p> send_1685();</p><p> //...下面開始發(fā)數(shù)據(jù)碼和數(shù)據(jù)反碼.</p><p> send_565();/
59、/D0</p><p> if((Data & 0x01)==1)send_1685();else send_560();</p><p> send_565();//D1</p><p> if((Data & 0x02)==2)send_1685();else send_560();</p><p> send_5
60、65();//D2</p><p> if((Data & 0x04)==4)send_1685();else send_560();</p><p> send_565();//D3</p><p> if((Data & 0x08)==8)send_1685();else send_560();//</p><p>
61、 send_565();//D0 反</p><p> if((Data & 0x01)==1)send_560();else send_1685();</p><p> send_565();//D1 反</p><p> if((Data & 0x02)==2)send_560();else send_1685();</p>
62、<p> send_565();//D2 反</p><p> if((Data & 0x04)==4)send_560();else send_1685();</p><p> send_565();//D3 反</p><p> if((Data & 0x08)==8)send_560();else send_1685();&
63、lt;/p><p> send_2000();//結(jié)束信號!//</p><p> OUT=0; //停止發(fā)送!</p><p> EA=1; //開中斷</p><p><b> }</b></p><p> void send_9000(void)</p><p>
64、;<b> {</b></p><p> TH1=0x0DC;TL1=0x0D8; //9000us,開始發(fā)碼頭</p><p> TF1=0; //清除溢出標志////++++++++++++++</p><p> TR1=1; //啟動T1</p><p><b> OUT=1;</b>
65、;</p><p> while(!TF1);</p><p><b> }</b></p><p> void send_4500(void)</p><p><b> {</b></p><p> TH1=0x0EE;TL1=0x06C; //4500us<
66、;/p><p> TF1=0; //清除溢出標志</p><p><b> OUT=0;</b></p><p> while(!TF1);</p><p><b> }</b></p><p> void send_560(void)</p><p
67、><b> {</b></p><p> TH1=0x0FD;TL1=0x0D0; //560us</p><p> TF1=0; //清除溢出標志</p><p><b> OUT=0;</b></p><p> while(!TF1);</p><p>&
68、lt;b> }</b></p><p> void send_565(void)</p><p><b> {</b></p><p> TH1=0x0FD;TL1=0x0CB; //565us</p><p> TF1=0; //清除溢出標志</p><p><
69、b> OUT=1;</b></p><p> while(!TF1);</p><p><b> }</b></p><p> void send_1685(void)</p><p><b> {</b></p><p> TH1=0x0F9;
70、TL1=0x06B; //1685us</p><p> TF1=0; //清除溢出標志</p><p><b> OUT=0;</b></p><p> while(!TF1);</p><p><b> }</b></p><p> void send_2000
71、(void)</p><p><b> {</b></p><p> TH1=0x0F8;TL1=0x030; //2000us</p><p> TF1=0; //清除溢出標志</p><p><b> OUT=1;</b></p><p> while(!TF1
72、);</p><p><b> }</b></p><p> void timer0_int(void) interrupt 1 //T0 中斷子程序 //2ms 計數(shù)器;</p><p><b> {</b></p><p> TL0=0x30;TH0=0x0F8; //重裝定時器0 常數(shù)
73、;//定時2ms</p><p> if (wait==0) //如果之前沒有鍵按下或者有鍵按下延時結(jié)束.</p><p><b> {</b></p><p> scan_k0();</p><p> scan_k1(); //</p><p> scan_k2(); //</p
74、><p> scan_k3(); //</p><p> scan_k4(); //</p><p> scan_k5(); //</p><p> scan_k6(); //</p><p> scan_k7(); //</p><p> scan_k8(); //</p>
75、<p> scan_k9(); //</p><p> scan_k10(); //</p><p><b> }</b></p><p><b> else</b></p><p><b> wait--;</b></p><p&g
76、t;<b> }</b></p><p><b> END</b></p><p> 3.2 紅外遙控接收的軟件程序</p><p><b> ORG 0000H</b></p><p> AJMP MAIN; 轉(zhuǎn)入主程序</p><p>
77、ORG 0003H; 外部中斷P3.2 腳INT0 入口地址</p><p> AJMP INT ; 轉(zhuǎn)入外部中斷服務(wù)子程序(解碼程序)</p><p> MAIN: LCALL YS100ms ;延時100ms</p><p> MOV DPTR,#TAB</p><p> SETB EA ; 打開CPU 總中斷請求</p&g
78、t;<p> SETB IT0 ; 設(shè)定INT0 的觸發(fā)方式為脈沖負邊沿觸發(fā)</p><p> SETB EX0 ; 打開INT0 中斷請求</p><p> MOV TMOD,#01H; T0 方式1,16 位計數(shù)器</p><p> SETB TR0; 啟動T0</p><p> CLR ET0; 禁止T0 中斷&
79、lt;/p><p> MOV P0,#0; LED 不顯示</p><p><b> CLR P2.7;</b></p><p> LCALL SPEAK;</p><p><b> AJMP $</b></p><p> ;======================
80、==============================================</p><p> ;以下為進入P3.2 腳外部中斷子程序,也就是解碼程序</p><p> INT: CLR EA ; 暫時關(guān)閉CPU 的所有中斷請求</p><p><b> CLR A;</b></p><p> M
81、OV R6,#10; #10</p><p> H9: ACALL YS861 ; 調(diào)用861 微秒延時子程序</p><p> JB P3.2,EXIT1;</p><p> 延時861 微秒后判斷P3.2 腳是否出現(xiàn)高電平如果有就退出解碼程序</p><p> DJNZ R6,H9 ;重復(fù)10 次,完成對遙控信號的9000 微秒的
82、初始低電平信號識別。</p><p> MOV P1,#1 ; TEST1</p><p> MOV R6,#5 ;</p><p> H45:ACALL YS861; 調(diào)用861 微秒延時子程序</p><p> MOV C,P3.2 ; 將P3.2 引腳此時的電平狀態(tài)0 或1 存入C 中</p><p>
83、 JNC EXIT1 ; 如果為0 就退出</p><p> DJNZ R6,H45; 檢測到高電平1 的話繼續(xù)檢測直到4.7ms 的高電平結(jié)束</p><p> ACALL YS500; 延時500 微秒避開4.5 毫秒的結(jié)果碼</p><p> C_A0_0: JNB P3.2,$ ; 等待地址碼第一位的高電平信號</p><p>
84、 LCALL YS861; 高電平開始后用861 微秒的時間尺去判斷信號此時的電平狀態(tài)</p><p> JB P3.2,EXIT1; 如果為1 就退出</p><p> C_A1_1: JNB P3.2,$ ; 等待地址碼第一位的高電平信號</p><p> LCALL YS861; 高電平開始后用861 微秒的時間尺去判斷信號此時的電平狀態(tài)</p&
85、gt;<p> JNB P3.2,EXIT1; 如果為0 就退出</p><p> LCALL YS1000; 檢測到高電平1 的話,延時1 毫秒等待脈沖高電平結(jié)束</p><p> C_A2_0: JNB P3.2,$ ; 等待地址碼第一位的高電平信號</p><p> LCALL YS861; 高電平開始后用861 微秒的時間尺去判斷信號此
86、時的電平狀態(tài)</p><p> JB P3.2,EXIT1; 如果為1 就退出</p><p> C_A3_0: JNB P3.2,$ ; 等待地址碼第一位的高電平信號</p><p> LCALL YS861; 高電平開始后用861 微秒的時間尺去判斷信號此時的電平狀態(tài)</p><p> JB P3.2,EXIT; 如果為1 就退出
87、</p><p> LCALL YS861; 高電平開始后用861 微秒的時間尺去判斷信號此時的電平狀態(tài)</p><p> JNB P3.2,EXIT; 如果為0 就退出</p><p> LCALL YS1000; 檢測到高電平1 的話,延時1 毫秒等待脈沖高電平結(jié)束</p><p> C_A5_0: JNB P3.2,$ ; 等待
88、地址碼第一位的高電平信號</p><p> LCALL YS861; 高電平開始后用861 微秒的時間尺去判斷信號此時的電平狀態(tài)</p><p> JB P3.2,EXIT; 如果為1 就退出</p><p> C_A6_1: JNB P3.2,$ ; 等待地址碼第一位的高電平信號</p><p> LCALL YS861; 高電平開
89、始后用861 微秒的時間尺去判斷信號此時的電平狀態(tài)</p><p> JNB P3.2,EXIT; 如果為0 就退出</p><p> LCALL YS1000; 檢測到高電平1 的話,延時1 毫秒等待脈沖高電平結(jié)束</p><p> C_A7_1: JNB P3.2,$ ; 等待地址碼第一位的高電平信號</p><p> JNB P
90、3.2,EXIT; 如果為0 就退出</p><p> LCALL YS1000; 檢測到高電平1 的話,延時1 毫秒等待脈沖高電平結(jié)束</p><p> ;MOV P1,#3 ; TEST3</p><p><b> AJMP NEXT</b></p><p> EXIT1: AJMP EXIT ; 中繼跳轉(zhuǎn)&
91、lt;/p><p><b> NEXT: NOP</b></p><p> MOV R1,#1AH ; 設(shè)定1AH 為起始RAM 區(qū)</p><p> MOV R2,#2; 接收從1AH 到1BH 的2 個內(nèi)存,用于存放操作碼和操作反碼</p><p> PP: MOV R3,#4; 每組數(shù)據(jù)為4 位</p&g
92、t;<p> MOV C,P3.2; 將P3.2 引腳此時的電平狀態(tài)0 或1 存入C 中</p><p> JNC UUU; 如果為0 就跳轉(zhuǎn)到UUU</p><p> LCALL YS1000; 檢測到高電平1 的話,延時1 毫秒等待脈沖高電平結(jié)束</p><p><b> UUU:</b></p><
93、;p> RRC A; 將C 中的值0 或1 移入A 中的最低位</p><p> DJNZ R3,JJJJ;</p><p> SWAP A; 接收滿4 位進行處理</p><p> MOV @R1,A; 將A 中的數(shù)暫時存放在R1 數(shù)值的內(nèi)存中</p><p> INC R1; 對R1 中的值加1,換下一個RAM</p
94、><p> DJNZ R2,PP ; 接收完4 位數(shù)據(jù)碼和4 位數(shù)據(jù)反碼,存放在1AH/1BH 中</p><p> ;MOV P1,#4 ; TEST4,OK!</p><p><b> MOV A,1AH</b></p><p> CPL A; 對1AH 取反后和1BH 比較</p><p&g
95、t; ANL A,#0FH; 屏蔽高4 位</p><p> ;MOV B,1BH; TEST</p><p> CJNE A,1BH,EXIT;如果不等表示接收數(shù)據(jù)發(fā)生錯誤,放棄</p><p> ;MOV P1,#5 ; TEST5</p><p> MOV A,1AH;</p><p> MOVC A
96、,@A+DPTR ;查表</p><p> LCALL SPEAK; 蜂鳴器響0.1ms,表示解碼成功!</p><p> MOV P0,A; 將按鍵的段碼通過P0 口的1 個LED 數(shù)碼管顯示出來!</p><p><b> AJMP OK</b></p><p> EXIT: MOV P0,#79H ;顯示解
97、碼出錯"EE"</p><p> ;MOV P1,R6 ;TEST</p><p> OK: SETB EA ; 允許中斷</p><p> RETI ; 退出解碼子程序</p><p> ;==============================================================
98、======</p><p> YS861: MOV R4,#20 ; 延時子程序1,精確延時861 微秒</p><p> D1: MOV R5,#20 ; 1us</p><p> DJNZ R5,$ ; 2us</p><p> DJNZ R4,D1 ; (2us*20+1+2)*20+1=861us</p>&l
99、t;p><b> RET</b></p><p> YS4730: MOV R4,#10 ; 延時子程序2,精確延時4730 微秒</p><p> D2: MOV R5,#235; (2us*235+1+2)*10+1=4731</p><p><b> DJNZ R5,$</b></p>&
100、lt;p> DJNZ R4,D2</p><p><b> RET</b></p><p> YS1000: MOV R4,#2; 延時程序3,精確延時1000 微秒</p><p> D3: MOV R5,#248</p><p><b> DJNZ R5,$</b></p&
101、gt;<p> DJNZ R4,D3</p><p><b> RET</b></p><p> YS500: MOV R5,#248; 延時子程序4,精確延時500 微秒</p><p><b> DJNZ R5,$</b></p><p><b> RET<
102、;/b></p><p> YS100ms:MOV R4,#200; 延時程序5,精確延時100m 秒</p><p> D5: MOV R5,#248</p><p><b> DJNZ R5,$</b></p><p> DJNZ R4,D5</p><p><b>
103、 RET</b></p><p> ;--------------------------------------------------------------------</p><p> SPEAK: MOV R6,#1</p><p> LOOP1: MOV R7,#200; 發(fā)聲100ms * 1</p><p>
104、 LOOP2: MOV TH0,#0FEH;</p><p> MOV TL0,#00CH; 500us 定時</p><p><b> CLR TF0;</b></p><p><b> JNB TF0,$</b></p><p><b> CPL P2.7;</b>
105、;</p><p> DJNZ R7,LOOP2</p><p> DJNZ R6,LOOP1</p><p><b> RET</b></p><p> ;--------------------------------------------------------------------</p>
106、<p> TAB: DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H</p><p> ; 0 1 2 3 4 5 6 7 8 9 滅</p><p><b> END</b></p><p><b> 結(jié) 論</b></p><p&
107、gt; 利用單片機來實現(xiàn)紅外通信技術(shù),結(jié)合通信原理中的數(shù)字信號編解碼技術(shù),研制出了一套簡單的紅外通信遙控器。通過對系統(tǒng)模塊的測試與調(diào)試,已基本上實現(xiàn)了紅外通信的功能。然而,在一個有限的時間內(nèi),我已經(jīng)把握了紅外通信系統(tǒng)設(shè)計開發(fā)的基本思路和方法。已經(jīng)完成了紅外通信系統(tǒng)遙控器從電路原理圖到電路板圖的設(shè)計,掌握了基于評估板的基本功能程序的開發(fā)和調(diào)試方法與紅外發(fā)射/接收模塊的基本應(yīng)用方法。設(shè)計過程中,學(xué)會了Keil51 集成開發(fā)環(huán)境的應(yīng)用,掌握
108、了基于51 系列單片機評估板的基本功能和使用方法,學(xué)會了評估板主要資源的使用方法,并通過評估板對設(shè)計方案進行了局部驗證。在前期收集資料的相關(guān)研究中,從網(wǎng)站上學(xué)習(xí)到了如何利用單片機來實現(xiàn)紅外遙控器解碼的相關(guān)知識,成功的進行了紅外通信的移植實驗,并獲得了一些紅外通信的重要數(shù)據(jù):這包括硬件參數(shù)及軟件設(shè)計方法。這些對于我后面單片機紅外通信系統(tǒng)的設(shè)計與研究都是有著很好的借鑒意義的。可以說,一次畢業(yè)設(shè)計的完成過程,就是一個不斷的應(yīng)用四年里所學(xué)過的舊
109、知識的過程和不斷的學(xué)習(xí)吸收新知識的過程。這次的完成走完了單片機紅外通信系統(tǒng)設(shè)計開發(fā)的大部分過程,可以說是一次艱苦的嘗試。在嘗試過程</p><p><b> 致 謝</b></p><p> 在課程設(shè)計過程中,我要衷心地感謝我們的老師以及給我?guī)椭耐瑢W(xué),在我整個畢業(yè)設(shè)計過程中,老師給了我很大的幫助和細心的指導(dǎo)。在設(shè)計過程中,當我遇到了困難和問題時,當我們需要他的
110、時候,老師和同學(xué)總是給予我鼓勵和指導(dǎo)他讓我們學(xué)會了以前在課堂上沒有的東西。 另外,我還要特別感謝我所有的搭檔,是他們給了我巨大的勇氣和戰(zhàn)勝困難的信心,在畢業(yè)設(shè)計中我們合作的很愉快,當我們遇到困難時我們一起去探討和研究,一起去戰(zhàn)勝它,大家也一起分享排除問題和困難后的喜悅。 同時大家也發(fā)揚我們慷慨激揚精神:特別能吃苦,特別能攻關(guān),特別能戰(zhàn)斗,特別能奉獻 。</p><p> 在此,我表示真誠的感謝!</p&
111、gt;<p><b> 參考文獻</b></p><p> [1] 蘇長贊 紅外線與超聲波遙控[M].北京:人民郵電出版社,1997 </p><p> [2] 張玉香 新型遙控接收模塊 HS0038[J].無線電,1998.7 </p><p> [3] 肖景和 實用遙控電路[M].北京:人民郵電出版社,199
112、8 </p><p> [4] 李鐘實 實用電子報警器精選百例[M].北京:科學(xué)技術(shù)文獻出版社.1999</p><p> [5] 高茹云 通訊電子線路[M].西安:西安電子科技大學(xué)出版社,1999 </p><p> [6] 劉振海 單片機原理及應(yīng)用技術(shù). 北京: 高等教育出版社, 2003.1</p><p> [7]
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于51單片機課程設(shè)計--基于51單片機的紅外線設(shè)計
- 基于單片機紅外線發(fā)送系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機紅外線發(fā)送系統(tǒng)設(shè)計畢業(yè)論文
- 單片機課程設(shè)計說明書——紅外線避障小車
- 紅外線接收2011
- 紅外線自動干手器課程設(shè)計
- 基于單片機的紅外線計時器的設(shè)計與實現(xiàn)
- 紅外線測轉(zhuǎn)速表課程設(shè)計
- 紅外線自動干手器課程設(shè)計
- 基于單片機的紅外線計時器的設(shè)計與實現(xiàn)
- 基于單片機的紅外線測距儀的設(shè)計系統(tǒng)【畢業(yè)設(shè)計】
- wfs—509_紅外線感應(yīng)開關(guān)課程設(shè)計
- 畢業(yè)論文--基于單片機控制的紅外線遙控電風(fēng)扇設(shè)計
- 電子課程設(shè)計報告----紅外線轉(zhuǎn)速表
- 畢業(yè)設(shè)計--基于單片機的主被動紅外線防盜系統(tǒng)設(shè)計與制作
- 畢業(yè)設(shè)計---基于單片機設(shè)計的紅外線遙控器
- cad課程設(shè)計--紅外線遙感調(diào)速器的設(shè)計
- 畢業(yè)設(shè)計--基于單片機設(shè)計的紅外線遙控器
- 基于at98c2051單片機的紅外線測溫儀的設(shè)計
- 電子技術(shù)課程設(shè)計--紅外線心率計
評論
0/150
提交評論