【Proteus仿真】【51单片机】水质监测报警系统设计

文章目录

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


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。

主要功能:
系统运行后,LCD1602显示温度、浑浊度、PH浓度值;
可通过按键K3进入阈值设置模式,K3键用于切换选择温度阈值、浑浊度、PH浓度,K1和K2用于调节对应阈值,K4用于确定并返回主界面。
当温度高于上限,温度高指示,打开降温,蜂鸣器报警;
当浑浊高于上限,浑浊度高指示,蜂鸣器报警;
当PH高于上限,PH上限指示,蜂鸣器报警;
当PH低于下限,PH下限指示,蜂鸣器报警;
当PH正常,关闭指示和报警。


二、软件设计

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

*/


//系统数据显示
void sys_data_show(void)
{
	u8 buf[5];
	while(1)
	{
		//正常模式显示
		if(sys_ctrl.mode==0)
		{
			//温度显示
			buf[0]=sys_ctrl.temp/100+0x30;
			buf[1]=sys_ctrl.temp%100/10+0x30;
			buf[2]='.';
			buf[3]=sys_ctrl.temp%100%10+0x30;
			buf[4]='\0';
			lcd1602_show_string(5,0,buf);
			//浑浊度显示
			lcd1602_show_nums(4,1,sys_ctrl.turbid,2,0);
			//PH显示
			buf[0]=sys_ctrl.ph/100+0x30;
			buf[1]=sys_ctrl.ph%100/10+0x30;
			buf[2]='.';
			buf[3]=sys_ctrl.ph%100%10+0x30;
			buf[4]='\0';
			lcd1602_show_string(12,1,buf);	
		}
		//阈值设置显示
		else
		{
			//PH下限值显示
			buf[0]=sys_ctrl.phl/100+0x30;
			buf[1]=sys_ctrl.phl%100/10+0x30;
			buf[2]='.';
			buf[3]=sys_ctrl.phl%100%10+0x30;
			buf[4]='\0';
			lcd1602_show_string(3,0,buf);
			//PH上限值显示
			buf[0]=sys_ctrl.phh/100+0x30;
			buf[1]=sys_ctrl.phh%100/10+0x30;
			buf[2]='.';
			buf[3]=sys_ctrl.phh%100%10+0x30;
			buf[4]='\0';
			lcd1602_show_string(8,0,buf);
			//温度阈值显示
			buf[0]=sys_ctrl.temph/100+0x30;
			buf[1]=sys_ctrl.temph%100/10+0x30;
			buf[2]='.';
			buf[3]=sys_ctrl.temph%100%10+0x30;
			buf[4]='\0';
			lcd1602_show_string(3,1,buf);
			//浑浊度阈值显示
			lcd1602_show_nums(13,1,sys_ctrl.turbidh,2,0);

			//阈值设定,数据位置闪烁
			switch(sys_ctrl.mode)
			{
				case 1://PH下
					lcd1602_show_string(3,0,"    ");
					delay_ms(100);
					buf[0]=sys_ctrl.phl/100+0x30;
					buf[1]=sys_ctrl.phl%100/10+0x30;
					buf[2]='.';
					buf[3]=sys_ctrl.phl%100%10+0x30;
					buf[4]='\0';
					lcd1602_show_string(3,0,buf);
					break;
				case 2://PH上
					lcd1602_show_string(8,0,"    ");
					delay_ms(100);
					buf[0]=sys_ctrl.phh/100+0x30;
					buf[1]=sys_ctrl.phh%100/10+0x30;
					buf[2]='.';
					buf[3]=sys_ctrl.phh%100%10+0x30;
					buf[4]='\0';
					lcd1602_show_string(8,0,buf);
					break;
				case 3://温度
					lcd1602_show_string(3,1,"    ");
					delay_ms(100);
					buf[0]=sys_ctrl.temph/100+0x30;
					buf[1]=sys_ctrl.temph%100/10+0x30;
					buf[2]='.';
					buf[3]=sys_ctrl.temph%100%10+0x30;
					buf[4]='\0';
					lcd1602_show_string(3,1,buf);
					break;
				case 4://浑浊
					lcd1602_show_string(13,1,"  ");
					delay_ms(100);
					lcd1602_show_nums(13,1,sys_ctrl.turbidh,2,0);
					break;	
			}
		}

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	static oneflag=0;

	key=key_scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>=5)sys_ctrl.mode=1;
		if(oneflag==0)
		{
			oneflag=1;
			_parm_set_show();//系统参数设置显示
		}
	}
	if(sys_ctrl.mode!=0)
	{
		//在设置模式下,加
		if(key==KEY1_PRESS)
		{	
			switch(sys_ctrl.mode)
			{
				case 1://PH下 
					sys_ctrl.phl++;
					if(sys_ctrl.phl>140)sys_ctrl.phl=0;
					break;
				case 2://PH上 
					sys_ctrl.phh++;
					if(sys_ctrl.phh>140)sys_ctrl.phh=0;
					break;
				case 3://温度 
					sys_ctrl.temph++;
					if(sys_ctrl.temph>999)sys_ctrl.temph=0;
					break;
				case 4://浑浊 
					sys_ctrl.turbidh++;
					if(sys_ctrl.turbidh>99)sys_ctrl.turbidh=0;
					break;
			}				
		}
		//在设置模式下,减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://PH下 
					sys_ctrl.phl--;
					if(sys_ctrl.phl<0)sys_ctrl.phl=140;
					break;
				case 2://PH上 
					sys_ctrl.phh--;
					if(sys_ctrl.phh<0)sys_ctrl.phh=140;
					break;
				case 3://温度 
					sys_ctrl.temph--;
					if(sys_ctrl.temph<0)sys_ctrl.temph=999;
					break;
				case 4://浑浊 
					sys_ctrl.turbidh--;
					if(sys_ctrl.turbidh<0)sys_ctrl.turbidh=99;
					break;
			}
		}
		//确定
		else if(key==KEY4_PRESS)
		{
			sys_ctrl.mode=0;
			oneflag=0;
			sys_open_show();//系统开机界面显示		
		}	
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	//正常工作模式下
	if(sys_ctrl.mode==0)
	{
		//温度高于上限,温度高指示,打开降温,蜂鸣器报警
		if(sys_ctrl.temp>sys_ctrl.temph)
		{
			LED_TPH=0;
			JW_RELAY=0;
			beep_alarm(10,1000);
		}
		else
		{
			LED_TPH=1;
			JW_RELAY=1;
		}
		//浑浊高于上限,浑浊度高指示,蜂鸣器报警
		if(sys_ctrl.turbid>sys_ctrl.turbidh)
		{
			LED_HZH=0;
			beep_alarm(10,1000);	
		}
		else
		{
			LED_HZH=1;
		}
		//PH高于上限,PH上限指示,蜂鸣器报警
		if(sys_ctrl.ph>sys_ctrl.phh)
		{
			LED_PHH=0;
			beep_alarm(10,1000);
		}
		//PH低于下限,PH下限指示,蜂鸣器报警
		else if(sys_ctrl.ph<sys_ctrl.phl)
		{
			LED_PHL=0;
			beep_alarm(10,1000);	
		}
		else
		{
			LED_PHH=1;
			LED_PHL=1;	
		}				
	}		
}




三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GUI软件开发】小红书评论采集:自动采集1w多条,含二级评论!

文章目录 一、爬取目标1.1 效果截图1.2 演示视频1.3 软件说明 二、代码讲解2.1 爬虫采集模块2.2 软件界面模块2.3 日志模块 三、附完整源码及软件 一、爬取目标 您好&#xff01;我是马哥python说 &#xff0c;一名10年程序猿。 我用python开发了一个爬虫采集软件&#xff0c…

矩阵起源荣获第八届“创客中国”深圳市中小企业创新创业大赛三等奖

近日&#xff0c;2023年第八届“创客中国”深圳市中小企业创新创业大赛圆满落下帷幕&#xff0c;矩阵起源&#xff08;深圳&#xff09;信息科技有限公司凭借项目”MatrixOne 新一代超融合异构云原生数据库”荣获企业组三等奖。 本届大赛由深圳市工业和信息化局、深圳市中小企业…

如何用Python3+requests+unittest实现接口自动化测试实战

一、Requests介绍 首先让我们来看 Requests 官方的介绍&#xff1a; Requests is an elegant and simple HTTP library for Python, built for human beings. 翻译过来就是&#xff1a;Requests 是为人类写的一个优雅而简单的 Python HTTP 库。这个介绍很直白了&#xff0c;…

ElasticSearch文档分析

ElasticSearch文档分析 包含下面的过程&#xff1a; 将一块文本分成适合于倒排索引的独立的 词条将这些词条统一化为标准格式以提高它们的“可搜索性”&#xff0c;或者 recall 分析器执行上面的工作。分析器实际上是将三个功能封装到了一个包里&#xff1a; 字符过滤器 首先&a…

乐优商城(三)品牌管理

1. 品牌的新增 1.1 url 异步请求 点击品牌管理下的新增品牌&#xff0c;填写品牌信息后提交 2.打开浏览器控制台 由此可以得知&#xff1a; 请求方式&#xff1a;POST请求路径&#xff1a;/item/brand请求参数&#xff1a;{name: “测试品牌”, image: “”, cids: “76,32…

云端生成式 AI – 基于 Amazon EKS 的 Stable Diffusion 图像生成方案

Stable Diffusion 是当下生成式 AI 领域最受欢迎的开源多模态语言-图像模型&#xff0c;由于其易用的接口和良好的使用体验&#xff0c;受到了开源社区和广大设计行业从业者的追捧。Stable Diffusion 模型版本正在快速迭代&#xff0c;并带动了各行各业的生产力变革。目前市场上…

SAP 40策略测试及简介

相信很多很多的行业中都会用到40策略按库存生产,接下来我们将详细的测试40策略 1、首先准备好成品物料AB2。 2、创建BOM—cs01 3、创建主配方C202 ,如果是离散制造的话就是创建工艺路线CA01 4、创建生产版本C223 5、同样的AB2物料增加库存20KG。 6、创建计划独立需求MD…

微信智能机器人开发-基于E云管家,实现强大的个微管理

本文介绍了如何利用E云管家开发一个功能丰富的微信智能机器人。E云管家是一个开发协议&#xff0c;为微信机器人提供了强大的功能支持&#xff0c;包括关键字回复、自动通过好友和自动发朋友圈等特性。我们将通过一个简单的示例演示如何在E云管家下实现这些功能&#xff0c;并附…

EMERSON艾默生变频器维修M600/M701/M702

艾默生变频器维修常见系列&#xff1a; EV1000 系列&#xff1a;体积小&#xff0c;操作简便&#xff0c;适用于塑料机械、纺织机械、烟草机械、陶瓷机械、制药机械食品机械、印刷机械、包装机械、空调等专用设备配套。 EV2000 系列&#xff1a;功率范围广&#xff0c;功能更…

2020年五一杯数学建模B题基于系统性风险角度的基金资产配置策略分析解题全过程文档及程序

2020年五一杯数学建模 B题 基于系统性风险角度的基金资产配置策略分析 原题再现 近年来&#xff0c;随着改革开放程度的不断提高&#xff0c;我国经济运行中的各种风险逐渐暴露并集中传导和体现于金融领域。党的“十九大”报告提出“守住不发生系统性金融风险的底线”要求&am…

企业组建客服中心,需要考虑哪些问题?

随着市场竞争的加剧&#xff0c;企业越来越注重客户服务。因此&#xff0c;组建一个专业的客服中心已成为企业的一个重要战略举措。然而&#xff0c;这个任务不仅需要考虑技术和人员方面的问题&#xff0c;还需要考虑许多其他的因素。在本文中&#xff0c;我们将探讨企业在组建…

使用双动态令牌混合器学习全局和局部动态以进行视觉识别

TransXNet: Learning Both Global and Local Dynamics with a Dual Dynamic Token Mixer for Visual Recognition 1、问题与解决2、引言3、方法3.1 双动态令牌混合器(D- Mixer)3.2 IDConv(Input-dependent Depthwise Convolution)3.3 Overlapping Spatial Reduction Attention …

Java 身份证号校验,根据身份证号识别出生地

Java 身份证号校验&#xff1a; import org.apache.commons.lang.StringUtils;import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.Map;/*** desc 身份证工具类* auth llp* date 2022/7/7 16:13*/ public class IdCardNum…

神仙打架!腾讯云阿里云谁更棋高一着?

现在&#xff0c;腾讯云和阿里云都在打价格战&#xff0c;推出了一系列的优惠政策。其中&#xff0c;腾讯云服务器只需要88元&#xff0c;而阿里云服务器也只需要99元。这么便宜的价格&#xff0c;是不是让你心动不已呢&#xff1f; 腾讯云的88元服务器&#xff1a;https://te…

MySQL优化方案

Mysql优化 一、连接配置优化1.服务端配置2.客户端优化 二、架构优化1.使用缓存2.做读写分离&#xff08;集群、主从复制&#xff09;3.分库分表3.1.垂直分库3.2.垂直分表3.3.水平分表3.4.水平分库 4.消息队列削峰 三、优化器——SQL分析与优化1.慢查询优化1.1.配置慢查询日志1.…

第三方支付支付宝的信息安全分析

随着信息技术的进步&#xff0c;网络结算方式也在迅速发展。网上结算虽然便捷快速&#xff0c;但是如果没有保障的平台或者法律的支持&#xff0c;双方在没有约束的情况下&#xff0c;就会导致拖延、折扣或者拒付等许多经济事件的发生&#xff0c;由此第三方支付就随之产生。第…

嵌入式开发:ST-LINK V2.1仿真器,Type-C接口

标题ST-LINK V2.1仿真器&#xff0c;Type-C接口 之前做的版本虽然也是V2.1的&#xff0c;但使用的接口是USB的Micro形式&#xff0c;不支持正反插&#xff0c;也不兼容现在通用的手机数据线&#xff0c;出差的时候又要多带一条线。 现在终于把我的ST-LINK的接口改了一下 如下…

oracle11G在linux环境下的卸载操作

1.使用SQL*PLUS停止数据库 [oracleOracleTest oracle]$ sqlplus / as sysdba SQL> shutdown [immediate] SQL> exit2.停止Listener [oracleOracleTest oracle]$ lsnrctl stop3.停止HTTP服务 [rootOracleTest /root]# service httpd stop4.用su或者重新登录到root(如想…

『吴秋霖赠书活动 | 第四期』《Spring Boot微服务实战》

文章目录 1. 写在前面2. Spring Boot介绍3. Spring Boot实战4. Spring Boot主要内容概览 1. 写在前面 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【…

视频剪辑方法:为视频剪辑添加亮点,如何制作精美的滚动字幕

在视频剪辑中&#xff0c;滚动字幕是一个重要的元素&#xff0c;它可以为视频增添视觉吸引力&#xff0c;增强观看体验。滚动字幕的长度和速度也是非常重要的因素。如果滚动字幕太长&#xff0c;会让人感到拖沓&#xff1b;如果滚动字幕太短&#xff0c;会让人感到匆忙。因此&a…
最新文章