找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手请教51单片机红外解码问题

[复制链接]
跳转到指定楼层
楼主
ID:61140 发表于 2025-6-7 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人新手,刚接触红外遥控解码问题,在此向各位大神请教
1:红外解码后得到键值码和用户码,我想用不同的遥控键控制一个LED灯的亮灭,使用的是键值码还是用户码?
2:各位大神有没有简单的例程,本人实在新手太菜,想找个例程参考一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1109793 发表于 2025-6-7 09:53 | 只看该作者
好像有多种编码结构吧。用脉冲宽度的方法,适合很多种吧,包括无线遥控编码
回复

使用道具 举报

板凳
ID:57657 发表于 2025-6-7 10:37 | 只看该作者
遥控器(NEC协议) 例如:用户码:0xABCD 开按键码:0x00 关按键码:0x01
接收头收到下降沿中断后执行解码程序,解码失败或反码错误表示无效编码。

解码成功比对用户码等于0xABCD 等于则继续执行,不等于表示遥控器不是自己的。
然后用switch case指令比对按键码:0x00:开灯、0x01:关灯、default:不执行任何操作。
遥控器按键长按识别:等待重复码信号,收到则继续等待下一个重复码,超时(127ms)未收到表示按键已松开。
如果你不知道用户码以及按键码是什么,解码成功后将用户码以及按键码通过串口发送出去或数码管显示等即可。
回复

使用道具 举报

地板
ID:621776 发表于 2025-6-7 15:40 | 只看该作者
oshwhub.com/tc_tom/intelligent-air-conditioner-remo 这是我的一个开源工程,理论上只要实现一个基本的延时就可以完成红外的解码。
回复

使用道具 举报

5#
ID:1153644 发表于 2025-6-11 21:29 | 只看该作者
在红外遥控中,控制LED灯亮灭通常使用键值码,因为用户码是遥控器的“身份标识”(同一品牌同型号遥控器可能相同),而键值码才对应具体按键的功能。

简单例程(以Arduino为例)

硬件需求

- Arduino开发板(如UNO)
- 红外接收模块(如VS1838B)
- LED灯、电阻(限流)
- 遥控器(需先解码出键值)

代码实现

#include <IRremote.h>

// 定义引脚
const int irReceiverPin = 2;  // 红外接收模块引脚
const int ledPin = 13;        // LED引脚

// 定义键值(需替换为实际解码后的键值)
const unsigned int KEY_ON = 0x12345678;   // 开灯键值
const unsigned int KEY_OFF = 0x87654321;  // 关灯键值

IRrecv irrecv(irReceiverPin);
decode_results results;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);  // 初始关灯
  irrecv.enableIRIn();        // 启用红外接收
  Serial.begin(9600);         // 串口用于调试
}

void loop() {
  if (irrecv.decode(&results)) {  // 接收红外信号
    Serial.println(results.value, HEX);  // 打印接收到的键值
   
    // 根据键值控制LED
    if (results.value == KEY_ON) {
      digitalWrite(ledPin, HIGH);  // 开灯
      Serial.println("LED ON");
    } else if (results.value == KEY_OFF) {
      digitalWrite(ledPin, LOW);   // 关灯
      Serial.println("LED OFF");
    }
   
    irrecv.resume();  // 继续接收下一个信号
  }
}
 

使用说明

1. 先获取键值:将代码中的 KEY_ON 和 KEY_OFF 替换为实际遥控器按键解码后的键值(可通过串口打印查看)。
2. 连线注意:红外接收模块的VCC接5V,GND接地,OUT接Arduino的2号引脚,LED通过电阻接13号引脚。
3. 调试技巧:先通过串口打印确认能正确接收键值,再进行控制逻辑编写。
回复

使用道具 举报

6#
ID:584814 发表于 2025-6-12 11:14 | 只看该作者
理一下:
1、用户码是用来确认发信号的是不是我的遥控器,可想象成门禁,或抗干扰;
2、键值码是用来确认按了哪个键从而做出对应的动作,可想象成进门后干啥。
3、对发射和接收的编码,自制的产品可定制只收射用户码,或只收发键值码;
4、解码后不校验用户码,能发出相应键值码的遥控器都可以完成相关的控制;
5、发射和接收的编码有成品的规则,你可以按标准来做也可以自创标准来做。
回复

使用道具 举报

7#
ID:61140 发表于 2025-6-15 23:14 | 只看该作者
电工11号 发表于 2025-6-11 21:29
在红外遥控中,控制LED灯亮灭通常使用键值码,因为用户码是遥控器的“身份标识”(同一品牌同型号遥控器可 ...

我用的STC32G12K128可以使用你的这段程序么,谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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