一:功能介绍:
1、系统组成:采用51单片机+DS18B20温度传感器+超声波传感器+蜂鸣器+LCD1602显示屏
2、通过ds18b20采集温度,显示到LCD1602上面;
3、通过超声波传感器采集测距的距离,显示到LCD1602上面;
4、通过按键设置距离报警阈值;
5、当检测当前距离小于设置值,蜂鸣器进行报警提醒;
二:实物演示视频
253-基于51单片机温度补偿超声波测距LCD1602显示
三:程序代码展示(采用C语言编写,使用keil5编译,代码有中文注释,新手容易看懂)

main()
{
TH0=0;
TL0=0;
TMOD=0X11; //T1,T0为16位定时器
EA=0;
bg=0;
n=0;
m=0;
z=0;
init();
Init_DS18B20(); //初始化DS18B20温度传感器
dz=120; //报警定值
bb[6]=0xdf;
bb[7]=0x43;
e=4;
cc[0]=dz/100+'0';
cc[2]=dz/10%10+'0';
cc[3]=dz%10+'0';
LCD_Write_String(0,0,aa);
LCD_Write_String(11,1,cc);
while(1)
{
temp=ReadTemperature(); //测量温度
if(temp<0) //温度正负值判断处理
{
temp=-(temp-1);
zf=1;
bb[0]='-';
}
else
{
zf=0;
bb[0]=' ';
}
csb=1; //启动一次HC-SR04超声波测距模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
csb=0;
ET0=1; //启动计数器T0,用以计时
TR0=1;
EA=1;
j=60; //延时
while(j--)
{
}
csbint=1;
j=0;
while(csbint) //判断接收回路是否收到超声波的回波
{
j++;
if(j>=2500) //如果达到一定时间没有收到回波,则将csbint置零,退出接收回波处理程序
csbint=0;
}
TR0=0;
s=TH0*256+TL0; //读取时间数据
TH0=0;
TL0=0;
wdz=0.00000607*temp; //温度补偿计算
if(zf==0)
{
csbc=0.03315+wdz;
}
else csbc=0.03315-wdz;
csbc=csbc/2;
s=s*csbc;
if(s<10) //测量值小于下限
{
cc[0]='-';
cc[2]='-';
cc[3]='-';
}
else if(s>500) //测量值大于上限
{
cc[0]='C';
cc[2]='C';
cc[3]='C';
}
else
{
cc[0]=s/100+'0';
cc[2]=s/10%10+'0';
cc[3]=s%10+'0';
}
if(s<dz)
{
fmq=0;
bgz=s*5;
for (k=0;k<bgz;k++)
{
DelayUs2x(150);
}
}
fmq=1;
bb[1]=temp/1000+0x30;
bb[2]=temp/100%10+0x30;//显示十位
bb[3]=temp%100/10+0x30;//显示个位
bb[5]=temp%10+0x30; //小数
if(zf==0)
四:原理图和PCB文件展示(采用AD(Altium Designer)打开)


五:实物图展示:

六: 资料清单展示:
1855

被折叠的 条评论
为什么被折叠?



