从波形抓取到按键映射,手把手教你搞定 NEC 协议解码
做红外遥控解码的朋友,有没有过这种绝望:
别慌!NEC 协议作为红外遥控里的“通用语言”,其实逻辑巨简单,看完直接抄作业就能用!
NEC 协议的核心是 “用脉冲宽度表示 0 和 1”,就像用专属的摩斯密码,遥控器和单片机之间靠这个密码传递按键信息。
一帧数据由 引导码、地址码、地址反码、数据码、数据反码 组成,总共 32 位。
| 类型 | 时序说明 |
|---|---|
引导码 | 9ms 高电平 + 4.5ms 低电平(“敲门砖”,告诉 MCU 要发数据了) |
逻辑“0” | 562.5μs 高电平 + 562.5μs 低电平,总时长 1.125ms |
逻辑“1” | 562.5μs 高电平 + 1.6875ms 低电平,总时长 2.25ms |
重复码 | 9ms 高 + 2.25ms 低 + 0.56ms 高(长按按键时发送) |
校验通过才是有效数据。

最通用的方案:
这个时间差,就是我们判断引导码、逻辑 0、逻辑 1 的唯一依据。只要时间算准了,解码就成功了一大半!
光有时间差还不够,我们需要给解码过程分阶段,就像流水线一样按顺序推进,避免乱序出错——这就是状态机的核心思路。
大致分为四个阶段:

解出了正确的按键数据码,只是第一步。我们最终要的是:“按哪个键,就触发对应的功能”——这就是按键映射的核心。
实现起来特别简单,核心就是做一张 “按键对应表”:

| 序号 | 技巧 | 说明 |
|---|---|---|
| ① | 逻辑分析仪是神器 | 采样率设 1MHz 以上,直接看波形时间,比瞎调定时器快 10 倍 |
| ② | 定时器分频要合适 | 设 1MHz 计数频率,时间差直接就是 μs 数,不用换算 |
| ③ | 红外接收头别买错 | 常用 VS1838B 是 38kHz 载波,别买成 40kHz 的 |
| ④ | 反码校验必须加 | 过滤干扰信号,避免解出乱码 |
| ⑤ | 重复码单独处理 | 长按按键时会发重复码,别当成新按键 |
其实 NEC 解码的核心,从来不是复杂的代码,而是搞懂时序的本质——把时间差算准、把校验做对,剩下的就是水到渠成的事。
哪怕是刚入门单片机的新手,搞懂这一套逻辑,也能一下午就实现红外遥控解码。
小贴士:调试时先用逻辑分析仪抓一组已知按键的波形,对照本文的时序参数,确认无误后再写代码,事半功倍!
全部0条评论
快来发表一下你的评论吧 !