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

QQ登錄

只需一步,快速開始

搜索
查看: 3209|回復(fù): 0
收起左側(cè)

紅外遙控解碼

[復(fù)制鏈接]
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引腳的電平的方法
// 當(dāng)高電平的時(shí)間在  
_1_LowFroor和_1_HighCap之間時(shí)認(rèn)為接收到   1
//當(dāng)高電平時(shí)間在
_0_LowFroor 和 _0_HighCap   之間時(shí)認(rèn)為就收到   0

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

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

void Test(void)
{
    uint8_t HeadCode=0;   //第七位為 1表示接收到頭碼  [6:0]位 用來存儲(chǔ) 接收到的電平個(gè)數(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í)間在這兩個(gè)數(shù)之間 就
認(rèn)為頭碼來了     {
                    HeadCode|=0x80;//標(biāo)記頭碼來了
                }
            }
            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
                {
                    //錯(cuò)誤
                  
HeadCode=0;
                }
            }
        }
    }
}














   



回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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