摘要
本設(shè)計采用51單片機(jī)作為遙控發(fā)射接收芯片,HS003B作為紅外一體化接收發(fā)射管,在此基礎(chǔ)上設(shè)計了一個簡易的智能紅外遙控系統(tǒng)。系統(tǒng)包括接收和發(fā)射兩大部分,發(fā)射部分有16個按鍵,接收部分含有8盞彩色LED燈、一片二位數(shù)碼管和蜂鳴器系統(tǒng)。發(fā)射部分通過鍵盤掃描判斷哪個鍵被按下,經(jīng)過單片機(jī)編碼程序進(jìn)行編碼,控制紅外發(fā)射電路發(fā)送信號。接收部分解碼信號,實(shí)現(xiàn)相應(yīng)的輸出。本設(shè)計方案結(jié)合紅外遙控設(shè)計簡單、作方便、成本低廉等特點(diǎn)。
1 緒論 1.1課題目的和意義 隨著科技的發(fā)展,人們生活的節(jié)奏也越來越快,隨之人們對方便,快捷的要求也隨之不斷增高。遙控器的出現(xiàn),在一定程度上滿足了人們這個要求。遙控器是由高產(chǎn)的發(fā)明家Robert Adler在五十年代發(fā)明的[1]。而紅外遙控是20世紀(jì)70年代才開始發(fā)展起來的一種遠(yuǎn)程控制技術(shù),其原理是利用紅外線來傳遞控制信號,實(shí)現(xiàn)對控制對象的遠(yuǎn)距離控制,具體來講,就是有發(fā)射器發(fā)出紅外線指令信號,有接收器接收下來并對信號進(jìn)行處理,最后實(shí)現(xiàn)對控制對象的各種功能的遠(yuǎn)程控制。 紅外遙控具有獨(dú)立性、物理特性與可見光相似性、無穿透障礙物的能力及較強(qiáng)的隱蔽性等特點(diǎn)。隨著紅外遙控技術(shù)的開發(fā)和迅速發(fā)展,很多電器采用該項(xiàng)技術(shù),使人們的生活更加便捷。本小組通過紅外遙控技術(shù)來控制多盞彩燈的亮滅情況,實(shí)現(xiàn)各種花型以及數(shù)碼管的數(shù)值顯示。通過本課題的設(shè)計,更好的理解紅外線的編碼解碼方式及其紅外遙控系統(tǒng)的其他工作原理。
1.2紅外線簡介紅外線又稱紅外光波,在電磁波譜中,光波的波長范圍為0.01um~1000um。根據(jù)波長的不同可分為可見光和不可見光,波長為0.38um~0.76um的光波可為可見光,依次為紅、橙、黃、綠、青、藍(lán)、紫七種顏色。光波為0.01um~0.38um的光波為紫外光(線),波長為0.76um~1000um的光波為紅外光(線)。紅外光按波長范圍分為近紅外、中紅外、遠(yuǎn)紅外、極紅外4類。紅外線遙控是利用近紅外光傳送遙控指令的,波長為0.76um~1.5um。用近紅外作為遙控光源,是因?yàn)槟壳凹t外發(fā)射器件(紅外發(fā)光管)與紅外接收器件(光敏二極管、三極管及光電池)的發(fā)光與受光峰值波長一般為0.8um~0.94um,在近紅外光波段內(nèi),二者的光譜正好重合,能夠很好地匹配,可以獲得較高的傳輸效率及較高的可靠性。 1.3紅外遙控系統(tǒng)簡介紅外遙控系統(tǒng)主要由遙控發(fā)射器、一體化接收頭、單片機(jī)、接口電路組成,遙控器用來產(chǎn)生遙控編碼脈沖,驅(qū)動紅外發(fā)射管輸出紅外遙控信號,遙控接收頭完成對遙控信號的放大、檢波、整形、解調(diào)出遙控編碼脈沖。遙控編碼脈沖是一組串行二進(jìn)制碼,對于一般的紅外遙控系統(tǒng),此串行碼輸入到微控制器,由其內(nèi)部CPU完成對遙控指令解碼,并執(zhí)行相應(yīng)的遙控功能。使用遙控器作為控制系統(tǒng)的輸入,需要解決如下幾個關(guān)鍵問題:如何接收紅外遙控信號;如何識別紅外遙控信號以及解碼軟件的設(shè)計、控制程序的設(shè)計。 紅外遙控是單工的紅外通信方式,整個通信中,需要一個發(fā)射端和一個接收端。發(fā)送端采用單片機(jī)將待發(fā)送的二進(jìn)制信號編碼調(diào)制為一系列的脈沖串信號,通過紅外發(fā)射管發(fā)射紅外信號。紅外接收端普遍采用價格便宜,性能可靠的一體化紅外接收頭接收紅外信號,它同時對信號進(jìn)行放大、檢波、整形,得到TTL。
2 課題方案和設(shè)計思路 2.1總體方案 紅外遙控系統(tǒng)一般由紅外發(fā)射裝置和紅外接收設(shè)備兩大部分組成,圖2-1為所示為結(jié)構(gòu)框圖。 圖2-1 系統(tǒng)結(jié)構(gòu)框圖 紅外發(fā)射裝置又由鍵盤電路、紅外編碼芯片、電源和紅外發(fā)射電路組成。紅外接收設(shè)備可由紅外接收電路、紅外解碼芯片、電源和應(yīng)用電路組成。 2.2紅外發(fā)射器設(shè)計2.2.1紅外發(fā)射器原理由于指令數(shù)據(jù)時間周期較長,信號頻率很低,直接發(fā)射傳送效率和距離受限,抗干擾性差,因此,必須采用二次調(diào)制方式,將指令數(shù)據(jù)通過載波信號進(jìn)行調(diào)制,形成較高頻率的復(fù)合信號,在通過紅外發(fā)射二極管產(chǎn)生紅外線發(fā)射出去。
圖2-2 紅外遙控發(fā)射原理框圖 2.2.2紅外編碼紅外編碼有很多種方式,本課題采用脈沖寬度調(diào)制方案,這種遙控碼具有以下特征: 以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”。 波形如下圖。 圖2-3 位“0”和位“1”波形圖 在此介紹較普遍使用的NEG標(biāo)準(zhǔn)。其數(shù)據(jù)格式包括引導(dǎo)碼、用戶碼、數(shù)據(jù)碼和數(shù)據(jù)反碼,編碼共占32位。數(shù)據(jù)反碼是數(shù)據(jù)碼反相后的編碼,編碼用于對數(shù)據(jù)的糾錯。
2.3紅外接收端設(shè)計接收端主要包括紅外接收模塊和解調(diào)單片機(jī)。其中,紅外線接收模塊包括光電轉(zhuǎn)換放大器和解調(diào)電路。當(dāng)紅外線發(fā)射信號進(jìn)入模塊后,在其輸出端得到原先的數(shù)字控制編碼,再經(jīng)過單片機(jī)解碼程序進(jìn)行解碼,便知按下那個鍵,實(shí)現(xiàn)相應(yīng)輸出。P0.0連接蜂鳴器系統(tǒng),每成功接收到信號,蜂鳴器發(fā)出一聲響聲。P1口連接8盞彩燈,接收數(shù)據(jù)不同彩燈的花色不同,P2口、P3.0和P3.1連接一片二位數(shù)管,數(shù)碼管顯示從01到16的數(shù)值,分別對應(yīng)發(fā)射部分的16個按鍵。 3硬件結(jié)構(gòu)設(shè)計與介紹 3.2 紅外發(fā)射電路本遙控發(fā)射器采用脈沖寬度調(diào)制紅外遙控方式,脈沖寬度調(diào)制紅外遙控就是指令信號產(chǎn)生電路以不同的脈沖編碼代表不同的控制指令。 在確定選擇AT89C51作為本設(shè)計發(fā)射電路核心芯片和點(diǎn)觸式開關(guān)作為控制鍵后,加上一個簡單紅外發(fā)射電路和12M晶體震蕩器便可實(shí)現(xiàn)紅外發(fā)射。 發(fā)射部分的主要元件為紅外發(fā)光二極管。它實(shí)際上是一只特殊的發(fā)光二極管,由于其內(nèi)部材料不同于普通發(fā)光二極管,因而在其兩端施加一定電壓時,它發(fā)出的便是紅外線而不是可見光。目前大量使用的紅外發(fā)光二極管發(fā)出的紅外線波長為940nm左右,外形與普通Φ5發(fā)光二極管相同,只是顏色不同[6]。 遙控發(fā)射通過鍵盤,每按下一個鍵,即產(chǎn)生具有不同的編碼數(shù)字脈沖,這種代碼指令信號調(diào)制在38KHz的載波上,激勵紅外光二極管產(chǎn)生不同的脈沖,通過空間的傳送到受控機(jī)的遙控接收器。P1口作為按鍵部分,P3.6口作為發(fā)射部分。 獨(dú)立式鍵盤可工作在查詢方式下,通過I/O口讀入鍵狀態(tài),當(dāng)有鍵被按下時I/O口變?yōu)榈碗娖剑幢话聪碌逆I對應(yīng)為高電平,這樣通過讀電平狀態(tài)可判斷是否有鍵按下和哪個鍵被按下。 
圖3-2 紅外發(fā)射端電路 3.3紅外接收電路設(shè)計3.3.1 紅外接收模塊HS003B是一種常見的紅外接收模塊。紅外接收模塊內(nèi)部含有高頻的濾波電路,專門用來濾除紅外合成信號的載波信號(38KHz),并送出接收到的信號。模 塊有3個引腳;引腳1(GND)為接地端;引腳2(VCC)為為電源正極;引腳3 (OUT)為數(shù)字信號輸出端。 3.3.2數(shù)碼管
表3-1 七段LED字形碼
圖3-4 二位數(shù)碼管顯示器 設(shè)計中用到型號為7SEG-MAX2-CA-BLUE的二位共陽極數(shù)碼管顯示器。它的左下側(cè)的ABCDEFG DP是LED數(shù)碼管顯示器的I/O口,是段選信號,右下側(cè)的12是它的位選信號,就是從左到右分別是第一位到第二位,段選信號與位選信號分別接到單片機(jī)的不同輸出口,例如段選信號可以接到P2口,位選信號可以接到P3.0口和P3.1口,共陽極的字形顯示代碼為:unsigned char[]={0xc0, 0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90},P3.0輸出為0,P3.1輸出為1時,選中第二位,段選信號就執(zhí)行從0到9的顯示,P3.0輸出為1,P3.1輸出為0時,選中第一位,段選信號就執(zhí)行從0到9的顯示。 3.3.3 彩燈系統(tǒng)P1口連接8盞彩燈,P1.0和P1.4連接的是LED-RED,P1.1和P1.5連接的是LED-YELLOW,P1.2和P1.6連接的是LED-GREEN,P1.3和P1.7連接的是LED-BLUE。根據(jù)接收到的信號顯示不同的花型。 
圖3-5 彩燈系統(tǒng)連接圖 3.3.4蜂鳴器系統(tǒng) P0.0連接蜂鳴器系統(tǒng),每成功接收到信號,蜂鳴器發(fā)出一聲響聲。 圖3-6 蜂鳴器系統(tǒng)連接圖 3.3.5紅外接收端電路圖 圖3-7 紅外接收端電路圖 4 軟件設(shè)計 4.1 定時/計數(shù)器功能簡介AT89C51單片機(jī)內(nèi)部設(shè)有兩個16位可編程的定時/計數(shù)器,簡稱定時器0和定時器1,分別用T0和T1表示。其功能同一般定時計數(shù)器,主要作用是:第一,作為一段特定時間長短的定時;第二,可以計算由T1或T0引腳輸入的脈沖數(shù),前者在應(yīng)用上可以產(chǎn)生正確的時間延遲及定時去執(zhí)行中斷服務(wù)程序,而后者則是計數(shù)器或者計頻器的設(shè)計。 這兩個定時器本身有四種工作模式可供使用,如表2所示。 表4-1 四種工作模式 | | | | | | | | | | | | | | 定時器0:分成兩個8位計數(shù)器 定時器1:停止計數(shù) |
4.2 遙控碼的發(fā)射當(dāng)某個操作按鍵按下時,單片機(jī)先讀出鍵值,然后根據(jù)鍵值設(shè)定遙控碼的脈沖個數(shù),再調(diào)制成38kHz方波由紅外線發(fā)光管發(fā)射出去[13]。 通常,紅外遙控是將遙控信號(二進(jìn)制脈沖碼)調(diào)制在38KHz的載波上,經(jīng)緩沖放大后送至紅外發(fā)光二極管,轉(zhuǎn)化為紅外信號發(fā)射出去的。為了提高抗干擾性能和降低電源消耗,將上述的遙控編碼脈沖對頻率為38KHz(周期為26us)的載波信號進(jìn)行脈幅調(diào)制(PAM),再經(jīng)緩沖放大后送到紅外發(fā)光管,將遙控信號發(fā)射出去。 紅外信號發(fā)射過程:首先發(fā)射9ms高電平和4.5ms低電平的引導(dǎo)碼,再發(fā)送16位地址碼的前8位,16位地址碼的后8位,8位按鍵數(shù)據(jù)和8位按鍵數(shù)據(jù)反碼。 在實(shí)踐中,采用紅外線遙控方式時,由于受遙控距離,角度等影響,使用效果不是很好,如采用調(diào)頻或調(diào)幅發(fā)射接收碼,可提高遙控距離,并且沒有角度影響。 發(fā)射控制程序由主程序和鍵掃描程序、編碼發(fā)送程序組成,在主程序中,采用鍵掃描子程序完成各個按鍵的功能,遙控發(fā)射主程序的流程圖 (a)紅外發(fā)射主程序流程圖 (b)紅外數(shù)據(jù)發(fā)送子程序流程圖 圖4-1紅外發(fā)射端程序流程圖 4.3 紅外接收紅外遙控解碼程序主要工作為等待紅外線信號出現(xiàn),并跳過引導(dǎo)信號,搜集連續(xù)32位的編碼數(shù)據(jù),并存入內(nèi)存的連續(xù)空間。其位信號判別的原則是:以判斷各個位的波寬信號來決定高低信號(0或1)。 位解碼原理如下: - 解碼為0:高電平寬度0.56ms+低電平寬度0.56ms。
- 解碼為1:高電平寬度0.56ms+低電平寬度1.68ms。
編碼數(shù)據(jù)讀取后,經(jīng)過單片機(jī)將編碼數(shù)據(jù)與鍵盤代碼進(jìn)行比對,即可解調(diào)出具體的按鍵值,便可知按下哪個鍵,而做出相應(yīng)的控制處理,完成紅外遙控的動作。 - 紅外接收主程序流程圖 (b)紅外接收中斷子程序流程圖
圖4-2 紅外接收端程序流程圖 5 課程設(shè)計總結(jié)和心得 這次課程設(shè)計耗用了1個星期的心血,從一開始的確定課題,到后來的資料查找、理論學(xué)習(xí),再有就是調(diào)試和測試過程,這一切都使我的理論知識和動手能力進(jìn)一步提高。 通過本次紅外系統(tǒng)的設(shè)計,我大有收獲。從得到題目到查找資料,從proteus仿真的調(diào)試到失敗后再一次全部重新開始……在這一個充滿挑戰(zhàn)伴隨挫折,充滿熱情伴隨打擊的過程中,我感觸頗深,它已不僅是一個對我的學(xué)習(xí)知識情況和我的應(yīng)用動手能力的檢驗(yàn),而且還是對我的鉆研精神,面對困難的心態(tài),做事的毅力和耐心的考驗(yàn)。我在這個過程中深刻的感受到了做課程設(shè)計的意義所在。這個課題的根本技術(shù)就是單片機(jī)控制技術(shù),加部分外圍電路來實(shí)現(xiàn)一些復(fù)雜的功能。可以根據(jù)要求改變軟件來實(shí)現(xiàn)功能的更新和擴(kuò)展。 本課題的重點(diǎn)、難點(diǎn)是: (1) 考慮電路實(shí)現(xiàn)原理以及與單片機(jī)的接口; (2) 紅外發(fā)送與接收技術(shù); 通過完成本課題,我了解并掌握了紅外遙控技術(shù)的基本理論知識,更深入的掌握單片機(jī)在實(shí)際電路中的開發(fā)和應(yīng)用。為以后從事單片機(jī)軟硬件產(chǎn)品的設(shè)計開發(fā)打下了一定的基礎(chǔ),培養(yǎng)了從事產(chǎn)品研發(fā)的信心。 6 參考文獻(xiàn) [1]單片機(jī)原理與應(yīng)用及C51程序設(shè)計,夏維成 楊加國 編著,清華大學(xué)出版社。 [2] C語言程序設(shè)計(第三版),譚浩強(qiáng) 編著,清華大學(xué)出版社。 [3] 單片機(jī)系統(tǒng)設(shè)計與仿真—基于Proteus,肖婧 編著, 北京航空航天大學(xué)出版社。 [4] DIY玩轉(zhuǎn)51單片機(jī), 王守中 編著,電子工業(yè)出版社。 [5] 單片機(jī)側(cè)控技術(shù)應(yīng)用實(shí)例解析, 許江淳 陳顯寧 陳焰 付麗霞 編著,中國電力出版社。 [6] 單片機(jī)接口模塊應(yīng)用與開發(fā)實(shí)例詳解, 薛小玲 劉志群 賈俊榮 編著, 北 京航空航天大學(xué)出版社 附錄1 Proteus仿真圖 
附錄2 發(fā)射程序
#include <REG51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define SBM 0x80
#define m9 (65536-9000)
#define m4_5 (65536-4500)
#define m1_6 (65536-1630)
#define m_65 (65536-580)
#define m_56 (65536-560)
#define m40 (65536-40000)
#define m56 (65536-56000)
#define m2_25 (65536-2250)
sbit IR = P3^6;
sbit LED = P3^7;
uchar KEY(void);
void SanZhuan(void);
void ZZ(uchar x);
void Z0(uchar temp);
void TT0(bit BT,uint x);
void YS(uchar time);
void main(void)
{ TMOD = 0x01;
IR=1;
while(1)
{SanZhuan();}
}
uchar KEY(void)
{uchar H,L;
H=0;
L=0;
P1 = 0xf0;
if(P1!= 0xf0)
{ YS(10);
if(P1!=0xf0)
{H = P1&0xf0;
P1 = 0x0f;
L = P1&0x0f;
}
return (H+L);
}
return 0;
}
void SanZhuan(void)
{ uchar v;
v = KEY();
switch(v)
{case 0x77:ZZ(0x01);v=0;break;
case 0xb7:ZZ(0x02);v=0;break;
case 0xd7:ZZ(0x03);v=0;break;
case 0xe7:ZZ(0x04);v=0;break;
case 0x7b:ZZ(0x05);v=0;break;
case 0xbb:ZZ(0x06);v=0;break;
case 0xdb:ZZ(0x07);v=0;break;
case 0xeb:ZZ(0x08);v=0;break;
case 0x7d:ZZ(0x09);v=0;break;
case 0xbd:ZZ(0x10);v=0;break;
case 0xdd:ZZ(0x11);v=0;break;
case 0xed:ZZ(0x12);v=0;break;
case 0x7e:ZZ(0x13);v=0;break;
case 0xbe:ZZ(0x14);v=0;break;
case 0xde:ZZ(0x15);v=0;break;
case 0xee:ZZ(0x16);v=0;break;
default:v=0;
}
}
void ZZ(uchar x)
{ TT0(1,m9);
TT0(0,m4_5);
Z0(SBM);
Z0(~SBM);
Z0(x);
Z0(~x);
TT0(1,m_65);
TT0(0,m40);
while(KEY())
{ TT0(1,m9);
TT0(0,m2_25);
TT0( 1,m_56);
TT0(0,m40);
TT0(0,m56);
LED = !LED;
}
LED = 1;
}
void Z0(uchar temp)
{ uchar v;
for (v=0;v<8;v++)
{ TT0(1,m_65);
if(temp&0x01) TT0(0,m1_6);
else TT0(0,m_56);
temp >>= 1;
}
}
void TT0(bit BT,uint x)
{
TH0 = x>>8;
TL0 = x;
TF0=0;
TR0=1;
if(BT == 0) while(!TF0);
else while(1)
{
IR = 0;
if(TF0)break;
if(TF0)break;
IR = 1;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
if(TF0)break;
}
TR0=0;
TF0=0;
IR =1;
}
void YS(uchar time)
{ uchar i,j;
for(i=0; i<time; i++)
for(j=0; j<247; j++)_nop_();
}
附錄3 接收程序
#include<reg51.h>
sbit IRIN=P3^2;
sbit SPK=P0^0;
sbit RELAY=P2^7;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
unsigned char IRDATA[7];
unsigned char tab[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};
unsigned char X1,X2;
void IRZ();
void XSQ();
void main()
{ EA=1;
EX0=1;
IT0=1;
P1=0xff;
P2=0xc0;
P3_0=0;
P3_1=0;
SPK=1;
IRIN=1;
IRZ();
XSQ();
}
void delay(unsigned char x)
{ unsigned char i;
while(x--)
{for(i=0;i<10;i++){}}
}
void fs_d()
{unsigned char i;
for(i=0;i<100;i++)
{delay(4);
SPK=~SPK;
}
SPK=1;
}
void IR_IN() interrupt 0 using 0
{ unsigned char j,k,n=0;
EX0=0;
delay(20);
if(IRIN==1)
{EX0=1;
return;
}
while(!IRIN){delay(1);}
for(j=0;j<4;j++)
{for(k=0;k<8;k++)
{while(IRIN) {delay(1);}
while(!IRIN) {delay(1);}
while(IRIN)
{delay(1);
n++;
if(n>=30)
{ EX0=1;
return;}
}
IRDATA[j]=IRDATA[j]>>1;
if(n>=8){IRDATA[j]=IRDATA[j]|0x80;}
n=0;}
}
if(IRDATA[2]!=~IRDATA[3])
{EX0=1;
return;
}
else {}
fs_d();
EX0=1;
}
void XSQ()
{ while(1)
{ X1 = IRDATA[2]/16;
X2 = IRDATA[2]%16;
P3_0=1;P3_1=1;P2=tab[X1];P3_0=1;delay(200);
P3_0=1;P3_1=0;P2=tab[X2];delay(200);
}
}
void IRZ()
{ while(1)
{
switch(IRDATA[2])
{ case 0x01:{P1=0xee;break;}
case 0x02:{P1=0xdd;break;}
case 0x03:{P1=0xbb;break;}
case 0x04:{P1=0X77;break;}
case 0x05:{P1=0xf0;break;}
case 0x06:{P1=0x0f;break;}
case 0x07:{P1=0xaa;break;}
case 0x08:{P1=0x55;break;}
case 0x09:{P1=0xe7;break;}
case 0x10:{P1=0xdb;break;}
case 0x11:{P1=0xbd;break;}
case 0x12:{P1=0x7e;break;}
case 0x13:{P1=0xc3;break;}
case 0x14:{P1=0x3c;break;}
case 0x15:{P1=0x00;break;}
case 0x16:{P1=0xff;break;}
}
X1 = IRDATA[2]/16;
X2 = IRDATA[2]%16;
P2=tab[X2];P3_1=1;delay(10);P3_1=0;
P2=tab[X1];P3_0=1;delay(10);P3_0=0;
}
}
完整的Word格式文檔51黑下載地址:
單片機(jī)課程設(shè)計.doc
(500.5 KB, 下載次數(shù): 40)
2019-1-8 21:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|