硬件设计
链接:https://pan.baidu.com/s/1Qu3etYZdqIDlV9qB2kuzkw
提取码:b9ia
代码设计
#include <REGX52.H>
#include <stdio.h>
#include "LCD.H"
#include "18B20.H"
#include "delay.h"
sbit csb=P1^4; // 第一路 Trig
sbit csbint=P1^5; // 第一路 Echo
sbit csb1=P1^6; // 第二路 Trig
sbit csbint1=P1^7; // 第二路 Echo
sbit csb2=P3^6; // 第三路 Trig
sbit csbint2=P3^5; // 第三路 Echo
sbit csb3=P3^4; // 第四路 Trig
sbit csbint3=P3^3; // 第四路 Echo
sbit k1=P1^0; // K1
sbit k2=P1^1; // K2
sbit led=P2^7; // 指示灯
sbit fmq=P3^2; //蜂鸣器
unsigned char aa[16]={' ','.',' ',' ','m',' ',' ',' ',' ',' ',' ',' ','.',' ',' ','m'};
unsigned char bb[16]={' ','.',' ',' ','m',' ','.',' ',' ',' ',' ',' ','.',' ',' ','m'};
unsigned char zf;
unsigned int dz,k,s,j,bgz,k,s1,s2,s3,s4;
int temp;
float csbc,wdz;
main()
{
TH0=0;
TL0=0;
TMOD=0X11; //T1,T0为16位定时器
EA=0;
init();
Init_DS18B20();
dz=100; //报警定值
LCD_Write_String(0,0,aa);
aa[9]=0xdf;
while(1)
{
temp=ReadTemperature();
DelayMs(100);
if(temp<0)
{
temp=-(temp-1);
zf=1;
aa[12]='-';
}
else
{
zf=0;
aa[12]=' ';
}
wdz=0.00000607*temp; //温度补偿计算
if(zf==0)
{
csbc=0.03315+wdz;
}
else csbc=0.03315-wdz;
aa[6]=temp/1000+0x30;
aa[7]=temp/100%10+0x30;//显示十位
aa[8]=temp%100/10+0x30;//显示个位
if(zf==0)
{
if(temp<1000)
{
aa[6]=' ';
if(temp<100)
{
aa[7]=' ';
}
}
}
else
{
if(temp<1000)
{
aa[6]='-';
// aa[12]=' ';
if(temp<100)
{
aa[6]=' ';
aa[7]='-';
}
}
}
///
// 第一路 测距模块 //
///
csb=0; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
csb=1;
ET0=1; //启动计数器T0,用以计时
TR0=1;
EA=1;
j=50; //延时
while(j--)
{
}
csbint=1;
j=0;
while(csbint) //判断接收回路是否收到超声波的回波
{
j++;
if(j>=2500) //如果达到一定时间没有收到回波,则将csbint置零,退出接收回波处理程序
csbint=0;
}
TR0=0;
s1=TH0*256+TL0; //读取时间数据
TH0=0;
TL0=0;
csbc=csbc/2;
s1=s1*csbc-4;
///
// 第二路 测距模块 //
///
csb1=0; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
csb1=1;
ET0=1; //启动计数器T0,用以计时
TR0=1;
EA=1;
j=50; //延时
while(j--)
{
}
csbint1=1;
j=0;
while(csbint1) //判断接收回路是否收到超声波的回波
{
j++;
if(j>=2500) //如果达到一定时间没有收到回波,则将csbint置零,退出接收回波处理程序
csbint1=0;
}
TR0=0;
s2=TH0*256+TL0; //读取时间数据
TH0=0;
TL0=0;
s2=s2*csbc-4;
///
// 第三路 测距模块 //
///
csb2=0; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
csb2=1;
ET0=1; //启动计数器T0,用以计时
TR0=1;
EA=1;
j=50; //延时
while(j--)
{
}
csbint2=1;
j=0;
while(csbint2) //判断接收回路是否收到超声波的回波
{
j++;
if(j>=2500) //如果达到一定时间没有收到回波,则将csbint置零,退出接收回波处理程序
csbint2=0;
}
TR0=0;
s3=TH0*256+TL0; //读取时间数据
TH0=0;
TL0=0;
s3=s3*csbc-4;
///
// 第四路 测距模块 //
///
csb3=0; //启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
csb3=1;
ET0=1; //启动计数器T0,用以计时
TR0=1;
EA=1;
j=50; //延时
while(j--)
{
}
csbint3=1;
j=0;
while(csbint3) //判断接收回路是否收到超声波的回波
{
j++;
if(j>=2500) //如果达到一定时间没有收到回波,则将csbint置零,退出接收回波处理程序
csbint2=0;
}
TR0=0;
s4=TH0*256+TL0; //读取时间数据
TH0=0;
TL0=0;
s4=s4*csbc-2;
if(s1<5) //测量值小于下限
{
aa[0]='-';
aa[2]='-';
aa[3]='-';
}
else if(s1>200) //测量值大于上限
{
aa[0]='C';
aa[2]='C';
aa[3]='C';
}
else
{
aa[0]=s1/100+'0';
aa[2]=s1/10%10+'0';
aa[3]=s1%10+'0';
}
if(s2<5) //测量值小于下限
{
bb[0]='-';
bb[2]='-';
bb[3]='-';
}
else if(s2>200) //测量值大于上限
{
bb[0]='C';
bb[2]='C';
bb[3]='C';
}
else
{
bb[0]=s2/100+'0';
bb[2]=s2/10%10+'0';
bb[3]=s2%10+'0';
}
if(s3<5) //测量值小于下限
{
bb[11]='-';
bb[13]='-';
bb[14]='-';
}
else if(s3>200) //测量值大于上限
{
bb[11]='C';
bb[13]='C';
bb[14]='C';
}
else
{
bb[11]=s3/100+'0';
bb[13]=s3/10%10+'0';
bb[14]=s3%10+'0';
}
///
if(s4<5) //测量值小于下限
{
aa[11]='-';
aa[12]='.';
aa[13]='-';
aa[14]='-';
}
else if(s4>200) //测量值大于上限
{
aa[11]='C';
aa[12]='.';
aa[13]='C';
aa[14]='C';
}
else
{
aa[11]=s4/100+'0';
aa[12]='.';
aa[13]=s4/10%10+'0';
aa[14]=s4%10+'0';
}
if(k1==0)
{
// while(k1==0);
dz++;
if(dz>200)
{
dz=200;
}
}
if(k2==0)
{
// while(k2==0);
dz--;
if(dz<30)
{
dz=30;
}
}
bb[6]=dz/100+'0';
bb[7]='.';
bb[8]=dz/10%10+'0';
bb[9]=dz%10+'0';
///
if(s1<s2)
{
s=s1;
}
else s=s2;
if(s<s3)
{
s=s;
}
else s=s3;
if(s<s4)
{
s=s;
}
else s=s4;
if(s<dz)
{
bgz=s*5;
for (k=0;k<bgz;k++)
{
DelayUs2x(150);
fmq=0; //BEEP
led=0;
}
}
fmq=1;
led=1;
LCD_Write_String(0,0,aa);
LCD_Write_String(0,1,bb);
}
}