找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2813|回复: 2
打印 上一主题 下一主题
收起左侧

关于单片机NEC协议解码值得问题

[复制链接]
跳转到指定楼层
楼主
ID:143967 发表于 2016-10-25 22:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新人第二帖,请帮帮忙!程序大体是进主函数后,检测红外按键,判断是否为错误接收,正确时判断是否是指定的按键,是则执行主要功能,
但是出问题了,用一个变量接收红外函数返回的按键,可是这个变量值按键按下后有时会是0(红外开关键值为0,这样会冲突),
而程序里是没有返回或赋值0的选项。。。
而且重新按下硬件的电源键的第一次按键一定会产生0,复位后会偶尔按下产生,请帮忙看看

uchar Get_IR()                                          //红外解码函数,返回一个字节的数据码
{                                                                  //接收错误返回1
        uchar i,j;
        uchar IR_buf[4]={0};
        uint  temp;         
        temp=Ir_get_low();                                   
        if((temp<9500)&&(temp>8500))             //引导码
        {                 
          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;                                                        //错误返回1
}

void main()
{

        uchar IR_key_0=0XFF;                                        //红外按键
        while(1)
        {
                IR_key_0=Get_IR();
                if(IR_key_0==0X01)P2=0X00;      //LED灯灭点亮
                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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2016-11-13 21:21 | 只看该作者
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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