【Proteus仿真】【51单片机】水箱液位检测控制装置设计

2023-10-28


一、主要功能

1、压力液位检测
2、阈值设定,超限报警
3、压力液位显示
4、补排水自动控制

二、硬件资源

1、51单片机核心模块
2、PCF8591 AD/DA模块
3、LCD1602液晶模块
4、蜂鸣器模块
5、排水、补水控制电路
6、按键模块

三、软件设计

#include "appdemo.h"
#include "lcd1602.h"
#include "key.h"
#include "beep.h"
#include "pcf8591.h"
#include "exti.h"


//定义补水控制脚
sbit MOTOR_BS=P1^0;
//定义排水控制脚
sbit MOTOR_PS=P1^1;


//定义结构体
_sys_ctrl sys_ctrl;


//阈值设定
void key_set_threshold(void)
{
	u8 key=0;

   	key=key_scan(0);
	//模式设定显示
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>=3)sys_ctrl.mode=1;
		lcd1602_clear();
		switch(sys_ctrl.mode)
		{
			case 1://液位上限设置显示界面 
				lcd1602_show_string(0,0,"LevelH Set:");
				break;
			case 2://液位下限设置显示界面 
				lcd1602_show_string(0,0,"LevelL Set:");
				break;
			default : 
				lcd1602_show_string(0,0,"Display Error");
				break;
		}	
	}
	//确定,返回主界面
	else if(key==KEY4_PRESS)
	{
		sys_ctrl.mode=0;
		lcd1602_clear();
		lcd1602_show_string(0,0," Current Level  ");
		lcd1602_show_string(0,1,"    mm");
	}

	//液位上限设置
	if(sys_ctrl.mode==1)
	{  	
		if(key==KEY1_PRESS)//加
		{
			sys_ctrl.levelh+=THRESHOLD_STEP;
			if(sys_ctrl.levelh>MAX_VALUE)sys_ctrl.levelh=0;		
		}
		else if(key==KEY2_PRESS)//减
		{
			sys_ctrl.levelh-=THRESHOLD_STEP;
			if(sys_ctrl.levelh<0)sys_ctrl.levelh=MAX_VALUE;				
		}
		lcd1602_show_nums(0,1,sys_ctrl.levelh,4,0);					
	}
	//液位下限设置
	else if(sys_ctrl.mode==2)
	{  	
		if(key==KEY1_PRESS)//加
		{
			sys_ctrl.levell+=THRESHOLD_STEP;
			if(sys_ctrl.levell>MAX_VALUE)sys_ctrl.levell=0;			
		}
		else if(key==KEY2_PRESS)//减
		{
			sys_ctrl.levell-=THRESHOLD_STEP;
			if(sys_ctrl.levell<0)sys_ctrl.levell=MAX_VALUE;				
		}
		lcd1602_show_nums(0,1,sys_ctrl.levell,4,0);			
	}
}
 
//参数初始化
void sys_para_init(void)
{
	sys_ctrl.mode=0;
	sys_ctrl.levelh=80;
	sys_ctrl.levell=20;	
}

//数据采集
void sys_get_data(void)
{
	u8 i=0;
	u8 ad_value=0;
	float vol=0;

	while(sys_ctrl.mode==0)
	{
		i++;
		if(i%200==0)
		{
			//读取压力AD值
			ad_value=pcf8591_read_adcvalue(0);
			//计算电压
			vol=(float)ad_value*5.0/256;
			//计算液位高度VO=K*H+∮=0.038*H+1.105(V)	//H单位mm
			sys_ctrl.level=(vol-1.105)/0.038;
			if(sys_ctrl.level<=0)sys_ctrl.level=0;
			break;				
		}
		delay_ms(1);			
	}			
}

//采集数据显示
void sys_data_show(void)
{
	while(sys_ctrl.mode==0)
	{
		lcd1602_show_nums(0,1,sys_ctrl.level,4,0);
		break;				
	}
}

//液位自动控制
void auto_control(void)
{
	while(sys_ctrl.mode==0)
	{
		//上限阈值,排水开启,补水关闭,蜂鸣器报警
		if(sys_ctrl.level>sys_ctrl.levelh)
		{
			MOTOR_PS=0;
			MOTOR_BS=1;
			beep_alarm(100,20);			
		}
		//下限阈值,排水关闭,补水开启,蜂鸣器报警
		else if(sys_ctrl.level<sys_ctrl.levell)
		{
			MOTOR_PS=1;
			MOTOR_BS=0;
			beep_alarm(100,20);			
		}
		//正常液位,排水关闭,补水关闭
		else
		{
			MOTOR_PS=1;
			MOTOR_BS=1;	
		}

		break;				
	}	
}

//智能温湿度大棚控制系统
void appdemo_show(void)
{
	lcd1602_init();
	//初始界面
	lcd1602_show_string(0,0," Current Level  ");
	lcd1602_show_string(0,1,"    mm");
	
	sys_para_init();//系统参数初始化
	sys_get_data();

	while(1)
	{
		key_set_threshold();//阈值设定
		sys_get_data();//数据采集
		sys_data_show();//采集数据显示
		auto_control();//温湿度自动控制
	}
}

四、实验现象

B站演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Proteus仿真】【51单片机】水箱液位检测控制装置设计 的相关文章

  • IKE SA和IPSec SA的区别

    刚接触IPSec的时候 一直很奇怪 为什么要做两阶段的协商 先协商出来一个IKE SA 然后再IKE SA的基础上协商出来一个IPSec SA 直接一步到位协商出IPSec SA不是很好吗 但是在实际应用中 直接协商IPSec SA就显得不
  • 人工智能-动物识别系统

    在本系统当中 知识库中的知识用产生式规则来表示 共有如下15条规则 R1 IF该动物有奶THEN该动物是哺乳动物 R2 IF该动物有毛发THEN该动物是哺乳动物 R3 IF该动物有羽毛THEN该动物是鸟 R4 IF该动物会飞AND会下蛋TH
  • 《深入浅出深度学习》之“从逻辑学到认知科学”

    大家应该都听说过 在2016年 Google DeepMind 的AlphaGo 与韩国围棋大师李世石九段进行了著名的人机大战 并且取得完胜 媒体描述AlphaGo的胜利时 都提到了人工智能 Artificial Intelligence
  • MySQL数据库for CentOS7 yum安装、5.7.30编译安装和基础操作

    1 MySQL数据库简介 MySQL 是一种关系数据库管理系统 关系数据库将数据保存在不同的表中 而不是将所有数据放在一个大仓库内 这样就增加了速度并提高了灵活性 MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言 关系数据库管

随机推荐

  • 华为手机恢复出厂设置出现com.android.phone,如何在华为手机中恢复出厂设置?怎么在华为手机中一键还原?...

    如何在华为手机中恢复出厂设置 怎么在华为手机中一键还原 许多使用华为手机的小伙伴在使用一段时间手机过后 手机会变得有些卡顿 我们可以将手机恢复出厂设置来缓解手机卡顿的现象 今天 小编就教大家在华为手机中恢复出厂设置 具体如下 1 我们打开手
  • 一文讲完Java常用设计模式(全23种)

    文章目录 介绍 设计模式的六大原则 一 创建型模式 1 单例模式 Singleton Pattern 1 饿汉式 2 懒汉式 双检锁 3 静态内部类 4 枚举 2 原型模式 Prototype Pattern 3 工厂模式 Factory
  • js点击按钮改变文本

    h1 My Web Page h1 p A Paragraph p
  • linux环境下搭建宝塔(一键部署)

    了解宝塔 简单好用的服务器运维面板 宝塔Linux面板是提升运维效率的服务器管理软件 支持一键LAMP LNMP 集群 监控 网站 FTP 数据库 JAVA等100多项服务器管理功能 有30个人的专业团队研发及维护 经过200多个版本的迭代
  • Spring Boot 最核心的 25 个注解

    Spring Boot 最核心的 25 个注解 1 SpringBootApplication 这是 Spring Boot 最最最核心的注解 用在 Spring Boot 主类上 标识这是一个 Spring Boot 应用 用来开启 Sp
  • h5事件监听

    问题 点击div 或弹框 外的任何区域div 或弹框 消失 前情提要 项目是用angular写的移动端页面 测试反馈点击确认按钮每次都要点击2次才生效 体验很不好 需要优化 页面如下图所示 点击金额输入框键盘出现输入金额 键盘是单独封装的组
  • vi编辑器的使用(1)

    Linux 系统下的文本编辑器有很多种 包括图形模式下的gedit kwrite等 文本模式下的vi vim vi的增强版本 emacs等 其中vi和emacs是Linux系统中最常用的两个编辑器 本节主要介绍vi编辑器 主要内容包括 vi
  • Qt事件(消息)循环的源码分析之创建

    Qt程序的特点 Qt 是事件驱动的 尤其是你用Qt做界面开发时 你必须知道Qt的事件循环是如何开展的 从Win32到Qt 程序入口WinMain 创建窗口 进入事件 消息 循环 int main int argc char argv 入口m
  • Java常用日期工具实现

    获取今日日期 获取本月第一天日期 获取本月最后一天日期 date转日期字符串 日期字符串转date 日期字符串格式化 根据date获取past天前的日期 获取当前年周数 yyyy w 获取范围时间内的日期集合 public class My
  • 第八届蓝桥杯JavaB组省赛I题----分巧克力

    儿童节那天有K位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有N块巧克力 其中第i块是Hi x Wi的方格组成的长方形 为了公平起见 小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们 切出的巧克力需要满足 形状是正
  • 建模杂谈系列225 小结与反思

    说明 一个项目结束了 趁这两三天在休息 把本次的收获和教训都盘点一下 然后再开始一个更刺激的项目 短暂的停顿 是为了把过去一段时间辛苦的成果固化一下 把那些很容易消散的宝贵知识和经验可以给未来做决策工具 内容 1 事实 这是在疫情之后做的第
  • Vue3——Suspense组件

    Suspense组件 官网中有提到他是属于实验性功能
  • 面试知识点-- 操作系统执行可执行程序时,内存分配是怎样的?

    可执行程序的内存分布 GNU编译器生成的目标文件默认格式为elf executive linked file 格式 这是Linux系统所采用的可执行链接文件的通用文件格式 elf格式由若干个段 section 组成 由标准c源代码生成的目标
  • Java遍历List四种方法的效率对比

    Java遍历List四种方法的效率对比 遍历方法简介 Java遍历List的方法主要有 1 for each for bject o list 2 Iterator Iterator iter list iterator while ite
  • Linux配置、安装交叉编译环境 gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz

    步骤测试流程 步骤 1 将文件 gcc 4 6 2 glibc 2 13 linaro multilib 2011 12 tar gz 拷贝到 Ubuntu 主目录下 i MX6 用户光盘 i MX6 用户光盘 A linux tool g
  • 【Keras】LSTM和Bi-LSTM神经网络

    KerasLSTM和Bi LSTM神经网络 导入安装包 加载并划分数据集 数据处理 创建LSTM模型并训练 评估模型 创建Bi LSTM模型并训练 打印Bi LSTM模型 评估Bi LSTM模型 导入安装包 import tensorflo
  • FPGA资源之LUT

    文章目录 一 CLB资源简介 二 LUT查找表资源 SLICEM SLICEL 三 LUT资源 3 1 LUT资源工作原理 3 2 LUT资源内部结构 3 3 LUT功能的拓展 3 4 LUT硬件原语 一 CLB资源简介 Xilinx 7的
  • llvm 文件后缀转换

    emit llvm 生成和 llvm 相关的代码 S ll 可读文件 c 二进制文件 s 汇编代码 参考 http www aosabook org en llvm html http llvm org docs WritingAnLLVM
  • Android--通知之Notification

    前言 之前一篇博客讲了Android下使用Toast的方式提示消息 这篇博客讲解一下在Android中使用Notification提示消息给用户 Notification是一种具有全局效果的通知 程序一般通过NotificationMana
  • 【Proteus仿真】【51单片机】水箱液位检测控制装置设计

    文章目录 一 主要功能 二 硬件资源 三 软件设计 四 实验现象 联系作者 一 主要功能 1 压力液位检测 2 阈值设定 超限报警 3 压力液位显示 4 补排水自动控制 二 硬件资源 1 51单片机核心模块 2 PCF8591 AD DA模