基于51單片機紅外遙控定時開關智能家電插座設計

1. 功能介紹

本設計是一款基于 STC8C52 單片機 的智能家電插座系統,集 紅外遙控控制、定時開關控制、自動與手動模式切換、掉電數據保存、液晶顯示、蜂鳴器提示 于一體,能夠方便用戶對家用電器進行精準的定時控制與遠程操作。系統廣泛適用于家用電器、辦公設備、農業自動化控制等場景。

主要功能包括:

  1. 精準時鐘功能
    采用 DS1302 實時時鐘芯片,可精確顯示當前年、月、日、星期、時、分、秒,并配備 3V 紐扣電池,在系統掉電情況下依然能夠持續計時,保證時間數據不丟失。

  2. 液晶顯示功能
    使用 LCD1602 液晶模塊,可清晰顯示時鐘信息和系統狀態,包括模式(自動/手動)、繼電器狀態、當前設置的定時時間等。

  3. 多組定時任務
    系統可設置 5 組開機時間5 組關機時間,每一組定時時間可單獨設置為有效(Y)或無效(N),并支持掉電保存,數據存儲在 STC8C52 單片機內部 EEPROM 中。

  4. 自動與手動模式

    • 自動模式:系統根據當前時間與預設定時時間自動控制繼電器開關。
    • 手動模式:用戶可通過面板按鍵或紅外遙控器直接控制繼電器的開關。
  5. 繼電器控制與指示
    繼電器控制外接插座,吸合時指示燈亮(電器通電),斷開時指示燈滅(電器斷電)。

  6. 蜂鳴器提示
    不同的開關狀態配有不同提示音:

    • 開機:短促“滴滴”聲。
    • 關機:長鳴一聲。
  7. 紅外遙控功能
    紅外遙控器可實現全部操作,包括模式切換、參數設置、手動開關控制等。常用按鍵定義:

    • “|<<” 模式切換(自動/手動)。
    • “>>|” 進入設置或切換頁面。
    • “―” 減值或手動關機。
    • “+” 加值或手動開機。
  8. 掉電數據保存
    所有定時數據、模式設置、開關狀態均可掉電保存,保證系統在斷電后恢復時仍能正常執行之前的任務。


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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92649.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

下一代防火墻組網方案

知識回顧&#xff1a;1.傳統防火墻包括包過濾防火墻、應用網關防火墻、狀態檢測防火墻。2.包過濾防火墻工作在3、4層。3.包過濾防火墻特點&#xff1a;4.應用網關防火墻主要作用&#xff1a;①截取用戶初始化連接請求&#xff0c;對用戶進行認證&#xff1b;②通過ALG能讓多通道…

WEB開發-第二十七天(PHP篇)

DW PHPStorm PhpStudy Navicat Premium DW : HTML&JS&CSS開發 PHPStorm : 專業PHP開發IDE PhpStudy &#xff1a;Apache MYSQL環境 Navicat Premium: 全能數據庫管理工 變量覆蓋安全&#xff1a; $GLOBALS&#xff1a;這種全局變量用于在PHP腳本中的任意位置訪…

Lwip深度閱讀-網絡架構

LWIP網絡協議棧詳細介紹 本文的內容基本基于野火的LWIP手冊&#xff0c;和LWIP源碼撰寫。 網絡協議棧概述 從圖片可以看出&#xff0c;網絡協議棧采用分層架構&#xff0c;每一層都有特定的功能和協議。 TCP/IP協議分層模型數據封裝過程MAC數據包 我使用wireShark抓包的時候&am…

嵌入式系統學習Day16(C語言中的位運算)

位運算二進制位的運算嵌入式:通過位運算 控制 硬件運算: 運算規則 & 與 一假則假 | 或 一真則真 ~ 非 真假相對 ^ 異或 相同為假 不同為真 << 左移 表示二進制位的移動 >> 右移 eg:int a 0x55; int b 0x33;0101 0101 //0x55 &am…

Endnote下載,導入曼大 harvard_manchester格式

下載endnote 并激活中國農業科技文獻與信息服務平臺&#xff0c;點擊下載 下載harvard_manchester 格式 Harvard Manchester - Referencing guide at the University of Manchester - Subject guides at University of Manchester 雙擊打開第二步下載的安裝包&#xff08;使用…

【Docker進階實戰】從多容器編排到集群部署

Docker進階實戰&#xff1a;從多容器編排到集群部署 當你已經熟悉Docker的基本操作后&#xff0c;面對的下一個挑戰往往是&#xff1a;如何管理多個容器的協作&#xff1f;如何實現容器的集群化部署與擴展&#xff1f;如何保證服務的高可用&#xff1f; 一、Docker Compose&…

【Linux文件操作】文件操作系統調用

目錄 一、文件創建&#xff08;creat 系統調用&#xff09;? 1.1 函數原型 1.2 參數說明? 1.3 返回值? 1.4 使用示例 二、文件打開&#xff08;open 系統調用&#xff09;? 2.1 函數原型 2.2 參數說明? 2.3 返回值? 2.4 使用示例 三、文件讀寫&#xff08;read 和 write …

FreeRTOS源碼分析六:vTaskDelay vs xTaskDelayUntil任務延時

系列文章目錄 FreeRTOS源碼分析一&#xff1a;task創建&#xff08;RISCV架構&#xff09; FreeRTOS源碼分析二&#xff1a;task啟動&#xff08;RISCV架構&#xff09; FreeRTOS源碼分析三&#xff1a;列表數據結構 FreeRTOS源碼分析四&#xff1a;時鐘中斷處理響應流程 Free…

Linux學習-應用軟件編程(fread/fwrite,流定義相關接口)

freadsize_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能按塊從文件讀取數據&#xff0c;從文件中讀 nmemb 個、每個 size 字節的元素&#xff0c;存入 ptr 指向的內存。參數- ptr &#xff1a;存儲讀取數據的內存首地址&#xff08;需提前分配足夠…

IP分片(IP Fragmentation)

目錄 一、核心概念:MTU與分片的必要性 二、IP分片的關鍵字段(IPv4頭部) 三、分片與重組流程 1. 分片過程(發送端或中間路由器) 2. 重組過程(接收端) 四、IPv4與IPv6分片的差異 五、分片的潛在問題與風險 六、總結 一、傳輸效率降低,帶寬開銷增加 二、可靠性降低,數據丟…

高并發內存池 內存釋放回收(6)

文章目錄前言一、threadcache回收內存二、centralcache回收內存三、pagecache回收內存總結前言 Hello&#xff0c;我們繼續乘勝追擊 ??本篇難度較大&#xff0c;大家要好好學一下 一、threadcache回收內存 當某個線程申請的對象不用了&#xff0c;可以將其釋放給 thread cac…

2438. 二的冪數組中查詢范圍內的乘積

2438. 二的冪數組中查詢范圍內的乘積 初始理解題目 首先&#xff0c;我們需要清楚地理解題目在說什么。題目給出一個正整數 n&#xff0c;要求我們構造一個數組 powers&#xff0c;這個數組滿足以下條件&#xff1a; 元素性質?&#xff1a;數組中的每個元素都是 2 的冪。即…

【PyTorch學習筆記 - 01】 Tensors(張量)

最近項目需要優化一下目標檢測網絡&#xff0c;在這個過程中發現還是得增加對框架底層的掌握才可行。于是準備對pytorch的一些基本概念做一些再理解。參考PyTorch的wiki&#xff0c;對自己的學習過程做個記錄。 Tensors 是一種特殊的數據結構&#xff0c;與數組和矩陣非常相似…

【C/C++】(struct test*)0->b 講解

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、什么是結構體成員的偏移量&#xff1f; 二、為什么需要計算偏移量&#xff1f; 三、如何計算偏移量&#xff1f; 四、總結 一、什么是結構體成員的偏移量&#…

使用Pytest進行接口自動化測試(三)

&#xff08;一&#xff09;YAML 之前在項目中&#xff0c;我們也是用過YAML來做配置文件&#xff0c;他用于以人類可讀的形式存儲信息&#xff0c; 特點: 一種簡易的可讀語言&#xff0c;用于人和計算機交換數據 通常用來存儲配置信息 跟python類似&…

算法訓練營day46 647. 回文子串、516.最長回文子序列、動態規劃總結篇

今天是動態規劃的最后一篇內容了&#xff0c;本篇主要是針對回文字符串這種“與眾不同”的遞推規律來進行講解 647. 回文子串 統計并返回這個字符串中 回文子串 的數目 暴力解法 兩層for循環&#xff0c;遍歷區間起始位置和終止位置&#xff0c;然后還需要一層遍歷判斷這個區…

Qt界面優化

1.QSS在網頁前端開發領域中&#xff0c;CSS 是一個至關重要的部分&#xff0c;描述了一個網頁的 “樣式”&#xff0c;從而起到對網頁美化的作用。所謂樣式&#xff0c;包括不限于大小、位置、顏色、背景、間距、字體等等。網頁開發作為 GUI 的典型代表&#xff0c;也對于其他客…

week1+2+3

408 計組 1.基本組成2.數據的表示和運算定點數&#xff1a;把數字分為定點整數和定點小數分開存儲 浮點數&#xff1a;用科學計數法存儲 原碼 -全部取反-> 反碼 反碼 1->補碼 補碼 -符號位取反->移碼帶余除法&#xff1a;設x,m∈Z&#xff0c;m>0則存在唯一的整數q…

java8中javafx包缺少報錯

今天拉取一個jdk1.8的項目里面有一個代碼用到了javafx&#xff0c;這個我記得是jdk中的包&#xff0c;正常不應該報錯的。然后發現jdk中還真沒有&#xff0c;查了一下是因為版本問題。 Java 8 及之前&#xff1a;Oracle JDK 自帶 JavaFX&#xff0c;OpenJDK 通常不包含Java 9 …

day072-代碼檢查工具-Sonar與maven私服-Nexus

文章目錄0. 老男孩思想-選對池塘釣美人魚1. 代碼回滾方案2. SonarQube2.1 代碼檢查工具2.2 部署sonarqube2.2.1 軟件要求2.2.2 安裝軟件2.2.3 啟動sonar2.2.4 部署插件2.3 sonar檢查java代碼2.3.1 創建sona項目2.3.2 分析java代碼2.3.3 Jenkins結合sonar檢查代碼2.4 sonar檢查非…