红外解码原理及程序
//红外解码原理基本简介:当发射键按下后,就会发射出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;
}
红外解码原理及程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)