NEC协议载波:38khz

其逻辑1与逻辑0的表示如图所示:

逻辑1为2.25ms,脉冲时间560us;逻辑0为1.12ms,脉冲时间560us。所以我们根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4。

NEC协议格式:

首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错)。然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit 的命令码的反码。

以上是一个正常的序列,但可能存在一种情况:你一直按着1个键,这样的话发送的是以110ms为周期的重复码,如下图:

就是说,发了一次命令码之后,不会再发送命令码,而是每隔110ms时间,发送一段重复码。

重复码由9ms高电平和2.25ms的低电平以及560us的高电平组成。

需要注意的是:1838红外一体接收头为了提高接受灵敏度。输入高电平,其输出的是相反的低电平。

搞了一个下午和晚上,NEC解码出来还是有点细微差错。查了很久,也没有收获。心里有点小郁闷。今早起来,仔细地看了看他人的参考代码。突然被下面一个小小的细节折服了。

请注意这段代码:

1 void hal_NEC_decode(uchar *addr,uchar *addrt,uchar *comm,uchar *commt)2 {3 uchar i,j,k;4 uchar tmp1=0;5

6 while(NECFinshFlag==0);7 NECFinshFlag=0;8

9 for(i=0,k=1;i<4;i=i+1)10 {11 for(j=1;j<=8;j++)12 {13 if(NECTimerTable[k++] > 7)14 {15 tmp1 |=0x80;16 }17 tmp1 >>=1;18 }19 switch(i)20 {21 case 0:*addr=tmp1;break;22 case 1:*addrt=tmp1;break;23 case 2:*comm=tmp1;break;24 case 3:*commt=tmp1;break;25 }26 tmp1=0;27 }28 }

最后tmp1的值是被右移了1位。所以改为下代码

1 void hal_NEC_decode(uchar *addr,uchar *addrt,uchar *comm,uchar *commt)2 {3 uchar i,j,k;4 uchar tmp1;5

6 while(NECFrameFlag==0);7 NECFrameFlag=0;8

9 for(i=0,k=1;i<4;i=i+1)10 {11 tmp1=0;12 for(j=0;j<8;j++)13 {14 tmp1 >>=1;//事先右移一位,防止最后一次循环的出错

15 if(NECTimerTable[k++] >8)16 {17 tmp1 |=0x80;18 }19 }20 switch(i)21 {22 case 0:*addr=tmp1;break;23 case 1:*addrt=tmp1;break;24 case 2:*comm=tmp1;break;25 case 3:*commt=tmp1;break;26 }27 }28 }

仅仅修改了这么一个代码顺序,程序就能比较完美的解析NEC协议来了。可见写程序,小小的细节也是非常重要,可能会牵扯到整个的成功。

总结:以后编写按1bit(不管是从LSB还是MSB开始)接收组成一个字节的程序,要格外的注意循环左移或者右移的情况。实现将临时变量移动一下,免得最后1位还需要移动而造成的错误。

最后附上NEC协议的命令码(市面上常见的遥控板)

java关于NEC的红外解码_红外协议之NEC协议相关推荐

  1. 使用PY003基于外部中断+定时器的方式实现NEC红外解码

    写在前边 最近项目用到一款遥控器是38K红外载波,NEC协议的,找了很多帖子有看到用外部中断下降沿判断(但可惜判定数据的方式是while在外部中断里面死等的),有看到用100us定时器定时刷来判断,感 ...

  2. MS8006单片机开发IR红外遥控解码原理与程序实现(NEC)

    目录 一.红外遥控概述 二.红外编码规则 三.硬件实现 四.软件部分 1.软件实现原理 2.红外解码程序说明 3.高低位逆转算法说明 4.key_switch遥控按键指令识别函数说明 五.总结 一.红 ...

  3. 基于定时器捕获功能的红外解码程序(NEC协议)

    文章目录 前言 一.红外协议简介 1. ITT Protocol 2. NEC 协议 3. Nokia NRC17 协议 二.红外解码程序(NEC协议) 1. 软硬件环境及红外解码状态图 2. 基于定 ...

  4. 【字符设备驱动】 -- NEC红外通信原理|红外协议|红外驱动|红外编解码|红外遥控器...

    目录 1. 红外基本介绍: 红外线的特点 红外线发射和接收 2.NEC协议介绍: NEC的数据格式: NEC协议中数据(DATA)段编码: NEC协议典型脉冲链: NEC载波调制: NEC载波解调: ...

  5. STC单片机获取红外解码从串口输出

    STC单片机获取红外解码从串口输出 串口数据演示 所使用的红外接收头VS1838 VS1838引脚定义 电气特性 所使用的红外按键板 红外遥控接收模块 VS/HX1838 相关的资料: https:/ ...

  6. 8位单片机只用一个定时器T0进行红外解码,包括短按、长按处理,模拟串口打印数据

    最近自己在网上搜了很多资料,发现很多的红外解码,关于重码的处理的代码很少,分享一下红外解码包括重码的处理. 使用单片机:EN8F156 功能说明:红外遥控器解码,只使用定时器T0定时100us进行按键 ...

  7. STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告)

    本设计: 基于STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0021 资料下载 [ ...

  8. 【STC15】STC15单片机获取红外解码从软串口输出

    [STC15]STC15单片机获取红外解码从软串口输出 单片机型号:STC15F2K60S2 采用外部晶振,频率:11.0592MHz 红外接收头,数据引脚接P3.2 这里软串口实现主要是位处理时间一 ...

  9. 红外测试操作步骤_红外传感实验操作步骤及数据分析(无测试实图)

    红外传感实验操作步骤及数据分析(无测试实图) 1. 启动红外传感模块 红外传感模块工作实图 ( 1 ) 将 NEWlab 实验硬件平台通电并与电脑链接. ( 2 ) 将红外传感模块放置在 NEWlab ...

最新文章

  1. 特别推荐:15个精美 Metro UI 风格 WordPress 主题
  2. 盘点六大在中国复制失败的O2O案例
  3. 《中国人工智能学会通讯》——8.2 自然界中的鸽群导航行为
  4. qtextedit改变单个字的颜色_发协广告~迷你字
  5. 为什么vs数据库中文显示问号_第005期 | 写论文为什么不应写别人没写过的题目?...
  6. TCL脚本语言基础介绍
  7. 冲刺第六天 1.7 MON
  8. 【简单解法】1093 字符串A+B (20分)_16行代码AC
  9. 三思笔记_使用反射前先三思
  10. .describe() python_Stataamp;Python | 分别实现多元线性回归
  11. 淘宝双十一火爆下的暗礁?
  12. 使用uniapp时十分方便的登录静态模板
  13. Vue基础学习笔记Day05_生命周期_axios
  14. setheader是什么意思_HTTP 请求头 响应头信息含义
  15. 【渝粤教育】广东开放大学 质量认证认可 形成性考核 (31)
  16. 荣耀4a鸿蒙,赵明:6 月起芯片供应将全面恢复,荣耀未来会考虑用华为鸿蒙系统...
  17. 2012系分真题案例分析 软件项目管理 工期管理
  18. 用Python写了一个图像文字识别OCR工具
  19. 超赞!微信内无法下载文件的三种解决方案
  20. 声智科技亮相小米新品发布会

热门文章

  1. vue中移动端自适应方案
  2. 通知栏(Notification)的基本使用
  3. 天线增益的计算公式(详细篇)
  4. 【Spring注解驱动开发】java的类库在哪个文件夹
  5. 内容无错误,但运行不出来
  6. 初入Android~系统化学习必备(转自http://bbs.weand.com/read-htm-tid-6142.html)
  7. HTML5+CSS3知识点总结(二)
  8. Pwn2Own Tokyo 2020 用于挑战的Mobile和IOT设备清单
  9. 推一篇关于网络的好文章
  10. c语言程序设计简单聊天程序,C语言实现简单的hello/hi网络聊天程序