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 存儲與紐扣電池供電,確保掉電后仍能保持設定與計時,進一步提升了系統的可靠性與實用性。