|
发表于 2011-9-3 22:56:10
|
显示全部楼层
void IR_Scan(void)
{ static bool fIR,fCe;
static u8 temp=0;
static u8 Llenght=0;
static u8 Hlenght=0;
static u8 a[33];
static u8 IRData[4];
u8 i,j;
if(GPIO_ReadInputPin(RMT_PORT, RMT_PIN))
{ Hlenght++;
if(fIR) //只处理一次就可以了
{fIR=0;
if(Llenght<95 && Llenght > 80 )
{fCe=1;
IRData[0]=0;IRData[1]=0;IRData[2]=0;IRData[3]=0;
temp=0;
}
Llenght=0;
}
}
else
{Llenght++;
if(!fIR)
{fIR=1;
if(fCe)
{a[temp]=Hlenght;
Hlenght=0;
temp++;
if(temp>=33)
{ temp=0;
_asm("nop");
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{ IRData>>=1;
if( a[i*8+j+1]>12 && a[i*8+j+1]< 27) IRData|=0x80;
}
}
if(IRData[0]==0x0 && IRData[1]==0xff )IRCode=IRData[2];
_asm("nop"); // && IRData[2]==(~IRData[3])
}
}
}
}
} |
|