找回密码
 注册
关于网站域名变更的通知

红外解码

2023-8-24 18:39| 查看: 97| 评论: 0

摘要: 红外解码在日常使用也是很高的,红外协议如下图所示,有不明白的可以搜索一下相关协议介绍;这解码思路是个很适合波形解码,只要是类似的都可以用,比如ASK解码、无线解码等,配合相关协议就可以修改使用,红外具体 ...
[color=rgba(0, 0, 0, 0.9)]红外解码在日常使用也是很高的,红外协议如下图所示,有不明白的可以搜索一下相关协议介绍;这解码思路是个很适合波形解码,只要是类似的都可以用,比如ASK解码、无线解码等,配合相关协议就可以修改使用,红外具体解码过程请看驱动源码!

[color=rgba(0, 0,

//定义变量uint8_t flag = 0;      //标志位,判断是否解码成功uint8_t UncorkData[4]; //存解码数据//放在100us中断内void Uncork(void){  static uint8_t Num;    //计时  static uint8_t NumBit; //计数  static uint8_t Data;   //解码值缓存  static uint8_t UncorkState;  //步骤数
  if( !flag )  {    switch( UncorkState )    {      case 0: //9ms低电平        if( !GPIO_GetInputStatus(Uncork_GPIO) )        {          Num++;        }        else        {          if( Num>=80 && Num<=100 )          {            UncorkState = 1;          }          else          {            UncorkState = 0;          }          Num = 0;        }        break;      case 1: //4.5ms的高电平        if( GPIO_GetInputStatus(Uncork_GPIO) )        {          Num++;        }        else        {          if( Num>=30 && Num<=50 )          {            UncorkState = 2;            NumBit = 0;            Data = 0;          }          else          {            UncorkState = 0;          }          Num = 0;        }        break;      case 2: //解析数据        if( GPIO_GetInputStatus(Uncork_GPIO) )        {          Num++;        }        else        {          if( Num>=5 )          {            NumBit++;            Data = Data>>1;            if( Num >= 9 )            {              Data = Data|0x80;            }            Num = 0;
            if( NumBit == 8 )            {              UncorkData[0] = Data;              Data = 0;            }            if( NumBit == 16 )            {              UncorkData[1] = Data;              Data = 0;            }            if( NumBit == 24 )            {              UncorkData[2] = Data;              Data = 0;            }            if( NumBit == 32 )            {              UncorkData[3] = Data;              Data = 0;              UncorkState = 0;              if( (UncorkData[0] ^ UncorkData[1]) == 0xff);              {                if( (UncorkData[2] ^ UncorkData[3] ) == 0xff);                {                  flag = 0xff;                }              }            }          }          else          {            UncorkState = 0;            Num = 0;          }        }        break;      default: break;    }  }}

640 (2).png
本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。
本站拥有对此声明的最终解释权。
收藏 邀请
上一篇:STM32|DMA实验
关闭

推荐内容上一条 /1 下一条

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-28 00:30 , Processed in 0.140625 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

返回顶部