基于单片机的水位检测系统_51单片机温度传感器程序

基于单片机的水位检测系统_51单片机温度传感器程序开发前的准备:LCD1602一块51单片机开发板一块(这里我用的是普中的板子)霍尔水流量传感器一块(红色接5V黑色接GND黄色是数据传接口)霍尔传感器流量经验公式:Q=(F+3)/8.1Q表示流量…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

开发前的准备:

LCD1602一块

基于单片机的水位检测系统_51单片机温度传感器程序

51单片机开发板 一块(这里我用的是普中的板子)

霍尔水流量传感器一块(红色接5V黑色接GND黄色是数据传接口)

基于单片机的水位检测系统_51单片机温度传感器程序

 霍尔传感器流量经验公式: Q=(F+3)/8.1 Q表示流量

main.c

#include <REGX52.H>//头文件
#include "LCD1602.H"//1602显示的头文件
#include "Buzzer.h"//蜂鸣器的头文件

#define uchar unsigned char   //宏定义
#define uint  unsigned int   //宏定义
#define stand  40   //设置报警值(可调根据自己需求调)

uint flag;//设置标志位

sbit led=P2^0;
sbit K1=P3^1;//定义按键Key1引脚

float Q,F,num;//Q为流量,单位L/min;F为频率,单位HZ

//毫秒级延时函数
void delay(uint z)
{
		 uint x,y;
		 for(x = z; x > 0; x--)
		 for(y = 114; y > 0 ; y--);
}

uint read()//得到计数器0当前脉冲次数函数
{
			uint tl,th1,th2;//读两次高位,两次高位一样说明没有低位进位,读数更加精确。
			uint value;//设置存储值value
			while(1)
			{
					th1=TH0;//定时器置高位赋值给th1
					tl=TL0;//定时器置低位赋值给t1
					th2=TH0;//定时器置高位赋值给th2
					if(th1==th2)//判断如果两个高位相等就结束
				  break;
			}
			 value=th1*256+tl;//把定时器高位转为二进制+上低位
			 return value;//返回val的值
}

void buzzer()//蜂鸣器报警
{
		Buzzer_Time(100);
}
void timer0()//定时器函数
{
     TMOD=0x15;//定时器计数器工作方式配置
		 TH0=0;//高位
		 TL0=0;//低位
		 TH1=(65536-45872)/256;//确定高位
		 TL1=(65536-45872)%256;//确定低位
		 EA=1;//开总中断
		 ET0=1;//中断允许
		 ET1=1;
		 TR0=1;//运行控制位
		 TR1=1;
}

void KeyPro()//按键函数
{

  static uint a;//静态变量a标志位
    if(K1==0)//如果k1按下
		{
		  delay(20);//按时20ms
			if(K1==0)//再一次判断		
			{
			  a++;//标志位+1
				if(a%2==0)//标注位对二求余等于0
				 {
						flag=1;//flag就等于1
			  	}
				else//否则就flag等于0
				{			
				 flag=0;				
				}
				
			}
			
		}
		
}

void main()//主函数
{
			
	
		 LCD_Init();//初始化
		 timer0();//定时器初始化
	   while(1)//死循环
		 {			 
			 KeyPro();//按键函数
			 LCD_ShowNum(1,2,Q,4);//lcd1602显示函数
			 LCD_ShowString(1,6,"ML");//lcd1602显示函数  字符串
			 if(stand <= Q)//判断预设值和报警值
			 {
			    if(flag==1)//标注位等于1的话蜂鸣器就报警
					 {
					  buzzer();//蜂鸣器报警
				   }
			 }
    }	 
}



void T0_time()interrupt 1//中段函数1
{
	 TH0=0;
	 TL0=0;
}

void T1_time()interrupt 2//中断3
	{
		
				 TH1=(65536-45872)/256;//50毫秒
				 TL1=(65536-45872)%256;
				 num++;
		
			 if(num==5)  //1s更新一次数据,送至数码管显示
			  {
					
					num=0;
					F=read();//每隔1s读一次计数器0,该值则为频率。计算出Q后立马把计数器0清零重新计数。

				if(F>0)
					
				{
					 Q=(F+3)/8.1*100;   //流量传感器经验公式根据这个公式计算水流量
					 TH0=0;
					 TL0=0;													 
									
				}
				
				else
					
				{
					 Q=0;//如果不加这句,当F=0,由公式知道Q!=0。
					 TH0=0;
					 TL0=0;
					
		    }
				
	  } 
				
}














版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188767.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月15日 下午5:34
下一篇 2026年4月15日 下午5:40


相关推荐

  • 数据库读写分离的理解

    数据库读写分离的理解读写分离 基本的原理是让主数据库处理事务性增 改 删操作 INSERT UPDATE DELETE 而从数据库处理 SELECT 查询操作 数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库 nbsp nbsp nbsp nbsp nbsp nbsp 为什么要分库 分表 读写分 nbsp nbsp nbsp nbsp nbsp nbsp 单表的数据量限制 当单表数据量到一定条数之后数据库性能会显著下降 数据多了之后 对数据库的读 写就会很多 分库减少单台数据库的压力 接触过几个

    2026年3月17日
    1
  • nginx和apache优缺点

    nginx和apache优缺点nginx与Apache的对比今天准备较详细的对比一下apachehttpd与nginx两个web服务器的异同点、优缺点。由于我并不是做web开发的,所以有什么理解错误还请指出,想要了解它们是因为工作中有时候会用到它,有系统中用到了nginx+apache。本文绝大多数资料都是摘抄网上,自己做的只就是整合网上零散的资源然后加上自己的一点见解。简单的说apachehttpd和nginx都是we…

    2022年5月16日
    42
  • Hashtable 的实现原理

    Hashtable 的实现原理

    2021年5月10日
    222
  • Cursor @ 符号(详细教程)

    Cursor @ 符号(详细教程)

    2026年3月16日
    1
  • AI 漫剧画风搞不定?MJ+NBP=无限风格任选

    AI 漫剧画风搞不定?MJ+NBP=无限风格任选

    2026年3月15日
    2
  • 永失我爱[转贴]

    永失我爱[转贴]永失我爱时间过的飞快 我的孩子走了五年了 我终于敢拿起我的笔写下那一段尘封的往事 很多朋友不让我写 怕我撕开自己的血淋淋的伤疤 怕我痛 但是朋友啊 我知道你们是爱我的 但你们哪里知道 写出来对我来讲才是最好的解脱 才了却了我的一个心愿 因为 我在这五年里 没有一天不想念我的孩子 不管我如何努力让自己忘却 但总会在某一个不经意的时刻 某一个不经意的碰触 让我泪流满面 我永远也不能忘记臭臭给我带来的快

    2026年3月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号