【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;这…