基于单片机的水位检测系统_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux smartctl 命令,Linux smartctl命令

    linux smartctl 命令,Linux smartctl命令硬盘的SMART是S.M.A.R.T.的缩写,全称是“Self-Monitoring,AnalysisandReportingTechnology”,中文意思是“自我监测分析与报告技术”,它可以对硬盘的温度、内部电路、盘片表面介质材料等进行监测,力求及时分析出硬盘可能发出的问题,并发出警告,从而保护数据不受损失。在Linux上使用smartctl命令查看硬盘的SMART信息。安装工具:yu…

    2022年6月29日
    31
  • Java中CAS详解

    Java中CAS详解在JDK5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。独占锁是一种悲观锁,synchronized就是一种独占锁,会导

    2022年7月7日
    35
  • 怎么生成pkl文件_python unzip

    怎么生成pkl文件_python unzip我在训练UCF101数据集的时候,遇到一个大高玩使用pkl文件,一开始使用它们的数据炮的好好的。后来开始跑自己的数据时,就出问题了。不知道这个pkl到底是个什么东西。原始的那个大高玩的ucf101的标签数据读取出来是这个样的:[‘PommelHorse’,’Surfing’,’HammerThrow’,’PlayingViolin’,’WallPushups’,’PullUps’,’PizzaTossing’,’SalsaSpin’,’Shotput’,’CricketShot’,

    2025年9月3日
    6
  • html使用vue axios,使用 Vue和axios

    html使用vue axios,使用 Vue和axios昨天写完了博客以后,有人就在我的博客下面留言说现在不是使用了Axios了吗?我赶紧再把Axios的例程给补上,并且做一个更新。其实vue-resource并不复杂,就是不稳定。Vue官方放弃它也是对的,作者是这样子说的最近团队讨论了一下,Ajax本身跟Vue并没有什么需要特别整合的地方,使用fetchpolyfill或是axios、superagent等等都可以起到同等…

    2025年6月29日
    3
  • oracle一次提交大量数据_oracle修改数据

    oracle一次提交大量数据_oracle修改数据StringBuilderstrSql=newStringBuilder();strSql.Append(“insertintoLB000(“);strSql.Append(“LBID,CARRIER,COMPANY_NAME,DOM_ASTD_WGT,FRN_ASTD_WGT,DOM_CSTD_WT,FRN_CSTD_WT,DOM_ISTD_WT,FRN_ISTD_WT,DOM_CREW…

    2025年9月24日
    8
  • python类的初始化方法_python初始化列表

    python类的初始化方法_python初始化列表【背景】在scikit-learn基础上系统结合数学和编程的角度学习了机器学习后(我的github:https://github.com/wwcom614/machine-learning),意犹未尽,打算再借势学习下深度学习TensorFlow。无奈安装之后遇到了这个问题,耽误了几个小时才得以解决。我发现这是个很多人开始TensorFlow之旅普遍遇到的问题,而且是很多人尝试了网上很多方法都未解…

    2022年8月30日
    3

发表回复

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

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