编程霍尔流量计通常涉及以下步骤:
开发准备
准备YF-B1流量传感器一个。
准备51开发板一个。
基础知识
YF-B1流量传感器有三根线:数据线、VCC、GND。数据线输出为占空比为50%的方波。
流量传感器的磁性转子转动时,转速与流量成线性变化。通过设置特殊功能寄存器可以启用定时或计数功能。
定时器系统是单片机内部独立硬件部分,CPU设置定时功能后,定时器在晶振作用下计时,计数器计满时产生中断通知CPU处理。
计数脉冲可以来自外部输入引脚T0(P3.4)、T1(P3.5)或T2(P1.0)。
电路设计
将霍尔传感器数据线插在P3.4,VCC接在VCC,GND接GND。
软件设计
包含必要的头文件定义。
定义变量和数组用于存储流量、频率和数码管显示数据。
编写延时函数用于控制显示刷新率。
主函数中配置定时器T1为计数模式,工作方式1,并初始化计数器和其他变量。
通过检测外部引脚T1(P3.5)的脉冲信号来计算流量。
```c
include
sbit DLed1 = P2^0; // 定义第一位数码管位选控制线的别名
sbit DLed2 = P2^1; // 定义第二位数码管位选控制线的别名
sbit DLed3 = P2^2; // 定义第三位数码管位选控制线的别名
sbit DLed4 = P2^3; // 定义第四位数码管位选控制线的别名
unsigned int speed = 0; // 最后的流速值
unsigned int count = 0; // 在指定时间内记到的外部脉冲数
unsigned char k = 0;
unsigned char code tab[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void delay1ms(unsigned int k) {
unsigned char n, m;
for (m = 0; m < k; m++) {
for (n = 0; n < 115; n++);
}
}
void disp(unsigned char x1, unsigned char x2, unsigned char x3, unsigned char x4) {
DLed1 = x1;
DLed2 = x2;
DLed3 = x3;
DLed4 = x4;
P1 = tab[x4];
delay1ms(10);
P1 = 0xff;
}
void main() {
EA = 0; // 关闭全局中断
TMOD = 0x51; // 0101 0001, T1纯软件启动, 计数模式, 工作方式1
TH1 = 0x00; // 清除计数值
TL1 = 0x00;
while (1) {
if (P1 & 0x01) { // 检测T1引脚是否有脉冲信号
count++;
}
if (count >= 1250) { // 假设脉冲输出为1250Imp/L
speed = count * 1000 / 1250; // 计算流量(单位:L/min)
count = 0;
disp(0, (speed / 100) % 10, (speed / 10) % 10, speed % 10); // 显示流量
}
delay1ms(10); // 延时10ms
}
}
```
这个程序通过检测P1.0引脚的脉冲信号来计算流量,并在数码管上显示结果。请根据实际的传感器规格和开发板配置调整代码中的参数。