標題: 小白提問,用HC-SR04超聲波測距模塊做液位計,如何修改單片機程序? [打印本頁]
作者: 加林達謝爾蓋 時間: 2019-3-31 19:38
標題: 小白提問,用HC-SR04超聲波測距模塊做液位計,如何修改單片機程序?
在論壇里找到的了基于51單片機開發(fā)板和hc-sr04超聲波測距模塊的程序,想修改成液位計,即設(shè)定成有固定基準高度,減去距離(空尺),得出液位實際高度。請大神指點如何修改單片機代碼可以實現(xiàn)液位測量,謝謝!
/***********************************************************************************************************/
//HC-SR04 超聲波測距模塊 DEMO 程序
//晶振:11。0592
//接線:模塊模塊 TRIG接 P1.2 ECH0 接P1.1 VCC接單片供電正極5V,GND接單片系統(tǒng)板的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中斷用來計數(shù)器溢出,超過測距范圍
{
flag=1; //中斷溢出標志
}
/********************************************************/
void StartModule() //T1中斷用來掃描數(shù)碼管和計800MS啟動模塊
{
TX=1; //800MS 啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
/********************************************************/
void main(void)
{
TMOD=0x21; //設(shè)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("超聲波串口測量系統(tǒng)\n");
delayms(100);
while(1)
{
StartModule();
while(!RX); //當RX為零時等待
TR0=1; //開啟計數(shù)
while(RX); //當RX為1計數(shù)并等待
TR0=0; //關(guān)閉計數(shù)
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函數(shù)中的局部變量,單位cm,程序中設(shè)置值為100,即100cm。水位最高時測距值接近零,做減法換算為顯示值后顯示最高水位,顯示2位數(shù)字,如實際總水位高于85Cm,到最高水位時顯示85。當?shù)阶畹退粫r顯示0。此步中含水泵控制。
-
sa1.png
(12.82 KB, 下載次數(shù): 80)
下載附件
2019-11-22 20:44 上傳
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |