|
新人第二帖,請(qǐng)幫幫忙!程序大體是進(jìn)主函數(shù)后,檢測(cè)紅外按鍵,判斷是否為錯(cuò)誤接收,正確時(shí)判斷是否是指定的按鍵,是則執(zhí)行主要功能,
但是出問(wèn)題了,用一個(gè)變量接收紅外函數(shù)返回的按鍵,可是這個(gè)變量值按鍵按下后有時(shí)會(huì)是0(紅外開(kāi)關(guān)鍵值為0,這樣會(huì)沖突),
而程序里是沒(méi)有返回或賦值0的選項(xiàng)。。。
而且重新按下硬件的電源鍵的第一次按鍵一定會(huì)產(chǎn)生0,復(fù)位后會(huì)偶爾按下產(chǎn)生,請(qǐng)幫忙看看
uchar Get_IR() //紅外解碼函數(shù),返回一個(gè)字節(jié)的數(shù)據(jù)碼
{ //接收錯(cuò)誤返回1
uchar i,j;
uchar IR_buf[4]={0};
uint temp;
temp=Ir_get_low();
if((temp<9500)&&(temp>8500)) //引導(dǎo)碼
{
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; //錯(cuò)誤返回1
}
void main()
{
uchar IR_key_0=0XFF; //紅外按鍵
while(1)
{
IR_key_0=Get_IR();
if(IR_key_0==0X01)P2=0X00; //LED燈滅點(diǎn)亮
else
if(IR_key_0!=0X01)
{
if(IR_key_0==0X09)
{
}
else
if(IR_key_0==0X00)
{
P2=0X00; //LED燈滅
while(1);
}
}
}
}
|
|