标题: 小白提问,用HC-SR04超声波测距模块做液位计,如何修改单片机程序? [打印本页]
作者: 加林达谢尔盖 时间: 2019-3-31 19:38
标题: 小白提问,用HC-SR04超声波测距模块做液位计,如何修改单片机程序?
在论坛里找到的了基于51单片机开发板和hc-sr04超声波测距模块的程序,想修改成液位计,即设定成有固定基准高度,减去距离(空尺),得出液位实际高度。请大神指点如何修改单片机代码可以实现液位测量,谢谢!
/***********************************************************************************************************/
//HC-SR04 超声波测距模块 DEMO 程序
//晶振:11。0592
//接线:模块模块 TRIG接 P1.2 ECH0 接P1.1 VCC接单片供电正极5V,GND接单片系统板的GND
//串口波特率9600
/***********************************************************************************************************/
#include <AT89X51.H>
#include <intrins.h>
#include <STDIO.H>
#define uchar unsigned char
#define uint unsigned int
#define RX P1_1
#define TX P1_2
unsigned int time=0;
unsigned int timer=0;
float S=0;
bit flag =0;
/********************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.87)/100; //算出来是CM
if((S>=420)||flag==1) //超出测量
{
flag=0;
printf("S=-----CM\n");
}
else
{
printf("S=%fCM\n",S);
}
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=60,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/********************************************************/
void StartModule() //T1中断用来扫描数码管和计800MS启动模块
{
TX=1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
/********************************************************/
void main(void)
{
TMOD=0x21; //设T0为方式1,GATE=1;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=0;
ET0=1; //允许T0中断
TR1=1; //开启定时器
TI=1;
EA=1; //开启总中断
delayms(100);
printf("超声波串口测量系统\n");
delayms(100);
while(1)
{
StartModule();
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
delayms(50);
}
}
作者: ty417502873 时间: 2019-11-22 16:56
S=(time*1.87)/100;这里不应该是1.7吗?
作者: f556 时间: 2019-11-22 20:45
公式如下:
Dist=WaterHi-Dist
(Dist:测距值,WaterHi:最低水位到探头的距离)
WaterHi为main函数中的局部变量,单位cm,程序中设置值为100,即100cm。水位最高时测距值接近零,做减法换算为显示值后显示最高水位,显示2位数字,如实际总水位高于85Cm,到最高水位时显示85。当到最低水位时显示0。此步中含水泵控制。
-
sa1.png
(12.82 KB, 下载次数: 80)
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |