新人第二帖,请帮帮忙!程序大体是进主函数后,检测红外按键,判断是否为错误接收,正确时判断是否是指定的按键,是则执行主要功能,
但是出问题了,用一个变量接收红外函数返回的按键,可是这个变量值按键按下后有时会是0(红外开关键值为0,这样会冲突),
而程序里是没有返回或赋值0的选项。。。
而且重新按下硬件的电源键的第一次按键一定会产生0,复位后会偶尔按下产生,请帮忙看看
uchar Get_IR() //红外解码函数,返回一个字节的数据码
{ //接收错误返回1
uchar i,j;
uchar IR_buf[4]={0};
uint temp;
temp=Ir_get_low();
if((temp<9500)&&(temp>8500)) //引导码
{
temp=Ir_get_Hignt();
if((temp<5000)&&(temp>4000))
{
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
temp=Ir_get_low(); //低电平
if((temp<800)&&(temp>200))
{
temp=Ir_get_Hignt();
if((temp<2000)&&(temp>200)) //高电平
{
IR_buf[i]>>=1;
if(temp>1120)IR_buf[i]|=0X80;
}
}
}
}
if(i>=4)return IR_buf[2]; //解码,返回
}
}
return 1; //错误返回1
}
void main()
{
uchar IR_key_0=0XFF; //红外按键
while(1)
{
IR_key_0=Get_IR();
if(IR_key_0==0X01)P2=0X00; //LED灯灭点亮
else
if(IR_key_0!=0X01)
{
if(IR_key_0==0X09)
{
}
else
if(IR_key_0==0X00)
{
P2=0X00; //LED灯灭
while(1);
}
}
}
}
|