博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
--------------------------------------------------------------------------------------------------------------------------

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;}}
}

5、测试效果

写在最后:上传照片的时候大小超过5M,记录一下调整方法,以免又忘了。
直接使用Windows自带照片编辑工具->点击更多->调整大小。

因为这是之前做比赛的时候剩下的传感器,前两天突然冒出来了,看了看数据手册,发现挺简单的就敲了出来。电路板就没设计了,因为YF-B1的输出太简单了。源码应该没有问题,测试过精度还挺不错的。代码能力还值得提升,有很多冗余的部分,之后有时间优化一下。

————————————————
版权声明:本文为CSDN博主「#沧海一声笑」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wj2020scu/article/details/90550452

基于51单片机的霍尔水流量计设计(程序)相关推荐

  1. 基于51单片机的智能水表水流量计流量报警器温度设计方案原理图

    本系统由STC89C52单片机电路+水流量传感器+DS18B20温度电路+继电器电路+LCD1602液晶显示电路+按键电路+蜂鸣器电路+电源电路组成. 系统总体结构 (文末附文件) 3.2模块电路的设 ...

  2. 基于51单片机的智能水表水流量计流量报警器proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶显示水流量/累计流量/累计流量阈值 2.按'清零'键清除累计流量,按'加''减'设置累计流量报警阈值,按'启停'启动停止水泵 3 ...

  3. 基于51单片机直流电机PWM调速设计

    具体实现功能 系统由STC89C52单片机.LCD1602液晶显示屏.霍尔测速传感器.3V直流电机.按键模块构成. 具体功能: 1.采用霍尔传感器非接触式测电机转速: 2.LCD1602液晶显示当前的 ...

  4. 单片机检测电机频率c语言,基于51单片机的电动机测速表的设计.doc

    基于51单片机的电动机测速表的设计 基于51单片机的电动机测速表设计 摘 要 本文介绍了采用光电传感器实施电机转速测量的方法.基本原理,完成了一种基于AT89C51单片机平台的电动机测速表的软硬件设计 ...

  5. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  6. 基于51单片机的电子万年历的设计-源代码

    电子万年历的设计目录 电子万年历的设计 电子万年历的系统整体设计框图 所需要的元件 DS18B20模块 DS18B20的特点 DS18B20内部结构 DS18B20管脚排列 DS1302模块 SPI时 ...

  7. 基于51单片机的三角波信号发生器设计

    基于51单片机的三角波信号发生器设计 一.任务要求: 设计内容 选择51单片机,晶振采用12MHz. 设计一个能产生50HZ至100HZ的三角波信号.通过0832/A芯片完成数模转换. 频率值由LED ...

  8. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  9. 基于51单片机的酒精浓度检测仪设计

    本设计仅供参考 基于51单片机的酒精浓度检测仪设计(proteus仿真+程序+原理图+报告) 原理图:Altium Designer 仿真:proteus 8.9 程序编译器:keil 4/keil ...

最新文章

  1. android studio dump java heap_Android Studio 3.0 Memory Profiler使用
  2. puppet cert maintain
  3. learnpython有中文版吗_简介 | Learn Python the Hard Way 中文版
  4. 关于浏览器对静态HTML页面的缓存问题
  5. 疯子的算法总结(六) 复杂排序算法 ① 归并排序 merge_sort()
  6. DFS应用——找出无向图的割点
  7. Pytorch:RuntimeError: DataLoader worker (pid 27) is killed by signal: Killed. Details are lost due
  8. 64位linux安装mysql数据库吗_linux下怎么安装mysql数据库
  9. oracle 方案概念
  10. C#自动属性及属性的简写形式
  11. linux node安装菜鸟教程,Docker 安装 Node.js
  12. unreal 安卓打包出现 LogHttp: Warning: 000001D09B0C8F00: request failed, libcurl error 哇塞 真的是爆炸 不知道为啥巨慢
  13. 删除EFI系统分区(ESP)后Windows无法启动,重建引导分区并修复启动的过程
  14. 优达笔记-安然数据分析 异常值处理
  15. 上海驾照科目二练习笔记
  16. k8s的namespace资源一直terminating问题解决
  17. requests中get请求没有referer得不到数据
  18. 腾讯点播云,上传视频实例, 使用点播云播放器实例
  19. 你们寻找的微信小程序考题,这总结了
  20. Unity 关于Spine不规则响应区域解决方法

热门文章

  1. syntax error怎么解决
  2. java excel导入并多线程批量插入数据库
  3. Leetcode 820:单词的压缩编码
  4. fiddler:抓取手机接口
  5. fragment 淡入淡出_Fragment之Fragmentation库(添加转场动画)
  6. outlook连接yeahI邮箱注意事项
  7. 微软ChatGPT技术的底层支撑——GPU
  8. C++动态库封装及调用
  9. SpringBoot分页Pageable最大size的自定义配置
  10. 力扣刷题-阶乘尾数有多少个0