【51單片機】【protues仿真】基于51單片機冰箱系統

目錄

一、主要功能

二、使用步驟

三、硬件資源

四、軟件設計

五、實驗現象

一、主要功能

1、LCD1602液晶顯示冷藏冷凍溫度值
2、按鍵設置溫度閾值?
3、冷藏或冷凍溫度高于閾值啟動制冷片
4、限位器開關檢測門狀態,開門過長蜂鳴器警報
5、狀態指示燈,串口通信

二、使用步驟

基于51單片機的冰箱控制系統設計通常包含溫度監測、照明燈控制、冰箱門檢測、數據通信、制冷控制及報警功能等核心模塊。

三、硬件資源

1、51單片機核心模塊
2、按鍵模塊
3、溫度傳感器、限位傳感器模塊
4、蜂鳴器模塊,指示燈模塊
5、繼電器模塊
6、LCD1602顯示模塊

四、軟件設計

#include <reg52.h>?? ??? ??? ? //調用單片機頭文件
#include <intrins.h>
#include "lcd1602.h"
#include "DS18B20_One.h"
#include "DS18B20_Two.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define uchar unsigned char ?//無符號字符型 宏定義?? ?變量范圍0~255
#define uint ?unsigned int?? ? //無符號整型 宏定義?? ?變量范圍0~65535

//按鍵引腳定義
sbit key1 = P1^0; ? ?
sbit key2 = P1^1;
sbit key3 = P1^2;

sbit led1 = P1^5; ? ? ? ?//冷藏指示燈
sbit led2 = P1^6; ? ? ? ?//制冷指示燈
sbit led3 = P1^7; ? ? ? ?//照明指示燈

sbit beep = P2^0; ? ? ? //蜂鳴器
sbit door = P2^1; ? ? ? //門檢測開關

sbit relay1 = P3^6; ? ? ? //繼電器1
sbit relay2 = P3^7; ? ? ? //繼電器2

unsigned char setn=0; ? ? ? ? ? ?//記錄設置按鍵按下次數
unsigned char time=60; ? ? ? ? ? //冰箱門未關時間計時
short temperature1 = 0; ? ? ? ? ?//冷藏溫度 ? ? ? ? ?
short temperature2 = 0; ? ? ? ? ?//制冷溫度 ?
short set_temp1 = 15; ? ? ? ? ? //冷藏溫度設置值
short set_temp2 = 10; ? ? ? ? ? //制冷溫度設置值

bit tixingFlag = 0; ? ?//提醒標志
bit shuaxin = 0; ? ? ?//刷新標志
unsigned char Fasong1[] = "T1: 00°C";
unsigned char Fasong2[] = "T2: 00°C";
void time_init(void)?? ? ?//定時器初始化
{
?? ?TMOD |= 0X01;?? ? ?//定時器0工作方式1
? TL0 = 0x00;?? ??? ?
?? ?TH0 = 0x4C; ?//定時器定時50ms
??? ?TR0 = 1;
?? ?ET0 = 1;?? ??? ? ?//開定時器0中斷?
?? ?EA ?= 1;?? ? ?? ? ?//開總中斷
}

void displaySetValue(short temp1,short temp2) ?//顯示設置的值
{
?? ??? ?short value1 = temp1;
?? ? ?short value2 = temp2;
?? ? ?
?? ? ?if(temp1 < 0)
?? ??? ?{
?? ??? ??? ??? ?value1 = -value1;
?? ??? ??? ? ?lcd_write_char(11,0,'-');
?? ??? ?}
?? ? ?else
?? ??? ?{
?? ??? ??? ??? ?lcd_write_char(11,0,' ');
?? ??? ?}
?? ? ?lcd_write_char(12,0,value1/10+'0');
?? ??? ?lcd_write_char(13,0,value1%10+'0');?? ?
?? ??? ?
?? ??? ?if(temp2 < 0)
?? ??? ?{
?? ??? ??? ??? ?value2 = -value2;
?? ??? ??? ? ?lcd_write_char(11,1,'-');
?? ??? ?}
?? ? ?else
?? ??? ?{
?? ??? ??? ??? ?lcd_write_char(11,1,' ');
?? ??? ?}
?? ? ?lcd_write_char(12,1,value2/10+'0');
?? ??? ?lcd_write_char(13,1,value2%10+'0');?? ?
}

void main()
{
?? ??? ?uart_init();
?? ??? ?lcd_init();//1602初始化
?? ??? ?lcd_write_str(0, 0, "T1: 00 C S: 00 C");
?? ??? ?lcd_write_str(0, 1, "T2: 00 C S: 00 C");
?? ? ?lcd_write_char(6,0,0xDF);
?? ? ?lcd_write_char(6,1,0xDF);
?? ? ?lcd_write_char(14,0,0xDF);
?? ? ?lcd_write_char(14,1,0xDF);
?? ? ?displaySetValue(set_temp1,set_temp2);
?? ? ?do{
?? ??? ??? ?temperature1 = DS18B20_TF();
?? ??? ??? ?delay_ms(100);
?? ??? ?}while(temperature1==85);
?? ??? ?do{
?? ??? ??? ?temperature2 = DS18B20_TF2();
?? ??? ??? ?delay_ms(100);
?? ??? ?}while(temperature2==85);
?? ? ?time_init();//定時器初始化
?? ??? ?while(1)
?? ??? ?{
?? ??? ??? ? ?keyscan(); ? ? //按鍵掃描
?? ??? ??? ? ?if(setn == 0 && shuaxin)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ? ?shuaxin = 0;
?? ??? ??? ??? ??? ? ?temperature1 = DS18B20_TF(); ? ?//讀取溫度
?? ??? ??? ??? ??? ? ?if(temperature1<0)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ?temperature1 = -temperature1;
?? ??? ??? ??? ??? ??? ??? ? ?lcd_write_char(3,0,'-');
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ?lcd_write_char(3,0,' ');
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?lcd_write_char(4,0,temperature1/10+'0'); ? ? ? //顯示溫度 ??
?? ??? ??? ??? ??? ??? ?lcd_write_char(5,0,temperature1%10+'0');?? ??? ?

? ? ? ? ? ? temperature2 = DS18B20_TF2(); ? //讀取溫度
?? ??? ??? ??? ??? ? ?if(temperature2<0)
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ?temperature2 = -temperature2;
?? ??? ??? ??? ??? ??? ??? ? ?lcd_write_char(3,1,'-');
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ??? ??? ?lcd_write_char(3,1,' ');
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?lcd_write_char(4,1,temperature2/10+'0'); ? ? ? ? ? ?//顯示溫度 ??
?? ??? ??? ??? ??? ??? ?lcd_write_char(5,1,temperature2%10+'0');?? ??? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(temperature1>set_temp1)led1=0;else led1=1; ? ? ? ? ? //冷藏指示燈亮
?? ??? ??? ??? ?if(temperature2>set_temp2)led2=0;else led2=1; ? ? ? ? ? //制冷指示燈亮
?? ??? ??? ??? ?if(temperature1>set_temp1 || temperature2>set_temp2) ? //當溫度超過設定溫度,則開啟制冷
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?relay1 = relay2 = 0;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?relay1 = relay2 = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if(door == 0) ? ?//冰箱門打開
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?led3 = 0; ? ? ? ? ? ? ? ?//照明指示燈亮
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else ? ? ? ? ? ? //冰箱門關閉
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ? ?led3 = 1; ? ? ? ? ? ? ? ?//照明指示關閉
?? ??? ??? ??? ??? ??? ?tixingFlag = 0;
?? ??? ??? ??? ??? ? ?beep = 1; ? ? ? ? ? ? ? //蜂鳴器關閉
?? ??? ??? ??? ??? ??? ?time = 60; ? ? ? ? ? ? //時間重新賦值
?? ??? ??? ??? ?}
?? ??? ?}
}
?

五、實驗現象

演示視頻:

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

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

相關文章

征程 6X 常用工具介紹

一、采集/設置系統信息的工具集 獲取開發板 SOM 狀態工具 [LINUX] hrut_somstatus 是用來獲取當前開發板SOM狀態的工具&#xff0c;包含溫度、 cpu頻率、bpu狀態。 用法&#xff1a; hrut_somstatus [-n count] [-d second]獲取開發板boardid工具 [LINUX] hrut_boardid 是用來獲…

數字隔離器:新能源系統的安全與效能革命

在新能源技術高速發展的浪潮中&#xff0c;高壓、高頻、高可靠性的需求對系統設計提出全新挑戰。傳統隔離器件受限于響應速度、抗干擾能力及體積限制&#xff0c;逐漸難以滿足光伏發電、電動汽車、儲能系統等場景的嚴苛要求。數字隔離器以創新的半導體技術為核心&#xff0c;通…

算法訓練營day58 圖論⑧ 拓撲排序精講、dijkstra(樸素版)精講

本篇應該是圖論的經典部分了&#xff0c;本篇的內容作為小白沒有了解過&#xff0c;但是至少會聽說過——拓撲排序精講、dijkstra&#xff08;樸素版&#xff09;精講。 拓撲排序精講 本題是拓撲排序的經典題目。一聊到 拓撲排序&#xff0c;一些錄友可能會想這是排序&#xf…

如何在日常開發中高效使用 Copilot

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

使用Docker部署Coze Studio開源版

1、安裝Docker# 安裝Docker https://docs.docker.com/get-docker/# 安裝Docker Compose https://docs.docker.com/compose/install/# CentOS安裝Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA2、安裝Coze Studio詳見&#xff1a;https://github.com/coze-dev/coze…

深度剖析Spring AI源碼(九):構建企業知識庫,深入ETL與RAG實現

深度剖析Spring AI源碼&#xff08;九&#xff09;&#xff1a;構建企業知識庫&#xff0c;深入ETL與RAG實現 “Data is the new oil, but like oil, it’s valuable only when refined.” —— 在AI時代&#xff0c;原始數據需要經過精心的ETL處理才能成為AI的"燃料"…

C# 簡單工廠模式:構建靈活與可擴展的面向對象程序

在面向對象編程&#xff08;OOP&#xff09;的世界中&#xff0c;簡單工廠模式&#xff08;Simple Factory Pattern&#xff09; 是一種非常常見且實用的設計模式。雖然它并不屬于GoF&#xff08;Gang of Four&#xff09;定義的23種經典設計模式之一&#xff0c;但它是理解更復…

全面解析JVM預熱:原理、價值與實踐指南

在Java應用的性能優化領域,“JVM預熱”是一個常被提及卻容易被忽視的關鍵環節。尤其是在高并發、低延遲的業務場景中,未經過充分預熱的JVM可能導致應用啟動初期出現響應延遲、吞吐量波動甚至服務不可用的問題。本文將從JVM預熱的核心原理出發,深入剖析其價值、常見實現方案及…

數學建模-灰色關聯分析(GRA)

目錄 1-AI帶你認識GRA &#x1f4d8; 一、灰色關聯分析&#xff08;GRA&#xff09;簡介 1. 什么是灰色關聯分析&#xff1f; 2. 核心思想&#xff08;通俗理解&#xff09;&#xff1a; 3. 與熵權法的對比&#xff08;快速類比&#xff09;&#xff1a; &#x1f9e9; 二…

Shell腳本-expect

一、前言在 Linux 系統管理與自動化運維中&#xff0c;我們經常需要編寫 Shell 腳本來完成各種任務。但有些命令&#xff08;如 ssh、scp、passwd、ftp 等&#xff09;在執行時會等待用戶手動輸入密碼或確認信息&#xff0c;這就導致腳本無法完全自動化運行。為了解決這個問題&…

Conmi的正確答案——Ubuntu24.04禁用任何休眠

系統&#xff1a;Ubuntu 24.04步驟一、禁用系統休眠服務 # 禁用所有休眠/待機相關服務&#xff08;立即生效&#xff09; sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target # 驗證狀態&#xff08;顯示 "masked" 即成功&am…

開源 C++ QT Widget 開發(二)基本控件應用

文章的目的為了記錄使用C 進行QT Widget 開發學習的經歷。臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 C QT Widget 開發&#xff08;一&#xff09;工程文件結構-CSDN博客 開源 C…

今日科技風向|從AI芯片定制到閱兵高科技展示——聚焦技術前沿洞察

今日科技風向&#xff5c;從AI芯片定制到閱兵高科技展示——聚焦技術前沿洞察 一、NVIDIA 開發“黑曜”子版 AI 芯片 B30A&#xff0c;瞄準中國市場 今日報道指出&#xff0c;NVIDIA 正在研發一款面向中國市場的定制芯片 B30A&#xff0c;基于其先進的 Blackwell 架構&#xff…

Elasticsearch官方文檔學習-未完待續

Elasticsearch官方文檔學習-未完待續說明快速開始基礎知識索引組成1. 文檔 (Documents)2. 元數據字段(Metadata fields)3. 映射和數據類型(Mappings and data types)文檔操作(Document)批量創建或者刪除文檔 (Bulk index or delete documents)樂觀并發控制 Optimistic concurre…

Redis資料

Redis是什么&#xff1f; Redis(Remote Dictionary Server)是一個開源的、基于內存的鍵值數據庫&#xff0c;支持多種數據結構&#xff0c;可用作數據庫、緩存和消息中間件。主要特點包括&#xff1a; 基于內存操作&#xff0c;讀寫性能極高支持持久化&#xff0c;可將內存數…

CAMEL-Task2-Agent的構成組件

CAMEL-Task2-Agent的構成組件 本文筆記主要關于2.7章節&#xff1a;CAMEL框架中agents如何使用工具。 一、工具說明 為什么要額外使用工具&#xff1f; agents本身的知識和能力有限&#xff0c;比如一些問題需要聯網搜索才能準確回答&#xff08;而不是亂答&#xff0c;即“…

數據整理自動化 - 讓AI成為你的數據助手

文章目錄數據整理自動化 - 讓AI成為你的數據助手引言&#xff1a;數據整理的時代挑戰與機遇1. 常見數據整理場景分析1.1 數據整理的多元場景圖譜1.2 數據質量問題的分類與影響1.3 傳統處理方法的局限性2. AI與傳統腳本的協同工作流2.1 智能數據整理架構設計2.2 協同工作流的最佳…

react速成

項目目錄package.json文件&#xff1a;包含核心兩個依賴&#xff08;react、react-dom&#xff09;和命令&#xff08;start、bulid&#xff09;src&#xff1a;源碼目錄&#xff0c;開始之用的到index.js和App.jsindex.js&#xff1a;是項目的入口&#xff0c;一切的運行起點/…

Maven的進階使用(上)

pom.xml文件 就像 Make 的 MakeFile、Ant 的 build.xml 一樣&#xff0c;Maven 項目的核心是 pom.xml。POM(全稱 Project Object Model&#xff0c;項目對象模型 ) 定義了項目的基本信息&#xff0c;用于描述項目如何構建&#xff0c;聲明項目依賴&#xff0c;等等。 Gredele--…

【最后203篇系列】034 使用SQLite構建簡單的任務管理

表數據同步的斷點續傳 有時候需要將一個表的數據復制到另一個表&#xff0c;循環是常用的方式。當表比較大&#xff0c;執行的時間很長&#xff0c;會有很多因素引起失敗。我希望可以比較簡單的跑數&#xff0c;所以做一個簡單的任務系統。 SQLitre是嵌入式數據庫&#xff0c;這…