【Proteus仿真】【STM32单片机】环境监测系统设计

news2024/10/6 18:35:42

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、蜂鸣器、按键模块、DHT11温湿度传感器、继电器加热祛湿加湿模块等。

主要功能:
系统运行后,LCD1602显示传感器检测的温度、湿度及有害气体浓度值;若按下K3键进入阈值设置模式,默认以温度下限开始位置闪烁;再次按下K3键则进入温度上限闪烁,如此循环。可通过K1和K2调节阈值,当设定好后按下K4键确定并返回主界面;
如果温度高于上限,打开风扇;如果温度低于下限,打开加热;
如果温度在阈值范围内,关闭风扇和加热;
如果湿度高于上限,打开除湿;如果湿度低于下限,打开加湿;
如果湿度在阈值范围内,关闭除湿和加湿;
如果有害气体浓度高于上限,蜂鸣器报警;否则关闭报警;
主要功能如下:
1、温度/湿度/有害气体检测
2、LCD1602显示
3、阈值设置/报警指示
4、自动控制调节


二、软件设计

/*
作者:嗨小易(QQ:3443792007)
*/


//系统数据获取
void sys_data_get(void)
{
	while(1)
	{
		//读取DHT11温湿度值
		DHT11_Read_Data(&sys_ctrl.temp,&sys_ctrl.humi);
		//获取有害气体浓度
		sys_ctrl.gas=pcf8591_read_adcvalue(0);
		sys_ctrl.gas=cal_map(sys_ctrl.gas,0,255,0,99);	

		break;
	}	
}

//系统数据显示
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(14,0,sys_ctrl.gas,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);
		//有害气体浓度阈值显示
		lcd1602_show_nums(14,1,sys_ctrl.gash,2,0);		
		
		//设置阈值下,数字闪烁提示
		switch(sys_ctrl.mode)
		{
			case 1://温度下限
				lcd1602_show_string(7,0,"  ");
				delay_ms(30);
				lcd1602_show_nums(7,0,sys_ctrl.templ,2,0);
				break;
			case 2://温度上限
				lcd1602_show_string(10,0,"  ");
				delay_ms(30);
				lcd1602_show_nums(10,0,sys_ctrl.temph,2,0);
				break;
			case 3://湿度下限
				lcd1602_show_string(7,1,"  ");
				delay_ms(30);
				lcd1602_show_nums(7,1,sys_ctrl.humil,2,0);
				break;
			case 4://湿度上限
				lcd1602_show_string(10,1,"  ");
				delay_ms(30);
				lcd1602_show_nums(10,1,sys_ctrl.humih,2,0);
				break;
			case 5://有害气体浓度上限
				lcd1602_show_string(14,1,"  ");
				delay_ms(30);
				lcd1602_show_nums(14,1,sys_ctrl.gash,2,0);
				break;
		}
		
		break;			
	}
}


//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	
	key=KEY_Scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>5)sys_ctrl.mode=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;
			case 5://有害气体浓度上限 
				sys_ctrl.gash++;
				if(sys_ctrl.gash>99)sys_ctrl.gash=0;
				break;
		}			
	}
	//在设置模式下,减
	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;
			case 5://有害气体浓度上限 
				sys_ctrl.gash--;
				if(sys_ctrl.gash<0)sys_ctrl.gash=99;
				break;
		}
	}
	//确定
	else if(key==KEY4_PRESS)
	{
		sys_ctrl.mode=0;
	}
}


//应用控制系统
void appdemo_show(void)
{
	u8 i=5;
	sys_parm_init();//系统参数初始化
	KEY_Init();
	BEEP_Init();
	DHT11_Init();
	ctrl_pin_init();
	pcf8591_init();
	while(i--)
	{
		//读取DHT11温湿度值
		DHT11_Read_Data(&sys_ctrl.temp,&sys_ctrl.humi);
		//获取有害气体浓度
		sys_ctrl.gas=pcf8591_read_adcvalue(0);
		sys_ctrl.gas=cal_map(sys_ctrl.gas,0,255,0,99);
		delay_ms(100);
	}
	
	lcd1602_init();//LCD1602初始化
	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设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现达梦数据库 disql 工具在 Linux 系统里上下翻动查看和编辑历史命令

本文内容已在如下环境上测试&#xff1a; 操作系统&#xff1a;银河麒麟10 数据库版本&#xff1a;达梦8 一、默认情况下&#xff0c;在 Linux 系统中使用 disql 命令时&#xff0c;若使用键盘的上下键查找历史命令复用&#xff0c;会出现乱码&#xff0c;导致在 Linux 上编写…

Scala的简单使用

文章目录Scala的简单使用&#xff08;一&#xff09;交互模式1、命令行方式2、文件方式&#xff08;二&#xff09;编译模式1、创建源程序2、编译成字节码3、解释执行对象Scala的简单使用 Scala可以在交互模式和编译模式两种方式下运行 &#xff08;一&#xff09;交互模式 在…

到了35岁,软件测试职业发展之困惑如何解?

35岁&#xff0c;从工作时间看&#xff0c;工作超过10年&#xff0c;过了7年之痒&#xff0c;多数IT人都已经跳槽几次。 35岁&#xff0c;发展比较好的软件测试人&#xff0c;已经在管理岗位&#xff08;测试经理甚至测试总监&#xff09;或已经成为测试专家或测试架构师。发展…

超280人靠这份软件测试面试题进入大厂,堪称金三银四最强,建议收藏

个人感觉目前各个大中厂面试不好的地方是&#xff0c;都在朝着背面试八股文的方向发展&#xff08;曾经面试某二线厂&#xff0c;对着面试官纯背了 40 分钟概念&#xff09;&#xff0c;但不得不承认这也是企业在短时间内筛选面试者的一个重要手段。 今天为了帮助大家&#xff…

Java网络编程入门

1 网络编程入门 1.1 网络编程概述 计算机网络&#xff1a;是指将地理位置不同的具有独立功能的多台计算机及 其外部设备&#xff0c;通过通信线路连接起来,在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程…

Java-多线程-增强篇-锁 强化 第一篇

今天我们来学一下锁 会持续保持更新 欢迎追更哈 Java - 多线程 - 锁和提升 第1篇 首先强调一点&#xff1a;Java多线程的锁都是基于对象的&#xff0c;Java中的每一个对象都可以作为一个锁。同时&#xff0c;类锁也是对象锁&#xff0c;类是Class对象 Java8锁 核心思想 关键…

新建微服务模块Maven子工程

gitegg-cloud是微服务框架&#xff0c;整体功能是非业务相关的基础功能&#xff0c;在实际业务开发过程中需要新建微服务的业务模块&#xff0c;根据业务的整体规划&#xff0c;设计新建Maven子工程。   下面以常用的电商项目举例新建Maven子工程&#xff0c;电商项目一般包含…

【总结】2023数学建模美赛!收官!

今年的美赛时间是2.17-2.21&#xff0c;这学期疫情放开了之后管的没那么严了&#xff0c;我们小组就都提前一天到学校了&#xff0c;全力准备17号的比赛。 时间流程 刚拿到6个题的时候&#xff0c;我们三个人一人看两个题&#xff0c;每个人从两个题中再选出来一个自己觉得有…

【蓝桥杯每日一题】前缀和算法

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;我与杀戮之中绽放&#xff0c;亦如黎明的花…

数据结构与算法(三):栈与队列

上一篇《数据结构与算法&#xff08;二&#xff09;&#xff1a;线性表》中介绍了数据结构中线性表的两种不同实现——顺序表与链表。这一篇主要介绍线性表中比较特殊的两种数据结构——栈与队列。首先必须明确一点&#xff0c;栈和队列都是线性表&#xff0c;它们中的元素都具…

4、Redis安装

前言&#xff1a;工具下载地址阿里云盘&#xff1a;Redis&#xff1a;https://www.aliyundrive.com/s/qSYxRyXAxQy提取码: ne27一、Redis下载下载地址&#xff1a;https://github.com/tporadowski/redis/releases此处下载mis版本&#xff0c;安装版mis版直接安装成功就启动服务…

CCNP350-401学习笔记(451-500题)

451、what is the function of the LISP map resolver? A. to send traffic to non-LISP sites when connected to a service provider that does not accept nonroutable EIDs as packet sources B. to connect a site to the LISP-capabie part of a core network, publish …

数据挖掘,计算机网络、操作系统刷题笔记53

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记53 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

2023年AI语音会议汇总

2023年&#xff0c;AI语音领域学术会议精彩纷呈&#xff0c;语音之家汇总了国内外重要的会议呈现给大家&#xff0c;大家可根据时间统筹安排好2023年的学术活动交流行程。如果信息有误&#xff0c;欢迎指正。 ICASSP 2023 2023 IEEE International Conference on Acoustics, S…

【操作系统】概述

操作系统 操作系统的定义与目标 定义&#xff1a;操作系统是控制管理计算机系统的硬软件&#xff0c;分配调度资源的系统软件。 目标&#xff1a;方便性&#xff0c;有效性&#xff08;提高系统资源的利用率、提高系统的吞吐量&#xff09;&#xff0c;可扩充性&#xff0c;…

node.js降低版本的方式(解决sass和node.js冲突)

一、概述 在使用vue的时候&#xff0c;会遇到项目的依赖&#xff08;package.json可以查看依赖信息&#xff09;下载失败的原因。因为项目用的依赖和要运行环境的node.js版本起了冲突&#xff0c;这个时候就要么更改项目的依赖版本&#xff0c;要么更改node.js的版本。本文示范…

11种主流生成式AI应用【2023】

生成式 AI 允许在几分钟内生成新颖逼真的视觉、文本和动画内容。 据 Gartner 称&#xff0c;到 2025 年&#xff0c;生成式 AI 生成的数据将占所有生成数据的 10%。 作为 2022 年最重要的战略技术趋势之一&#xff0c;人工智能 (AI) 的这一分支具有广泛的应用&#xff0c;适用…

提高转化率的 3 个客户引导最佳实践

如果您的试用客户没有转化为付费客户&#xff0c;或者您总体上正在努力解决试用到付费转化率&#xff0c;那么您来对地方了。本文的最终目标是向您展示一些可用于提高自己的激活率和整体试用到付费转化的最佳客户引导实践。SaaS公司目前生活在一个以产品为主导的增长时代。换句…

Tencent OS下逻辑卷(LVM)增加硬盘扩容

上一篇文章写了逻辑卷创建以及使用剩余空间为已经创建的逻辑卷扩容。 本篇是针对卷组空间已经用尽时的扩容方法。那就是增加硬盘。 首先我们为虚拟机增加硬盘/dev/sdd 使用fdisk为/dev/sdd分区,方法在上一篇文章已经描述,在此不再赘述。 新增的硬盘使用如下命令添加到卷组…

【日志框架-笔记】JUL日志框架的介绍及其使用

日志框架JUL日志框架入门程序Logger直接的父子继承关系Formatters独立的配置文件进行编写日志使用日志打印异常学习日志无非就是为了四大目的&#xff1a; 问题诊断&#xff0c;调试程序&#xff1b;错误定位&#xff0c;定位数据问题、网络问题、内存问题等错误位置&#xff…