基于51单片机红外遥控定时开关智能家电插座设计
1. 功能介绍
本设计是一款基于 STC8C52 单片机 的智能家电插座系统,集 红外遥控控制、定时开关控制、自动与手动模式切换、掉电数据保存、液晶显示、蜂鸣器提示 于一体,能够方便用户对家用电器进行精准的定时控制与远程操作。系统广泛适用于家用电器、办公设备、农业自动化控制等场景。
主要功能包括:
-
精准时钟功能
采用 DS1302 实时时钟芯片,可精确显示当前年、月、日、星期、时、分、秒,并配备 3V 纽扣电池,在系统掉电情况下依然能够持续计时,保证时间数据不丢失。 -
液晶显示功能
使用 LCD1602 液晶模块,可清晰显示时钟信息和系统状态,包括模式(自动/手动)、继电器状态、当前设置的定时时间等。 -
多组定时任务
系统可设置 5 组开机时间 与 5 组关机时间,每一组定时时间可单独设置为有效(Y)或无效(N),并支持掉电保存,数据存储在 STC8C52 单片机内部 EEPROM 中。 -
自动与手动模式
- 自动模式:系统根据当前时间与预设定时时间自动控制继电器开关。
- 手动模式:用户可通过面板按键或红外遥控器直接控制继电器的开关。
-
继电器控制与指示
继电器控制外接插座,吸合时指示灯亮(电器通电),断开时指示灯灭(电器断电)。 -
蜂鸣器提示
不同的开关状态配有不同提示音:- 开机:短促“滴滴”声。
- 关机:长鸣一声。
-
红外遥控功能
红外遥控器可实现全部操作,包括模式切换、参数设置、手动开关控制等。常用按键定义:- “|<<” 模式切换(自动/手动)。
- “>>|” 进入设置或切换页面。
- “―” 减值或手动关机。
- “+” 加值或手动开机。
-
掉电数据保存
所有定时数据、模式设置、开关状态均可掉电保存,保证系统在断电后恢复时仍能正常执行之前的任务。
2. 系统电路设计
系统电路由 STC8C52 单片机核心电路、DS1302 时钟模块、LCD1602 液晶模块、按键电路、继电器驱动电路、蜂鸣器电路、红外接收电路、电源电路 八个部分组成。
2.1 STC8C52 单片机核心电路
STC8C52 作为系统的主控芯片,具备丰富的 I/O 资源与 EEPROM 数据存储功能,能够完成时钟数据读取、定时逻辑运算、红外信号解码、按键扫描、继电器控制等任务。
-
时钟频率:12MHz 外部晶振。
-
存储功能:内部 EEPROM 用于存储定时数据。
-
I/O 分配:
- P0 口连接 LCD1602 数据线。
- P1 口部分用于按键输入与红外接收。
- P2 口输出控制继电器与蜂鸣器。
2.2 DS1302 实时时钟模块
-
通信接口:三线串行通信(SCLK、I/O、CE)。
-
供电方式:VCC 接 5V 主电源,Vbat 接 3V 纽扣电池。
-
功能特点:
- 年、月、日、星期、时、分、秒全时显示。
- 内部温补晶振,走时稳定。
- 掉电后由纽扣电池维持工作。
2.3 LCD1602 液晶显示模块
LCD1602 用于显示时钟与系统状态,采用 8 位并行接口与 STC8C52 连接。
-
显示内容:
- 第一行:当前时间(时:分:秒)与日期(年-月-日)。
- 第二行:当前模式(Auto/Manual)、继电器状态(ON/OFF)、定时任务提示。
2.4 按键电路
面板上设置 4 个按键:
- 加键(+):手动开机或设置值增加。
- 减键(-):手动关机或设置值减少。
- 模式键:切换自动/手动模式。
- 设置键:进入设置界面或切换设置项。
按键采用下拉输入方式,通过单片机扫描。
2.5 继电器驱动电路
- 使用 5V 继电器 控制插座通断。
- 驱动采用三极管放大电路(如 9013),并在继电器线圈两端并联反向二极管抑制反电动势。
- 继电器吸合时插座接通电源,可外接任意家电设备。
2.6 蜂鸣器电路
采用有源蜂鸣器,单片机控制其通断以发出提示音,通过定时器实现不同音长的提示声。
2.7 红外接收电路
采用 HS0038 红外接收头,接收 NEC 协议信号,通过单片机外部中断捕获脉冲宽度完成解码。
2.8 电源电路
- 系统采用 5V 稳压供电,单片机、LCD、DS1302、红外接收器等均由 5V 电源供电。
- 外接继电器电源与系统电源共用,必要时可使用独立供电防止干扰。
3. 程序设计
程序由 主程序、时钟读取与显示模块、定时控制模块、按键扫描模块、红外遥控解码模块、继电器与蜂鸣器控制模块、EEPROM 数据存储模块 组成。
3.1 时钟读取与显示模块
#include "ds1302.h"
#include "lcd1602.h"DS1302_Time timeData;void readAndDisplayTime() {DS1302_ReadTime(&timeData);LCD_SetCursor(0, 0);LCD_Printf("%02d:%02d:%02d", timeData.hour, timeData.min, timeData.sec);LCD_SetCursor(0, 1);LCD_Printf("%04d-%02d-%02d", timeData.year, timeData.month, timeData.day);
}
3.2 定时控制模块
typedef struct {uint8_t hour;uint8_t min;uint8_t sec;uint8_t enable; // 1=有效,0=无效
} TimerTask;TimerTask onTasks[5];
TimerTask offTasks[5];void checkTimers() {for (int i = 0; i < 5; i++) {if (onTasks[i].enable &&timeData.hour == onTasks[i].hour &&timeData.min == onTasks[i].min &&timeData.sec == onTasks[i].sec) {relayOn();}if (offTasks[i].enable &&timeData.hour == offTasks[i].hour &&timeData.min == offTasks[i].min &&timeData.sec == offTasks[i].sec) {relayOff();}}
}
3.3 按键扫描模块
uint8_t readKey() {if (!KEY_PLUS) return 1;if (!KEY_MINUS) return 2;if (!KEY_MODE) return 3;if (!KEY_SET) return 4;return 0;
}
3.4 红外遥控解码模块
#include "ir_nec.h"void handleIRCommand(uint32_t cmd) {switch(cmd) {case IR_KEY_MODE: toggleMode(); break;case IR_KEY_PLUS: relayOn(); break;case IR_KEY_MINUS: relayOff(); break;case IR_KEY_SET: enterSetting(); break;}
}
3.5 继电器与蜂鸣器控制模块
void relayOn() {RELAY = 1;beepShort();
}void relayOff() {RELAY = 0;beepLong();
}void beepShort() {BEEP = 1; delay_ms(100); BEEP = 0;
}void beepLong() {BEEP = 1; delay_ms(500); BEEP = 0;
}
3.6 EEPROM 数据存储模块
#include "stc_eeprom.h"void saveTimers() {EEPROM_Write(0x00, (uint8_t*)onTasks, sizeof(onTasks));EEPROM_Write(0x50, (uint8_t*)offTasks, sizeof(offTasks));
}void loadTimers() {EEPROM_Read(0x00, (uint8_t*)onTasks, sizeof(onTasks));EEPROM_Read(0x50, (uint8_t*)offTasks, sizeof(offTasks));
}
3.7 主程序
void main() {systemInit();loadTimers();while (1) {readAndDisplayTime();checkTimers();handleKeys();handleIR();}
}
4. 总结
本设计通过 STC8C52 单片机结合 DS1302 时钟芯片、LCD1602 显示、按键与红外遥控,实现了 精准定时、自动/手动模式切换、掉电数据保存 的智能家电插座系统。
系统不仅能够满足家庭日常定时控制需求,还可扩展用于办公室设备管理、农业灌溉等场景,具有功能丰富、稳定性高、操作方便的特点。
通过 EEPROM 存储与纽扣电池供电,确保掉电后仍能保持设定与计时,进一步提升了系统的可靠性与实用性。