找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2592|回复: 0
收起左侧

红外遥控解码

[复制链接]
ID:75926 发表于 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)
{
    //实现一个获取高电平的时间的函数
}

uint16_t Get_HighTime(void)
{
    //实现一个回去低电平时间的函数
}

void Test(void)
{
    uint8_t HeadCode=0;   //第七位为 1表示接收到头码  [6:0]位 用来存储 接收到的电平个数  
    uint8_t Irad_Buff[4];   //0-7 地址码   8-15 地址码反码  16-23 数据码  24-31 数据码反码
    uint8_t Byte,Bit;
    uint16_t HighTime;
    while(1)
    {
        if(!IRDA_Read())//出现了低电平
        {
            if(!(HeadCode&0x80))//如果没有接受到头码
            {
                Get_LowTime();//过滤低电平
               
HighTime=Get_HighTime();
                if(HighTime>
Head_Froor&&HighTime<Head_Cap)  //如果高电平的时间在这两个数之间 就
认为头码来了     {
                    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;
                }
            }
        }
    }
}














   



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表