【Proteus仿真】【51单片机】粮仓温湿度控制系统设计
文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用Proteus8仿真51单片机控制器,使用声光报警模块、LCD1602显示模块、DHT11温湿度模块、继电器模块、加热加湿除湿风扇等。
主要功能:
系统运行后,LCD1602显示传感器检测的温湿度值;
默认以自动模式运行,若按下K4键切换为手动模式,此时可以
通过K1和K2控制加湿/除湿和加热/散热开关。当再次按下K4键切换为自动模式;自动模式下,实时检测温度及湿度值,
如果温度高于上限,声光报警,打开散热;
如果温度低于下限,声光报警,打开加热;
温度正常,声光报警取消,关闭加热/散热;
如果湿度高于上限,声光报警,打开除湿;
如果湿度低于下限,声光报警,打开加湿;
如果湿度正常,声光报警关闭,关闭加湿除湿;
可通过K3键进入阈值设置,K1和K2调节,设置好后可按下K4键返回主界面。
设定好的阈值可存入存储器中掉电不丢失。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)
*///系统数据显示
void sys_data_show(void)
{while(1){ //温度显示lcd1602_show_nums(3,0,sys_ctrl.temp,2,0);//湿度显示lcd1602_show_nums(3,1,sys_ctrl.humi,2,0);//温度阈值显示lcd1602_show_nums(7,0,sys_ctrl.templ,2,0);lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);//湿度阈值显示lcd1602_show_nums(7,1,sys_ctrl.humil,2,0);lcd1602_show_nums(10,1,sys_ctrl.humih,2,0); //阈值设置位置闪烁switch(sys_ctrl.mode){case 1://温度下限lcd1602_show_string(7,0," ");delay_ms(100);lcd1602_show_nums(7,0,sys_ctrl.templ,2,0);break;case 2://温度上限lcd1602_show_string(10,0," ");delay_ms(100);lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);break;case 3://湿度下限lcd1602_show_string(7,1," ");delay_ms(100);lcd1602_show_nums(7,1,sys_ctrl.humil,2,0);break;case 4://湿度上限lcd1602_show_string(10,1," ");delay_ms(100);lcd1602_show_nums(10,1,sys_ctrl.humih,2,0);break;}//手动状态显示if(sys_ctrl.auto_flag)lcd1602_show_string(14,1,"SD");else lcd1602_show_string(14,1,"Au");break; }
}//系统数据设置
void sys_data_set(void)
{u8 key=0;static u8 jcs_flag=0;//加湿除湿标记static u8 jsr_flag=0;//加散热标记key=key_scan(0);//模式设置if(key==KEY3_PRESS){//自动模式下,模式设置if(sys_ctrl.auto_flag==0){sys_ctrl.mode++;if(sys_ctrl.mode>=5)sys_ctrl.mode=1;}//手动模式下,停止开关else{JS_PIN=1;CS_PIN=1;JR_PIN=1;SR_PIN=1; }}//在设置模式下,加else if(key==KEY1_PRESS){switch(sys_ctrl.mode){case 1://温度下限 sys_ctrl.templ++;if(sys_ctrl.templ>99)sys_ctrl.templ=0;break;case 2://温度上限 sys_ctrl.temph++;if(sys_ctrl.temph>99)sys_ctrl.temph=0;break;case 3://湿度下限 sys_ctrl.humil++;if(sys_ctrl.humil>99)sys_ctrl.humil=0;break;case 4://湿度上限 sys_ctrl.humih++;if(sys_ctrl.humih>99)sys_ctrl.humih=0;break;}//手动模式,加湿/除湿控制if(sys_ctrl.auto_flag==1){jcs_flag=!jcs_flag;//加湿if(jcs_flag==1){JS_PIN=0;CS_PIN=1; }//除湿else{JS_PIN=1;CS_PIN=0; }} }//在设置模式下,减else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://温度下限 sys_ctrl.templ--;if(sys_ctrl.templ<0)sys_ctrl.templ=99;break;case 2://温度上限 sys_ctrl.temph--;if(sys_ctrl.temph<0)sys_ctrl.temph=99;break;case 3://湿度下限 sys_ctrl.humil--;if(sys_ctrl.humil<0)sys_ctrl.humil=99;break;case 4://湿度上限 sys_ctrl.humih--;if(sys_ctrl.humih<0)sys_ctrl.humih=99;break;}//手动模式,加热/散热控制if(sys_ctrl.auto_flag==1){jsr_flag=!jsr_flag;//加热if(jsr_flag==1){JR_PIN=0;SR_PIN=1;}//散热else{JR_PIN=1;SR_PIN=0;} } }else if(key==KEY4_PRESS){if(sys_ctrl.mode!=0)//确定{sys_ctrl.mode=0;//将设定好的阈值写入到存储器中at24c02_write_one_byte(0,sys_ctrl.templ);at24c02_write_one_byte(1,sys_ctrl.temph);at24c02_write_one_byte(2,sys_ctrl.humil);at24c02_write_one_byte(3,sys_ctrl.humih); }else//自动/手动切换{sys_ctrl.auto_flag=!sys_ctrl.auto_flag;//自动模式下,关闭加湿/除湿/加热/散热if(sys_ctrl.auto_flag==0){JS_PIN=1;CS_PIN=1;JR_PIN=1;SR_PIN=1; } } }
}//应用控制系统
void appdemo_show(void)
{u8 i=5;sys_parm_init();//系统参数初始化lcd1602_init();DHT11_Init();//读取温度数据,等待稳定while(i--){DHT11_Read_Data(&sys_ctrl.temp,&sys_ctrl.humi);delay_ms(100); }sys_open_show();//系统开机界面显示while(1){ sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619




联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
相关文章:
【Proteus仿真】【51单片机】粮仓温湿度控制系统设计
文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用声光报警模块、LCD1602显示模块、DHT11温湿度模块、继电器模块、加热加湿除湿风扇等。 主要功能: 系统运行后,LCD1602显示传…...
【LINUX】环境变量以及main函数的参数
文章目录前言环境变量常见环境变量:设置环境变量:和环境变量相关的命令:环境变量的组织方式:获取环境变量环境变量可以被子进程继承环境变量总结main函数的参数前言 大家好久不见,今天分享的内容是环境变量和main函数…...
使用Pyparsing为嵌入式开发定义自己的脚本语言
Python在嵌入式开发中也很流行生成实用脚本。Pyparsing还允许你轻松地定义在Python上下文中运行的定制脚本语言。Python实现的系统旨在能够独立执行用户传递的一系列命令。你希望系统以脚本的形式接收命令。用户应该能够定义条件。这种对通信中逻辑元素的最初简单的声音要求&am…...
C win32基础学习(二)
上一篇我们已经介绍了关于窗口程序的一些基本知识。从本篇开始我们将正式进入C win32的学习中去。 正文 窗口创建过程 定义WinMain函数 定义窗口处理函数(自定义,处理消息) 注册窗口类(向操作系统写入一些数据) 创建窗口(内存…...
理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?
关于SOLID原则,我们已经学过单一职责、开闭、里式替换、接口隔离这四个原则。今天,我们再来学习最后一个原则:依赖反转原则。在前面几节课中,我们讲到,单一职责原则和开闭原则的原理比较简单,但是,想要在实践中用好却比较难。而今天我们要讲到的依赖反转原则正好相反。这个原则…...
读书笔记//《数据分析之道》
出版时间:2022年 作者曾在互联网大厂做数据分析。从举例可以洞见作者的工作经历。 点评:作者在数据分析领域非常资深,尝试在书中提供一个数据分析工作框架参考。书本内容有点感觉是ppt的集合,辅以案例说明。不过,干货还…...
1个串口用1根线实现多机半双工通信+开机控制电路
功能需求: 主机使用一个串口,与两个从机进行双向通信,主机向从机发送数据,从机能够返回数据,由于结构限制,主机与从机之间只有3根线(电源、地、数据线),并且从机上没有设…...
KUKA机器人外部自动运行模式的相关信号配置
KUKA机器人外部自动运行模式的相关信号配置 通过例如PLC这样的控制器来进行外部自动运行控制时,运行接口向机器人控制系统发出机器人进程的相关信号(例如运行许可、故障确认、程序启动等),机器人向上级控制系统发送有关运行状态和故障状态的信息。 必需的配置: 配置CEL…...
【RabbitMQ笔记02】消息队列RabbitMQ七种模式之最简单的模式
这篇文章,主要介绍RabbitMQ消息队列中七种模式里面最简单的使用模式。 目录 一、消息队列的使用 1.1、消息队列七种模式 1.2、最简单的模式使用 (1)引入依赖 (2)编写生产者 (3)编写消费者…...
Spring MVC 源码- RequestToViewNameTranslator 组件
RequestToViewNameTranslator 组件RequestToViewNameTranslator 组件,视图名称转换器,用于解析出请求的默认视图名。就是说当 ModelAndView 对象不为 null,但是它的 View 对象为 null,则需要通过 RequestToViewNameTranslator 组件…...
Linux--TCP编程--0216 17
观前提示:本篇博文的一些接口需要前几篇博文实现的 线程池的实现Liunx--线程池的实现--0208 09_Gosolo!的博客-CSDN博客 线程池的单例模式Linux--线程安全的单例模式--自旋锁--0211_Gosolo!的博客-CSDN博客 1.TCP编程需要用的接口 创建 sock…...
关于设计模式的记录
############### 先弄清楚类模型的关系 ############### 万物的抽象关系 ############### 1.组合 composition实菱形 实线 无填充箭头整体与部分的关系同生共死代码体现:成员变量如:生命体与器官,http请求(请求行,请求…...
Lambda-常见的函数式接口
如果需要使用Lambda接口,就必须要有一个函数式接口 函数式接口是有且仅有一个抽象方法的接口, 对应的注解是FunctionalInterface Java中内置的常见函数式接口如下: 1.Runnable/ Callable /*** The <code>Runnable</code> interface should be implem…...
P1196 [NOI2002] 银河英雄传说 带权并查集
[NOI2002] 银河英雄传说 题目背景 公元 580158015801 年,地球居民迁至金牛座 α\alphaα 第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展。 宇宙历 799799799 年,银河系的两大军…...
【项目实战】快来入门Groovy的基础语法吧
一、Groovy是什么? 1.1 与Java语言的关系 下一代的Java 语言,增强Java平台的唯一的脚本语言跟java一样,它也运行在 JVM 中。支持Java平台,无缝的集成了Java 的类和库;Groovy是一种运行在JVM上的动态语言,跑在JVM中的另一种语言编译后的.groovy也是以class的形式出现的。1…...
Mybatis中的动态SQL
Mybatis中的动态SQL 当存在多条件查询的SQL时,当用户某个条件的属性没有写时,就会存在问题,在test中则不能很好的运行 所以Mybatis提出了动态SQL。 即判断用户是否输入了某个属性 动态SQL中的一些问题 方法一 这个里的and是为了确保if条…...
VUE常用API
1.$set数据变了,视图没变 this.$set(targe,key,value)2.$nextTick:返回参数[函数]。是一个异步的,功能获得更新后DOM$nextTick(callback){return Promise.resolve().then(()>{callback();}) }3.$refs获取dom4.$el获取当前组件根…...
25 openEuler管理网络-使用nmcli命令配置ip
文章目录25 openEuler管理网络-使用nmcli命令配置ip25.1 nmcli介绍25.2 设备管理25.2.1 连接到设备25.2.2 断开设备连接25.3 设置网络连接25.3.1 配置动态IP连接25.3.1.1 配置IP25.3.1.2 激活连接并检查状态25.3.2 配置静态IP连接25.3.2.1 配置IP25.3.2.2 激活连接并检查状态25…...
如何安装和使用A-ops工具?
一、pip配置 1.配置信任域 pip3 config set global.trusted-host mirrors.tools.huawei.com2.配置pip源的url地址pip3 config set global.index-url http://mirrors.tools.huawei.com/pypi/simple 二、npm安装及配置 npm -v检测系统有无安装npm,如果没有的话需要配置ope…...
MySql数据库环境部署
MySql基础与Sql数据库概述基础环境的建立MYSQL数据库的连接方法MySql的默认数据库数据库端口号数据库概述 数据库(DataBase,DB)∶存储在磁带、磁盘、光盘或其他外存介质上、按定结构组织在一起的相关数据的集合。数据库管理系统〈DataBase Management S…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
