1. 项目背景与硬件配置
STC15W104这款8脚单片机在遥控解码领域堪称"小钢炮",其内置的EEPROM功能特别适合需要掉电存储的场景。这次我们要实现的是对市面上常见的2262/1527编码格式的遥控信号进行解码,并具备学习记忆功能。这种方案在智能家居改造、工业遥控设备等领域都有广泛应用。
硬件连接上,P3.2引脚连接315MHz超外差接收模块的数据输出端,这个接收头建议选用SYN480R这类高灵敏度型号。四个输出通道分别使用P5.4-P5.7,可以直接驱动继电器模块或通过三极管放大控制更大负载。学习按键接在P3.3,采用低电平触发方式,记得加个10kΩ上拉电阻。
关键提示:接收模块的输出端一定要加上拉电阻,否则在信号较弱时可能出现低电平不稳定的情况,导致解码失败。实测10kΩ电阻效果最佳。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 2262/1527编码原理深度解析
2262和1527编码都属于固定码型,由地址码和数据码组成。2262是8位地址码+4位数据码,而1527是20位地址码+4位数据码。虽然位数不同,但它们的编码格式兼容,都采用脉宽调制方式:
- 同步头:9ms高电平+4.5ms低电平
- 数据"0":1.12ms高电平+1.12ms低电平
- 数据"1":1.12ms高电平+3.36ms低电平
在程序中,我们通过定时器捕获来测量高低电平的持续时间。STC15W104的定时器1工作在16位自动重装模式,时钟设为12T模式(AUXR &= 0xBF)可以获得足够的分辨率。
解码状态机是这个项目的核心算法,需要处理三个关键状态:
c复制enum DecodeState {
IDLE, // 空闲状态,等待同步头
SYNC, // 已检测到同步头,开始接收数据
DATA // 数据接收中
};
3. 学习功能的实现细节
学习模式的触发逻辑是这样的:当P3.3检测到低电平时,系统进入学习状态,此时接收到的第一个有效编码会被保存到当前选定的通道中。为了防止误触发,我在代码中做了两点优化:
- 按键防抖:采用软件去抖,连续检测到20ms低电平才确认按键按下
- 学习超时:超过5秒没有收到有效信号自动退出学习模式
存储结构体设计如下,包含地址码、数据码和有效标志:
c复制typedef st
