【Proteus仿真】【51单片机】水箱液位检测控制装置设计_双容水箱液位控制系统设计proteus_Hai小易的博客-程序员宅基地

技术标签: 51单片机  c语言  proteus  嵌入式硬件  【Proteus仿真】【51单片机】趣味项目设计  


一、主要功能

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设计,视频分享,技术交流。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Hello_Muyi/article/details/124310546

智能推荐

【数字图像处理】OpenCV3 扩展模块学习笔记_opencv扩展模块学习_与光同程的博客-程序员宅基地

1. 特征检测方法1.1. 特征定义1.2. 角点检测原理1.2.1. Harris角点检测原理1.2.2. Tomasi角点检测原理1.2.3. SURF特征检测1.2.4. SIFT特征点检测1.2.5. HOG 特征检测1.2.6. LBP 特征提取1.2.6.1. 原始LBP1.2.6.2. 圆形LBP算子1.3. HAAR特征提取1.3.1. 1.什么是haar特征?1.3.2. 2.如何利用特征 区分目标?1.3.3. 3.如何得到这个判决?1..._opencv扩展模块学习

CentOS7设置虚拟机为静态ip地址_centos虚拟机如何修改enp0s8网卡ip_不留一针一线的博客-程序员宅基地

1. 查看网卡UUIDnmcli con show2. 查看网卡MAC地址ip addr3. 修改网卡信息我的虚拟机之前只有一个网卡ifcfg-enp0s3, 现在将原有的网卡拷贝一份, 并进行修改[root@localhost donl]# cd /etc/sysconfig/network-scripts/[root@localhost network-scripts]#..._centos虚拟机如何修改enp0s8网卡ip

vue @click组件绑定事件 无效_kxukai的博客-程序员宅基地

1,给vue组件绑定事件时候,必须加上native ,否则会认为监听的是来自Item组件自定义的事件2,等同于在子组件中: 子组件内部处理click事件然后向外发送click事件:$emit(“click”.fn)1<Item @click.native = “shijian()”>...

360浏览器_tao_wei162的博客-程序员宅基地

360安全浏览器是基于IE内核的浏览器。360极速浏览器,采用双核设计,IE内核和Chromium内核。_360浏览器java

7.CSS-交集选择器、并集选择器、兄弟选择器_山楂不甜的博客-程序员宅基地

文章目录*交集选择器作用格式注意点并集选择器作用格式注意点相邻兄弟选择器作用格式注意点通用兄弟选择器作用格式注意点*交集选择器作用给所有选择器选中的标签中,相交的那部分设置属性。格式选择器1 选择器2{ 属性:值;}注意点1.选择器和选择器之间没有任何连接符号;2.选择器可以使用标签名称/id名称/class名称;3.仅了解。并集选择器作用给所有选择器选中的标签设置属性。格式选择器1,选择器2{属性:值;}注意点1.并集选择器必须使用,来连接;2.选择器可以使用

随便推点

Error from server: error dialing backend: dial tcp: lookup_error: error contacting notary server: dial tcp: l_被IT耽误的歌手的博客-程序员宅基地

root@master-node:/tmp/k8s-1.6/production/memcached# kubectl get pod --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGEdefault pro-w-mem-1448348793-..._error: error contacting notary server: dial tcp: lookup notary.docker.io on

c语言运算符优先级表(c语言中各种运算符的优先级)_叶涛网站推广优化的博客-程序员宅基地

运算符的优先级是怎样的?c语言中各种运算符的优先级运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符()和逗号运算符c语言上运算符优先级是怎样的啊简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。c语..._c语言运算符优先级

为什么?初学者要力挺它作为入门编程语言,你赞成吗~-程序员宅基地

相信了解过Python语言的同学都听过这样一句话“人生苦短,我用Python”,那么大家为什么这么说呢,下面带大家好好说说,为什么“人生苦短,我用Python”。海风教育在线辅导0元一对一试听课等你来领取,领取课程方法:1、私信留下您的手机号和姓名,需要补习的科目。2、也可以在海风教育官网留下您的手机号领取 https://www.hfjy.com一个语言的崛起不可分割的就是使用的开发者...

敏捷开发---迭代SDV测试_强尼见红叶的博客-程序员宅基地

迭代SDV是针对当前迭代内所有Story的完整测试(也会有针对前次迭代问题修改的回归),包括功能的、非功能的。SDV测试的主体是测试人员,项目也可能根据实际情况调整人员一起完成本迭代的SDV测试。SDV测试在Story测试(ST)的基础上,增加针对Story之间的依赖相关的用例和测试代码,当然测试的前提条件也是所有Story的AT和ST要能全部测试通过。对实现了..._sdv阶段需要关注系统基本功能测试

A股迎来5年来最大牛市,软件股开启新一轮造富神话-程序员宅基地

“告诉我,你买用友了吗”上证指数重返3000点,两市成交额突破万亿,创业板指涨超2%再创3年新高,尾盘金融股发力上攻,恒指收盘涨0.99%,港股三大股指至此全部步入技术性牛市;在美联储释..._大牛市,拉软件股

推荐文章

热门文章

相关标签