51微控制器 紅外遙控

2021-09-19 09:11:56 字數 2950 閱讀 6445

紅外遙控系統主要由紅外發射裝置和紅外置收裝置構成。

紅外發射裝置主要由鍵盤電路、紅外編碼晶元、電源和紅外發射電路組成(比如遙控器),如圖:

紅外置收裝置主要由紅外置收電路、紅外解碼晶元、電源和應用電路組成,在微控制器開發板上有紅外置收電路,而且微控制器充當解碼晶元。

人的眼睛能看到的可見光按波長從長到短排列依次為:紅、橙、黃、綠、青、藍、紫。其中紅光的波長範圍為0.62~0.72微公尺,紅外遙控就是利用波長為0.76至1.5微公尺之間的近紅外線來傳送控制訊號的。

紅外訊號的發射由紅外發射電路中的紅外發光二極體完成,通常情況下為了提高抗干擾能力與降低電源消耗,遙控器將遙控訊號(二進位制脈衝碼)調製在載波(載波是傳送資訊的物理基礎和承載工具)上經放大後傳送至紅外二極體,再由二極體轉換為紅外訊號傳送出去。

遙控器上不同的按鍵有著不一樣的鍵值,按下相對應的鍵,紅外二極體就會傳送對應的訊號,接收裝置接收到訊號後會對訊號進行訊號解調後會得到相應按鍵的鍵值,再根據不同的鍵值執行相應的操作。

就像串列埠通訊一樣,紅外通訊也有其自己的通訊協議,我們一般遵循nec協議。

nec規定紅外二極體每次傳送的訊號的資料格式如下:

傳送的資料主要由引導碼、使用者碼1、使用者碼2、資料碼、資料反碼組成。引導碼相當於暗號,當接收裝置接收到正確的引導碼後就開始讀取資料,倆組使用者碼是為了區別其他的紅外發射器發射的訊號,資料碼中的內容就對應著相應的鍵值,資料反碼是為了在接收訊號後檢驗訊號的正確性。(引導碼是「9ms高電平+4.5ms低電平」)

這樣我們雖然清楚了訊號的傳送形式,但是怎麼表達資料傳送中的高低位(「0"和"1」)呢?這又涉及到nec的位定義了,規定:「0.56ms高電平+0.565ms低電平」代表「1」;「0.56ms高電平+1.69ms低電平」代表「0」,就是說「0」與「1」的不同就是他們低電平所持續的時間不同。(ps:傳送資料時從最低位開始傳送)

不知道讀者注意到黑體字標出的傳送沒,為什麼要刻意強調是傳送時的呢?因為微控制器接收到的資料格式與傳送時的恰恰相反,就是說接收時的引導碼是「9ms低電平+4.5ms高電平」;「0」是「0.56ms低電平+0.565ms高電平」;「1」是「0.56ms低電平+1.69ms高電平」。這一點我們要格外注意,因為後續我們在解碼程式中是以接收到的資料為準的!!!

敲**之前首先要對程式有乙個清楚的認識,即明白要做哪幾個模組?這些模組之間要怎麼聯絡起來?在下做的乙個程式是把從紅外發射器中接收到資料經過處理後顯示在數碼管上,這樣看來我的程式就需要如下幾個模組:

1.初始化模組:包括初始化紅外置收引腳(把p3.2外部中斷引腳作為紅外置收引腳)、開啟外部中斷允許位;

2.延時模組:延時模組主要用來分析高低電平持續的時間,從而判斷對應的位是「0」還是「1」;

3.解碼模組:利用外部中斷函式interrupt 0進行資料解碼,其任務是檢驗並接收正確的資料訊號,對使用者碼和資料碼進行分析,即通過檢測高低電平持續的時間來判斷相應的位是「0」還是「1」。然後得出相對應的鍵值,把鍵值對應的數反饋到程式中;

4.顯示模組:其主要任務是接收解碼模組反饋的數值,並將數值顯示在數碼管上;

5.主函式模組:整合前幾個模組。

程式如下:

#include"reg52.h"

#define uint unsigned int

#define uchar unsigned char

sbit a=p2^2;//a、b、c是控制位選的三個引腳

sbit b=p2^3;

sbit c=p2^4;

sbit ir=p3^2;//將紅外置收引腳和外部中斷0引腳定義在一起,

這樣一旦接收到訊號就進入中斷函式進行解碼

uint jz=0,time;//jz存的是鍵值相對應的數值

uchar irdata[4],duan[17]=;

//duan[17]存的是數碼管段選顯示0~f的資料;irdata[4]存的是一組使用者碼和資料碼、資料反碼

void dy(uint n) //延時一次約為0.01ms 用來判斷脈衝時間

void xs(uint x) //數碼管顯示

void init() //初始化

void hhh() interrupt 0 //執行中斷:進行讀取訊號 最後產生鍵值

if(ir==1)//判斷高電平

for(i=0;i<4;i++) //開始讀取使用者碼和資料和資料反碼,

因為使用者碼和資料碼、資料反碼共有4組,所以外層有四組迴圈

} if(ir==1)//進入高電平時間,這一塊比較核心,它判斷了高電平持續時間的長短

if(time>30) return ;

irdata[i]>>=1; //移位運算,空出最高為為下一次採集做準備

if(time>=8)//如果高電平持續時間超過0.85ms代表位是「1」

irdata[i]|=0x80;//或運算,給最高為置1

time=0;//重置

} }}}

if(irdata[2]!=~irdata[3])//irdata[2]與irdata[3]分別是資料碼和資料反碼 ,此操作是檢驗資料準確性

return;

}switch(irdata[2])//反饋鍵值所對應的數值}

void main()

51微控制器 紅外遙控解碼

ir infrared radiation 通用紅外遙控系統由發射和接受兩大部分組成,應用編 解碼專用積體電路晶元來進行控制操作。發射部分包括鍵盤矩陣,編碼調製,led紅外線發射。接受部分包括光,電轉化放大器,解調,解碼電路。接收電路可以使用一種集紅外線接受和放大於一體的一體化紅外置收器,不需要任何...

基於51微控制器 的紅外遙控解碼設計

紅外線遙控在生活中有著廣泛的應用,比如空調,電視,音響,機頂盒等。紅外線遙控實際上就是一種通訊方法,利用led發射紅外線,接收器接收到資料,進行處理後就可以得到傳送端的訊號。利用乙個簡單的紅外線發光二極體,我們可以製作萬能遙控器。眾所周知,電視機的遙控不能控制空調,甚至不同的電視機遙控只能控制自己的...

51微控制器HS0038紅外遙控程式

51微控制器hs0038紅外遙控程式,陣列接收資料為二進位制。把值直接賦給led燈,即可方便判斷遙控是否成功。include define uint unsigned int define uchar unsigned char sbit ir p3 2 unsigned char time wid...