找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外遙控解碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:75926 發(fā)表于 2015-4-10 16:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#define _1_HighCap         
#define _1_LowFroor         
#define _0_HighCap         
#define _0_LowFroor      

#define Head_Cap
#define Head_Froor

#define IRDA_Read()    //讀出IRDA引腳的電平的方法
// 當高電平的時間在  
_1_LowFroor和_1_HighCap之間時認為接收到   1
//當高電平時間在
_0_LowFroor 和 _0_HighCap   之間時認為就收到   0

uint16_t Get_LowTime(void)
{
    //實現(xiàn)一個獲取高電平的時間的函數(shù)
}

uint16_t Get_HighTime(void)
{
    //實現(xiàn)一個回去低電平時間的函數(shù)
}

void Test(void)
{
    uint8_t HeadCode=0;   //第七位為 1表示接收到頭碼  [6:0]位 用來存儲 接收到的電平個數(shù)  
    uint8_t Irad_Buff[4];   //0-7 地址碼   8-15 地址碼反碼  16-23 數(shù)據(jù)碼  24-31 數(shù)據(jù)碼反碼
    uint8_t Byte,Bit;
    uint16_t HighTime;
    while(1)
    {
        if(!IRDA_Read())//出現(xiàn)了低電平
        {
            if(!(HeadCode&0x80))//如果沒有接受到頭碼
            {
                Get_LowTime();//過濾低電平
               
HighTime=Get_HighTime();
                if(HighTime>
Head_Froor&&HighTime<Head_Cap)  //如果高電平的時間在這兩個數(shù)之間 就
認為頭碼來了     {
                    HeadCode|=0x80;//標記頭碼來了
                }
            }
            else
            {
                for(Byte=0;Byte<4;Byte++)
                {
                    for(Bit=0;Bit<8;Bit++)
                    {
                     
  Get_LowTime();//過濾低電平
                        
HighTime=Get_HighTime();
                        if(HighTime>
_1_LowFroor&&HighTime<_1_HighCap)
                        {
                           
Irad_Buff[Byte]>>=1;
                            Irad_Buff[Byte]|=0x80;
                           
HeadCode++;
                        }
                        if(
HighTime>_0_LowFroor&&HighTime<_0_HighCap)
                        {
                           
Irad_Buff[Byte]>>=1;
                            Irad_Buff[Byte]&=0x7f;
                           
HeadCode++;
                        }

                    }
                }
                HeadCode&=0x7f;
            
if(HeadCode==32&&Irad_Buff[0]+Irad_Buff[1]==0xff&&Irad_Buff[2]+Irad_Buff[3]==0xff)
                 {
                    
HeadCode=0;
                    //解碼正確  得到的編碼就是Irad_Buff[2]
                 }
                else
                {
                    //錯誤
                  
HeadCode=0;
                }
            }
        }
    }
}














   



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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