基于51单片机水塔水箱液水位WIFI监控报警设计proteus仿真原理图PCB

news2024/11/26 13:45:03

功能:
0.本项目采用STC89C52作为单片机系统的控制MCU
1.WIFI实时上传当前水位状态
2.通过液位传感器检测液位,检测到最低液位和最高液位时,超过设定阈值将声光报警
3.通过状态指示灯显示当前液位情况,三种颜色,红色代表低于下限,黄色代表高于上限,绿色代表正常
4.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:
在这里插入图片描述

PCB :
在这里插入图片描述

主程序:

#include "reg52.h"
#include <intrins.h>
#include <stdio.h>
#include "delay.h"

sbit LOW_WATER_LEVEL  = P1^1; //水位下限
sbit HIGH_WATER_LEVEL = P1^0; //水位上限

sbit LED_NORMAL = P3^5;
sbit LED_LOW    = P3^3;
sbit LED_HIGH   = P3^4;

sbit BUZZER = P2^2;

unsigned char sendDataFlag = 0;
bit messageCnt = 0;

void Timer0_Init(); //函数声明
void UART_Init();
void UART_SendByte(unsigned char dat);
void UART_SendStr(unsigned char *s, unsigned char length);

void main()
{

	Timer0_Init(); //定时器0初始化
	UART_Init();

	DelayS(5);
	UART_SendStr("AT+CIPMUX=1\r\n", 13); //打开多连接
	DelayS(1);
	UART_SendStr("AT+CIPSERVER=1,8080\r\n", 21); //建立服务 端口号为8080
	DelayS(1);

	while (1) //主循环
	{
		if (sendDataFlag == 1) //发送数据标志
		{
			if (messageCnt == 0) //区分at命令还是数据内容
			{
				messageCnt = 1;
				UART_SendStr("AT+CIPSEND=0,8\r\n", 16); //发送32位数据
			}
			else
			{
				if ((HIGH_WATER_LEVEL == 1) && (LOW_WATER_LEVEL == 1)) //高低都有水
				{
					LED_LOW = 1;
					LED_HIGH = 0;
					LED_NORMAL = 1;
					BUZZER = 0;
					UART_SendStr("*High*  ", 8); //发送内容
				}
				else if ((HIGH_WATER_LEVEL == 0) && (LOW_WATER_LEVEL == 0)) //高低都没有水
				{

					LED_LOW = 0;
					LED_HIGH = 1;
					LED_NORMAL = 1;
					BUZZER = 0;
					UART_SendStr("*Low*  ", 8); //发送内容
				}
				else if ((HIGH_WATER_LEVEL == 0) && (LOW_WATER_LEVEL == 1)) //正常水位
				{
					LED_LOW = 1;
					LED_HIGH = 1;
					LED_NORMAL = 0;
					BUZZER = 1;
					UART_SendStr("*Normal*", 8); //发送内容
				}
				else
				{
					LED_LOW = 0;
					LED_HIGH = 0;
					LED_NORMAL = 0;
					BUZZER = ~BUZZER;
					UART_SendStr("*Error* ", 8); //发送内容
				}
				UART_SendStr("\r\n", 2);
				messageCnt = 0; //发送数据
			}
			sendDataFlag = 0; //清除发送数据标志
		}
	}
}

void Timer0_Init()
{
	TMOD &= 0xF0;
	TMOD |= 0x01;				 //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
	TH0 = (65536 - 18432) / 256; //重新赋值 20ms
	TL0 = (65536 - 18432) % 256;
	EA = 1;	 //总中断打开
	ET0 = 1; //定时器中断打开
	TR0 = 1; //定时器开关打开
}

void UART_Init()
{
	SCON = 0x50;
	TH2 = 0xFF;
	TL2 = 0xFD;
	RCAP2H = 0xFF;  //(65536-(FOSC/32/BAUD))   BAUD = 115200 FOSC = 11059200
	RCAP2L = 0xFD;

	/*****************/
	TCLK = 1;
	RCLK = 1;
	C_T2 = 0;
	EXEN2 = 0;

	/*****************/
	TR2 = 1;
	ES   = 0; //关闭串口中断
	EA   = 1; //打开总中断
}

void UART_SendByte(unsigned char dat) //串口发送单字节数据
{
	unsigned char time_out;
	time_out = 0x00;
	SBUF = dat;						  //将数据放入SBUF中
	while ((!TI) && (time_out < 100)) //检测是否发送出去
	{
		time_out++;
		DelayUs10x(2);
	}		//未发送出去 进行短暂延时
	TI = 0; //清除ti标志
}

void UART_SendStr(unsigned char *s, unsigned char length) //发送定长度字符串
{
	unsigned char num;
	num = 0x00;
	while (num < length) //发送长度对比
	{
		UART_SendByte(*s); //放松单字节数据
		s++;			  //指针++
		num++;			  //下一个++
	}
}

void Timer0_Interrupt() interrupt 1
{
	static unsigned char times20ms = 0;

	TH0 = (65536 - 18432) / 256; //重新赋值 20ms
	TL0 = (65536 - 18432) % 256;
	times20ms++;
	if (times20ms > 50) //定时到1s
	{
		sendDataFlag = 1; //发送数据变量
		times20ms = 0;
	}
}

// void UART_Interrupt(void) interrupt 4 //串行中断服务程序
// {
// 	if (RI) //判断是接收中断产生
// 	{
// 		RI = 0; //标志位清零
// 	}
// }

仿真演示视频:
https://www.bilibili.com/video/BV1Uv4y127q3/

实物演示视频:
https://www.bilibili.com/video/BV1Bd4y1t7un/

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

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

相关文章

快来给你的宠物视频加个表情特效吧

摘要&#xff1a;我们将给猫贴一张卡通脸&#xff0c;给 Elon Musk 贴上小胡子&#xff0c;给小狗贴上驯鹿角&#xff01;本文分享自华为云社区《视频AI&#xff0c;给你的宠物加个表情特效&#xff01;》&#xff0c;作者&#xff1a;HWCloudAI。 GAN 监督学习是一种联合端到…

Android适配【入坑指南+解决痛点】

Android适配是一个大坑&#xff0c;你可能早有耳闻。适配问题到底有多坑&#xff1f;为什么坑&#xff1f;以及如何从坑里爬出来&#xff1f; 概述 Android屏幕尺寸各异&#xff0c;而我们不可能根据各种尺寸都设计一套原型图去匹配&#xff0c;我们需要利用适配这一个过程把…

冷热电气多能互补的微能源网鲁棒优化调度附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

基于Session的认证与授权实践

Spring Security系列文章 认证与授权之Cookie、Session、Token、JWT基于Session的认证与授权实践 基于Session的认证方式 基于 session 的认证方式如下图&#xff1a; 基于 Session 的认证机制由 Servlet 规范定制&#xff0c;Servlet 容器已实现&#xff0c;用户通过 HttpSes…

Matplotlib入门[05]——注释与标签

Matplotlib入门[05]——注释与标签 参考&#xff1a; https://ailearning.apachecn.org/ Matplotlib官网 plt.legend参数 使用Jupyter进行练习 注释 使用文本框进行注释 import numpy.random import matplotlib.pyplot as pltfig plt.figure(1, figsize(5,5)) # plt.clf…

ag-Grid Enterprise v28.2.1 企业版注册版

世界上最好的 JavaScript 网格 ag-Grid Enterprise v28.2.1 功能丰富 ag-Grid Enterprise v28.2.1 的性能、功能集和质量在 JavaScript 数据网格中前所未见。AG Grid 中的许多功能都是 AG Grid 独有的&#xff0c;并且只是将 AG Grid 归为一类&#xff0c;而不会影响质量或性能…

(详解错误情况,及解决方法)Vue 数据更新了但页面没有更新的情况

点个关注&#xff0c;赞一下栓Q 背景 在vue项目中&#xff0c;有些我们会遇到修改完数据&#xff0c;但是视图却没有更新的情况。具体的场景不一样&#xff0c;解决问题的方法也不一样。在网上看了很多文章&#xff0c;在此总结汇总一下。针对&#xff0c;数据更新视图没有更…

你知道哪些常用快捷键?电脑快捷键大全,打工人必备!

所谓的电脑快捷键&#xff0c;就是利用电脑键盘上的一个或几个按键组合完成一个功能命令&#xff0c;从而提高电脑的操作速度&#xff0c;带给我们更便捷的操作方式。电脑常用的快捷键是什么&#xff1f;以下是一些常用电脑快捷键的使用和功能的简要介绍。希望电脑快捷键大全能…

演讲实录 | OpenMLDB 整合自动特征工程

本文整理自 OpenMLDB 社区开发者、伊利诺伊大学 徐鹏程 在 OpenMLDB Meetup No.7 中的分享——《OpenMLDB 整合自动特征工程》。 大家好&#xff0c;我是来自伊利诺伊大学的硕士在读学生&#xff0c;也是 OpenMLDB 开源社区的贡献者——徐鹏程。我参与开发的项目&#xff0c;也…

RabbitMQ——RabbitMQ的六种工作模式详解

RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用来通过普通协议在完全不同的应用之间共享数据&#xff0c;RabbitMQ是使用Erlang(高并发语言)语言来编写的&#xff0c;并且RabbitMQ是基于AMQP协议的 AMQP协议 Advanced Message Queuing Protocol&#xff08;高级消…

JVM之垃圾回收器一

如何判断对象是否存活 引用计数器 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加1&#xff1b;当引用失效时&#xff0c;计数器值就减1&#xff1b;任何时刻计数器都为0的对象就是不可能再被使用的。 Java语言中没有选用引用计数算法…

对比分析小游戏引擎孰优孰劣

随着微信生态中&#xff0c;小程序应用指数级的增长&#xff0c;许多休闲游戏变成为了众多游戏厂商流量变现的新手段。以近期很火的“羊了个羊”为例&#xff0c;它便是我们常常所说的小游戏。 游戏和小游戏的区别 要盘点小游戏开发引擎之前&#xff0c;我们得先来了解下游戏…

leetcode 638. 大礼包-思路整理

题目 在 LeetCode 商店中&#xff0c; 有n件在售的物品。每件物品都有对应的价格。然而&#xff0c;也有一些大礼包&#xff0c;每个大礼包以优惠的价格捆绑销售一组物品。 给你一个整数数组price表示物品价格&#xff0c;其中price[i]是第i件物品的价格。另有一个整数数组nee…

扩散模型(Diffusion)最新综述+GitHub论文汇总-A Survey On Generative Diffusion

扩散模型(Diffusion Model)最新综述GitHub论文汇总-A Survey On Generative Diffusion 本综述来自香港中文大学Pheng-Ann Heng、西湖大学李子青实验室和浙江大学陈广勇团队&#xff0c;对现有的扩散生成模型进行了全面的回顾。本文首先提出了diffusion model改进算法的细化分类…

Thread类及常见方法

文章目录一、Thread常见构造方法二、Thread常见属性三、Thread常见方法start()获取当前线程休眠当前线程中断线程join()一、Thread常见构造方法 Thread类是JVM用来管理线程的一个类&#xff0c;每个线程都有唯一一个Thread对象与之对应&#xff0c;JVM会将这些对象组织起来&am…

世界杯征文活动 | 神奇!一段JavaScript代码生成会动的足球

世界杯征文活动 | 神奇&#xff01;一段JavaScript代码生成会动的足球 文章目录前言一、效果展示二、代码解析1.把足球图片转换为base64格式2.根据base64格式的字符串&#xff0c;创建img标签图片对象3.创建存放图片img的div标签对象4.使div旋转起来总结前言 花有重开日&#…

python中的import详解

0. 什么是导入&#xff1f; 导入从本质上讲&#xff0c;就是载入另一个文件&#xff0c;并能够读取那个文件的内容 0.1 模块和属性 模块往往就是变量名的封装&#xff0c;被认作是命名空间属性就是绑定在特定对象上的变量名 0.2 from和import 通过import得到了具有属性的模…

697226-52-1, 细胞穿膜肽TAT-amide

TAT-amide 是一种细胞穿透肽。细胞穿透肽 (CPPs) 是能够进入不同细胞的短氨基酸序列&#xff0c;用于细胞的物质细胞递送。TAT-amide is a cell penetrating peptide. Cell-penetrating peptides (CPPs) are short amino acid sequences able to enter different cells[1][2]. …

软件测试工程师应该学Python还是学Java?

前言 对于一个软件测试工程师来说&#xff0c;选哪一门语言来入手编程一直是件非常纠结的事情&#xff0c;当然立志做一辈子功能测试的人除外。 当你学完软件测试基本理论&#xff0c;掌握业务测试流程&#xff0c;功能测试可以搞定&#xff0c;数据库和linux玩的也很溜时&am…

Day822.Happens-Before 规则 -Java 并发编程实战

Happens-Before 规则 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Happens-Before 规则的内容。 可见性、原子性、有序性这三者在编程领域属于共性问题&#xff0c;所有的编程语言都会遇到&#xff0c;Java 在诞生之初就支持多线程&#xff0c;自然也有针对这三者…