你是要搞解码,还是编码呢,如果是发送因该是编码
#include
#include
//定义硬件接口
#define KEY P1
#define Key_State_0 0
#define Key_State_1 1
#define Key_State_2 2
#define unlock 1
#define lock 0
sbit IR_OUT = P2^0;
unsigned char time_1ms_flag,display_flag,IR_data,IR_data_R;
bit key_debounce_flag,key_debounce,timer2_c_flag;
unsigned char key_state,key_debounce_C,key_num,key_num_temp,key_temp,key_R,key_attion;
void delay1s(void)
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_();
}
void T2_INT(void)
{
RCAP2H=(0xFFFF-1000)/256;
RCAP2L=(0xFFFF-1000)%256;//12MHz晶振下定时1ms,自动重装
TH2=RCAP2H;
TL2=RCAP2L; //定时器2赋初值
//T2CON=0; //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置
//T2MOD=0; //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0,这里赋值只是为了演示这个寄存器的配置
//IE=0xA0; //1010 0000开总中断,开外定时器2中断,可按位操作:EA=1; ET2=1;
ET2=1;
TR2=1; //启动定时器2
EA = 1;
}
void delay4ms500us(void) //误差 0us
{
unsigned char a,b,c;
for(c=3;c>0;c--)
for(b=136;b>0;b--)
for(a=4;a>0;a--);
}
void delay560us(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=2;b>0;b--)
for(a=137;a>0;a--);
}
void delay1ms690us(void) //误差 0us
{
unsigned char a,b;
for(b=241;b>0;b--)
for(a=2;a>0;a--);
}
void IR_CODE(void)
{
unsigned char j;
IR_data_R=~IR_data;
IR_OUT=1;
delay4ms500us();
delay4ms500us();
IR_OUT=0;
delay4ms500us();
for(j=0;j<16;j++)
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay560us();
}
for(j=0;j<8;j++)
{
if(IR_data&0x01)
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay1ms690us();
}
else
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay560us();
}
IR_data>>=1;
}
for(j=0;j<8;j++)
{
if(IR_data_R&0x01)
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay1ms690us();
}
else
{
IR_OUT=1;
delay560us();
IR_OUT=0;
delay560us();
}
IR_data_R>>=1;
}
}
void play_attion(void)
{
if(key_attion==16)
{
key_attion=0;
IR_data=0x0f;
IR_CODE();
}
if(key_attion==15)
{
key_attion=0;
IR_data=0x0e;
IR_CODE();
}
if(key_attion==14)
{
key_attion=0;
IR_data=0x0d;
IR_CODE();
}
if(key_attion==13)
{
key_attion=0;
IR_data=0x0c;
IR_CODE();
}
if(key_attion==12)
{
key_attion=0;
IR_data=0x0b;
IR_CODE();
}
if(key_attion==11)
{
key_attion=0;
IR_data=0x0a;
IR_CODE();
}
if(key_attion==10)
{
key_attion=0;
IR_data=0x09;
IR_CODE();
}
if(key_attion==9)
{
key_attion=0;
IR_data=0x08;
IR_CODE();
}
if(key_attion==8)
{
key_attion=0;
IR_data=0x07;
IR_CODE();
}
if(key_attion==7)
{
key_attion=0;
IR_data=0x06;
IR_CODE();
}
if(key_attion==6)
{
key_attion=0;
IR_data=0x05;
IR_CODE();
}
if(key_attion==5)
{
key_attion=0;
IR_data=0x04;
IR_CODE();
}
if(key_attion==4)
{
key_attion=0;
IR_data=0x03;
IR_CODE();
}
if(key_attion==3)
{
key_attion=0;
IR_data=0x02;
IR_CODE();
}
if(key_attion==2)
{
key_attion=0;
IR_data=0x01;
IR_CODE();
}
if(key_attion==1)
{
key_attion=0;
IR_data=0x00;
IR_CODE();
}
}
void main (void)
{
delay1s();
P1=0x0F;
T2_INT();
IR_OUT =0;
while(1)
{
play_attion();
}
}
void timer2() interrupt 5
{
//!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!
TF2=0;
switch(key_state)
{
case Key_State_0:
if(KEY!=0x0F)
{
key_state = Key_State_1;
key_debounce_flag = unlock;
KEY=0x7F;
key_temp=KEY;
if(key_temp==0x7E){key_num_temp=4;}
if(key_temp==0x7D){key_num_temp=8;}
if(key_temp==0x7B){key_num_temp=12;}
if(key_temp==0x77){key_num_temp=16;}
KEY=0xBF;
key_temp=KEY;
if(key_temp==0xBE){key_num_temp=3;}
if(key_temp==0xBD){key_num_temp=7;}
if(key_temp==0xBB){key_num_temp=11;}
if(key_temp==0xB7){key_num_temp=15;}
KEY=0xDF;
key_temp=KEY;
if(key_temp==0xDE){key_num_temp=2;}
if(key_temp==0xDD){key_num_temp=6;}
if(key_temp==0xDB){key_num_temp=10;}
if(key_temp==0xD7){key_num_temp=14;}
KEY=0xEF;
key_temp=KEY;
if(key_temp==0xEE){key_num_temp=1;}
if(key_temp==0xED){key_num_temp=5;}
if(key_temp==0xEB){key_num_temp=9;}
if(key_temp==0xE7){key_num_temp=13;}
KEY=0x0F;
}
break;
case Key_State_1:
if(key_debounce==1)
{
key_debounce = 0;
KEY=0x7F;
key_temp=KEY;
if(key_temp==0x7E){key_num=4;}
if(key_temp==0x7D){key_num=8;}
if(key_temp==0x7B){key_num=12;}
if(key_temp==0x77){key_num=16;}
KEY=0xBF;
key_temp=KEY;
if(key_temp==0xBE){key_num=3;}
if(key_temp==0xBD){key_num=7;}
if(key_temp==0xBB){key_num=11;}
if(key_temp==0xB7){key_num=15;}
KEY=0xDF;
key_temp=KEY;
if(key_temp==0xDE){key_num=2;}
if(key_temp==0xDD){key_num=6;}
if(key_temp==0xDB){key_num=10;}
if(key_temp==0xD7){key_num=14;}
KEY=0xEF;
key_temp=KEY;
if(key_temp==0xEE){key_num=1;}
if(key_temp==0xED){key_num=5;}
if(key_temp==0xEB){key_num=9;}
if(key_temp==0xE7){key_num=13;}
KEY=0x0F;
if(key_num_temp==key_num)
{
key_state = Key_State_2;
key_R=key_num;
key_num=0;
key_num_temp=0;
}
else
{
key_state = Key_State_0;
}
}
break;
case Key_State_2:
{
if(KEY==0x0F)
{
key_state = Key_State_0;
key_attion=key_R;
/*
if(key_attion==12){out_flag=0;}
else
{
out_flag=1;
}out_flag=1;*/
//code
}
}
}
if(key_debounce_flag==unlock)
{
key_debounce_C++;
if(key_debounce_C==16)
{
key_debounce_C = 0;
key_debounce_flag = lock;
key_debounce = 1;
}
}
}
红外发射管就见过,这模块没用过
需要帮助 的话,可以联系我
是红外感应模块吗?