水流量霍尔传感器工作原理_51单片机温度传感器

水流量霍尔传感器工作原理_51单片机温度传感器硬件准备(1)YF-B1流量传感器一个(2)51开发板一个基础知识(1)YF-B1流量传感器只有三根线。即数据线、VCC、GND。数据线输出为占空比为50%的方波。当水流通过水流转子组件时,磁性转子转动并且转速随着流量的变化而成线性变化。霍尔传感器(霍尔元件采样)输出相应的脉冲信号。其流量脉冲特性计算公式为:脉冲f(Hz)=8.1x流量Q(L/min)-3。(2)51单片机的中断…

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

Jetbrains全系列IDE稳定放心使用

  1. 开发准备
    (1)YF-B1流量传感器一个
    (2)51开发板一个

  2. 基础知识
    (1)YF-B1流量传感器只有三根线。即数据线、VCC、GND。数据线输出为占空比为50%的方波。当水流通过水流转子组件时,磁性转子转动并且转速随着流量的变化而成线性变化。霍尔传感器(霍尔元件采样)输出相应的脉冲信号。其流量脉冲特性计算公式为:脉冲f(Hz)=8.1x流量Q(L/min)-3。
    (2)51单片机的中断工作方式。51单片机有定时器T0和T1,他们既有定时又有计数的功能。通过设置相关的特殊功能寄存器就可以启用定时或计数功能。需要注意的是,定时器系统是单片机内部一个独立的硬件部分,CPU一旦设置定时功能,定时器便在晶振的作用下计时,当计数器计满便会产生中断,通知CPU该如何去处理。而作为计数器时,计数脉冲来自相应的外部输入引脚T0(P3.4),T1(P3.5)或者T2(P1.0,52单片机)。

  3. 电路设计
    (1)将霍尔传感器数据线插在P3.4,VCC接在VCC,GND接GND。
    这里插入图片描述
    (2)这是我的开发板数码管的电路,提供参考。
    在这里插入图片描述

  4. 软件设计

#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char   //宏定义
#define uint  unsigned int   //宏定义
sbit we = P2^7; //位定义数码管位选锁存器接口
sbit du = P2^6;  //位定义数码管位选锁存器接口
float frency,Q,F,num;//Q为流量,单位L/min;F为频率,单位HZ
uchar code leddata[]={ 
 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义
 
                         };
                 //数码管带小数点显示
uchar code leddatapoint[]={ 
 
                0xBF,  //"0"
                0x86,  //"1"
                0xDB,  //"2"
                0xCF,  //"3"
                0xE6,  //"4"
                0xED,  //"5"
                0xFD,  //"6"
                0x87,  //"7"
                0xFF,  //"8"
                0xEF,  //"9"
                0x00,  //熄灭
                0x00  //自定义
 
                         };
//毫秒级延时函数
void delay(uint z)
{
 uint x,y;
 for(x = z; x > 0; x--)
  for(y = 114; y > 0 ; y--);
}
//四位数码管动态显示函数
void display(float i)
{
 uchar shi, ge,fen,shifen;
 float x,y;
 shi = i / 10; //显示十位
 ge  = (int)i % 10;//显示个位
 x=i*10;
 y=i*100;
 fen = (int)x%10;//分位
 shifen = (int)y%10;//十分位
 
 P0 = 0xff;//清除断码
 we = 1; //打开位选
 P0 = 0xef;//1110 1111  
 we = 0; //关闭位选
 
 du = 1;//打开段选
 P0 = leddata[shi]; 
 du = 0; //关闭段选
 delay(5);//延时5毫秒
 
 P0 = 0xff;//清除断码
 we = 1; //打开位选
 P0 = 0xdf;//1101 1111  
 we = 0; //关闭位选
 
 du = 1;//打开段选
 P0 = leddatapoint[ge]; 
 du = 0; //关闭段选
 delay(5);//延时5毫秒
 
 P0 = 0xff; //清除断码
 we = 1;//打开位选
 P0 = 0xbf;//1011 1111 
 we = 0; //关闭位选
 
du = 1; //打开段选
 P0 = leddata[fen];
 du = 0; //关闭段选
 delay(5);//延时5毫秒

P0 = 0xff; //清除断码
 we = 1;//打开位选
 P0 = 0x7f;//0111 1111 
 we = 0; //关闭位选

du = 1; //打开段选
 P0 = leddata[shifen];
 du = 0; //关闭段选
 delay(5);//延时5毫秒 
}
uint read()//得到计数器0当前脉冲次数函数
{
 uint tl,th1,th2;//读两次高位,两次高位一样说明没有低位进位,读数更加精确。
 uint val;
 while(1)
  {
  th1=TH0;
  tl=TL0;
  th2=TH0;
  if(th1==th2)
   break;
 }
 val=th1*256+tl;
 return val;
}
void main()
{
 TMOD=0x15;//定时器计数器工作方式配置
 TH0=0;
 TL0=0;
 TH1=(65536-45872)/256;
 TL1=(65536-45872)%256;
 EA=1;//开总中断
 ET0=1;//中断允许
 ET1=1;
 TR0=1;//运行控制位
 TR1=1;
 while(1)
 { 
  display(Q);
 }
 
}
void T0_time()interrupt 1
{
 TH0=0;
 TL0=0;
}
void T1_time()interrupt 3
{
 TH1=(65536-45872)/256;//50毫秒
 TL1=(65536-45872)%256;
 num++;
 if(num==20)  //1s更新一次数据,送至数码管显示
 {
  num=0;
  F=read();//每隔1s读一次计数器0,该值则为频率。计算出Q后立马把计数器0清零重新计数。
  if(F>0)
  {
   Q=(F+3)/8.1;//流量传感器经验公式
   TH0=0;
   TL0=0;
  }
  else
  {
   Q=0;//如果不加这句,当F=0,由公式知道Q!=0。
   TH0=0;
   TL0=0;
  }
 } 
}
  1. 测试效果
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187862.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • LTE-TDD随机接入过程(3)-RAR(MSG2)以及MSG1的重传

    LTE-TDD随机接入过程(3)-RAR(MSG2)以及MSG1的重传本文涉及到的内容有:(1)UE在什么时候開始接收RAR(2)怎么确定RA-RNTI(3)UE没有收到RAR后的处理(4)RAR的格式1.UE监測RAR文章《LTE-TDD随机接入过程(2)-前导码Pr

  • linux rpm 卸载 java_linux下用rpm 安装卸载jdk「建议收藏」

    linux rpm 卸载 java_linux下用rpm 安装卸载jdk「建议收藏」1、如果linux是centos的话,请先卸载openjdkjava-version,会有下面的信息:卸载默认的用root用户登陆到系统,打开一个终端输入#rpm-qa|grepgcj显示内容其中包含下面两行信息#java-1.4.2-gcj-compat-1.4.2.0-27jpp#java-1.4.2-gcj-compat-devel-l.4.2.0-27jpp卸载#rpm-…

  • Environment类,获取程序所在机器信息

    Environment类,获取程序所在机器信息

  • 100+个Java项目视频教程+源码+笔记,项目经验不用愁了!

    100+个Java项目视频教程+源码+笔记,项目经验不用愁了!有很多朋友问我,说有没有项目可以分享,最近整理了一些项目,现在分享给大家,希望能帮助大家积累一些项目方面的经验。开源项目分享1、微信小程序开发【前端+后端(Java)】附完整源码地址:微信小程序开发【前端+后端(Java)】附完整源码2、springboot+vue.js搭建图书管理系统开源项目地址:springboot+vue.js搭建图书管理系统开源项目3、仿百度网盘的一款轻量级微服务架构网盘系统地址:仿百度网盘的一款轻量级微服务架构网盘系统4、仿京东电商项目终于开源了~项目经验不愁喽!

  • CSS3梅花三弄特效

    效果预览:http://hovertree.com/texiao/js/22/效果图:代码如下:转自:http://hovertree.com/h/bjaf/meihua.htm推荐:http:/

    2021年12月22日
  • MAX31865模块的使用-基于ZigBee_CC2530芯片 PT100测温

    MAX31865模块的使用-基于ZigBee_CC2530芯片 PT100测温前言  网络上关于ZigBee和MAX31865的相关资料较少,对于如何在CC2530上实现对PT100温度数据的读取的资料更是几乎没有。因此本文对MAX31865芯片和模块的使用进行简要介绍,并提供使用源码,同时提供自制模块的相关原理图。文章目录前言一、相关资料二、MAX31865芯片介绍2.1简介:2.2:读写时序2.3:配置寄存器2.4错误标志2.5温度读取三、MAX31865模块介绍3.1引脚介绍3.2线制选择与接线四、代码4.1配置I/O寄存器4.2SPI写寄存器4.3SPI读寄存

发表回复

您的电子邮箱地址不会被公开。

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