一个很简单的程序,刚开始被自己弄的很复杂,程序自然是越简单越好的,不要想那么多有的没的,注意数字类型
#include "reg52.h"
#define Led P2
typedef unsigned char u8;
typedef unsigned int u16;
//#define uint unsigned int;
//#define uchar unsigned char;
sbit IRIN=P3^2;
u8 Time;
u8 IrValue[6];
u8 code IRdata[22]={0x45,0x46,0x47,0x44,0x40,0x43,0x07,0x15,0x09,0x16,0x19,
0x0d,0x0c,0x18,0x5e,0x08,0x1c,0x5a,0x42,0x52,0x4a};
void delay(u16 i)
{
while(i--);
}
void IrInit()
{
IT0=1;
EX0=1;
EA=1;
IRIN=1;
}
void Ircontrol()
{
u8 i;
// for(i=0;i<8;i++)
// {
// switch(IrValue[2])
// {
// case(0x45):Led=0xfe;break;
// case(0x46):Led=0xfc;break;
// case(0x47):Led=0xfa;break;
// case(0x44):Led=0xf7;break;
// case(0x40):Led=0xef;break;
// case(0x43):Led=0xcf;break;
// case(0x07):Led=0xaf;break;
// case(0x15):Led=0x7f;break;
// }
// }
for(i=0;i<22;i++)
{
if(IrValue[2]==IRdata[i])
Led=IRdata[i];
}
}
void main()
{
IrInit();
while(1)
{
Ircontrol();
}
}
void ReadIr() interrupt 0
{
u8 k,j;
u16 err;
Time=0;
delay(700);
if(IRIN==0)
{
err=1000;
while((IRIN==0)&&(err>0))
{
delay(1);
err--;
}
if(IRIN==1)
{
err=500;
while((IRIN==1)&&(err>0))
{
delay(1);
err--;
}
for(k=0;k<4;k++)
{
for(j=0;j<8;j++)
{
err=60;
while((IRIN==0)&&(err>0))
{
delay(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0))
{
delay(10);
Time++;
err--;
if(Time>30)
{
return;
}
}
IrValue[k]>>=1;
if(Time>=8)
{
IrValue[k]|=0x80;
}
Time=0;
}
}
}
if(IrValue[2]!=~IrValue[3])
{
return;
}
}
}