找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3166|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)NEC協(xié)議解碼值得問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:143967 發(fā)表于 2016-10-25 22:44 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
新人第二帖,請(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);
                        }
                }
       
        }       
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2016-11-13 21:21 | 只看該作者
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表