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

红外解码原理及程序

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

//-------------------------------------------------------------------------------------------------
//函数名称:trans_to_bit();
//入口参数:uchar data1,uchar data2;
//出口参数类型:bit;
//功能:将定时器的值转化位2进制数0和1;

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

bittrans_to_bit(uchardata1,uchardata2)
{
uint i;
i=data1*256+data2;
if(i>1200&&i<2300)
return1;
else
return0;
}

//-------------------------------------------------------------------------------------------------
//函数名称:trans_bitdata_to_data();
//入口参数:无;
//出口参数类型:void;
//功能:分离出操控码,操控反码,数据,数据反码;;

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

voidtrans_bitdata_to_data()
{
add=(uchar)(bitdata&0x000000ff);
_add=(uchar)((bitdata&0x0000ff00)>>8);
tdata=(uchar)((bitdata&0x00ff0000)>>16);
_tdata=(uchar)((bitdata&0xff000000)>>24);
}

//-------------------------------------------------------------------------------------------------
//函数名称:trans_data();
//入口参数:无;
//出口参数类型:void;
//功能:分离出操控码,操控反码,数据,数据反码的高4位和低4位;
//-------------------------------------------------------------------------------------------------
voidtrans_data()
{
add_up=(add&0xf0)/16;
add_down=add&0x0f;
_add_up=(_add&0xf0)/16;
_add_down=_add&0x0f;
tdata_up=(tdata&0xf0)/16;
tdata_down=tdata&0x0f;
_tdata_up=(_tdata&0xf0)/16;
_tdata_down=_tdata&0x0f;

}

//-------------------------------------------------------------------------------------------------
//函数名称:data_check();
//入口参数:无;
//出口参数类型:bit;
//功能:检验所得数据的正确性;
//-------------------------------------------------------------------------------------------------
bitdata_check()
{
if((add==~_add)&&(tdata==~_tdata))
return1;
else
return0;
}

//-------------------------------------------------------------------------------------------------
//函数名称:interrupt0();
//入口参数:无;
//出口参数类型:void;
//功能:外部中断0;

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

voidinterrupt0()interrupt0
{
ucharTH0_BUF,TL0_BUF;//定时器数据缓存;
if(!time&&data_start)//判断起始位是否有效,为第二次中断时;
{
TR0=0;//关定时器0;
if(start_check(TH0,TL0))
{start_flag=1;data_start=0;TH0=0x00;TL0=0x00;TR0=1;}//若起始位有效,置位开始标志位start_flag,定时器重新定时;
else//若起始位无效,初始化,等待下个起始位;
initial();
}

else if(!time&&start_flag)//起始位有效,则在第二次中断时接收数据;
{
TR0=0;
TH0_BUF=TH0;
TL0_BUF=TL0;
TH0=0x00;
TL0=0x00;
TR0=1;
bitdata=bitdata>>1;//先移位,后赋值;
if(trans_to_bit(TH0_BUF,TL0_BUF))
bitdata=bitdata|0x80000000;
else
;
if(num>=31)//接收完成,完成标志finish_flag置位;
finish_flag=1;
else
num++;
}
elseif(time)//第一此中断,开定时器;
{
time=!time;
TR0=1;
data_start=1;
}
}

//-------------------------------------------------------------------------------------------------
//函数名称:display();
//入口参数:uchar t;
//出口参数类型:void;
//功能:显示函数;

//-------------------------------------------------------------------------------------------------
voiddisplay(uchart)
{
while(t--)
{
P0=0x00;
P2=0xfe;
P0=table[add_up];
delay(10);
P0=0x00;
P2=0xfd;
P0=table[add_down];
delay(10);
P0=0x00;
P2=0xfb;
P0=table[_add_up];
delay(10);
P0=0x00;
P2=0xf7;
P0=table[_add_down];
delay(10);
P0=0x00;
P2=0xef;
P0=table[tdata_up];
delay(10);
P0=0x00;
P2=0xdf;
P0=table[tdata_down];
delay(10);
P0=0x00;
P2=0xbf;
P0=table[_tdata_up];
delay(10);
P0=0x00;
P2=0x7f;
P0=table[_tdata_down];
delay(10);
}
}

//----------------------------------------------------------------------------------------------
//主函数入口;
//----------------------------------------------------------------------------------------------

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

网站地图

Top