微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 红外解码原理及程序

红外解码原理及程序

时间:11-18 来源:互联网 点击:
//----------------------------------------------------------------------------------------------------------------------------------------------

//红外解码原理基本简介:当发射键按下后,就会发射出33位遥控编码,按下的键不同,发射出的编码不同;
//33位数据中。第一位是起始码,告诉接收器准备开始接收。后面的32位时数据,最开始发送出去的是操控码,用于不同遥控器的识别。同一各遥控器
//所有按键的操控码都相同;发送时,先发低位,再发高位;接下来的数据是操控码的反码,用于验证操控码,同样也是低位在前,高位在后;接下来
//的就是数据了,数据石油8位2进制的数构成,同样低位在前,高位在后。最后的8位数据时前面数据的反码,用于数据的校对;
//在解码时最关键的是怎样识别发送过来的0和1;遥控编码,是用38kHZ的载波发送的;通常, ”0“用0.56ms的低电平和0.56ms的高电平组合而成,脉冲宽度
//位1.12ms;”1“是用0.56ms的低电平和1.69ms的高电平组合而成,脉冲宽度为2.25ms。这页就位我们提供了一种方法来识别0和1,即判别脉冲宽度;这页就是
//本程序所用到的方法;其次,比较关键的是,如何识别起始位;通常用9ms的低电平和4.5ms的高电平组合成起始位,因而同样可以用判别脉冲宽度的方法来识
//别起始位;
//------------------------------------------------------------------------------------------------------------------------------------------------

#include//包含头文件;

//--------------------------------------------------------------------
//重新声明变量标识符;
//--------------------------------------------------------------------
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlongint

sbitout=P3^2;//端口定义;

ucharadd=0,_add=0,tdata=0,_tdata=0;//分别为 操控码,操控反码,数据,数据反码;
ucharadd_up=0,add_down=0,_add_up=0,_add_down=0,tdata_up=0,tdata_down=0,_tdata_up=0,_tdata_down=0;//up代表高4位,down代表低4位;
ucharnum=0;//用于判断接收数据的位数,判断终止位;
ulongbitdata=0x00000000;//用于存放接收到的32位二进制数

bitfinish_flag=0;//结束标志;
bitstart_flag=0;//开始标志;
bittime=1;//数据与开始标志识别;
bitdata_start=0;//数据开始标志;

ucharcodetable[]={
0x28,/*0*/
0x7E,/*1*/
0xA2,/*2*/
0x62,/*3*/
0x74,/*4*/
0x61,/*5*/
0x21,/*6*/
0x7A,/*7*/
0x20,/*8*/
0x60,/*9*/
0x30,/*A*/
0x25,/*b*/
0xA9,/*C*/
0x26,/*d*/
0xA1,/*E*/
0xB1 /*F*/
};

//------------------------------------------------------------------------------------------------------
//所用到函数的声明;
//------------------------------------------------------------------------------------------------------
voiddisplay(uchart);
voidinitial();
bitstart_check(uchardata1,uchardata2);
bittrans_to_bit(uchardata1,uchardata2);
voidtrans_bitdata_to_data();
voidtrans_data();
bitdata_check();
voidinterrupt0();
voiddisplay(uchart);

//-------------------------------------------------------------------------------------------------
//函数名称:delay();
//入口参数:uchar n;
//功能:延时;

//-------------------------------------------------------------------------------------------------

voiddelay(ucharn)
{
while(n--);
}

//-------------------------------------------------------------------------------------------------
//函数名称:initial();
//入口参数:无;
//功能:初始化;

//-------------------------------------------------------------------------------------------------

voidinitial()
{
EA=1;//开总中断;
EX0=1;//开外部中断0;
IT0=1;//外部0中断方式位下降沿中断;
TMOD=0x01;//定时器0,工作方式1;
TH0=0x00;//置初值;
TL0=0x00;
time=1;
num=0;
data_start=0;
start_flag=0;
finish_flag=0;
}

//-------------------------------------------------------------------------------------------------
//函数名称:start_check();
//入口参数:uchar data1,uchar data2;
//出口参数类型:bit;
//功能:开始位判断;
//-------------------------------------------------------------------------------------------------
bitstart_check(uchardata1,uchardata2)
{
uinti;
i=data1*256+data2;
if(i>7500&&i<14500)
return1;
else
return0;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top