1 开发环境
仿真图:proteus8.9以上
程序代码:KEIL4/KEIL5
原理图/PCB:AD
(仿真+代码+原理图PCB+详细讲解)
2 功能说明介绍
基于51单片机的超声波测距(倒车雷达)及温度补偿
具体功能
1、51单片机驱动超声波模块获取超声波测试距离,带有超声波精度温度补偿。
2、LCD1602液晶显示测量的距离和温度;
3、可以通过按键设置距离报警上下限值;
按键功能有:距离加键,距离减键,距离设置键。
4、超过设定的报警上下限值则开始声光报警。
开始仿真
LCD1602第一行显示温度,第二行显示距离209CM,超出了默认的最大报警值200CM,报警模块开始工作,亮红灯,蜂鸣器响。
通过按键调整LCD1602的距离为195CM,低于默认的最大报警值200CM,报警模块停止工作,红灯灭,蜂鸣器不响。
可以通过按键设置最大最小报警值。
3 程序
3.1 工程文件
3.2 代码
main函数
//宏定义
#define uchar unsigned char
#define uint unsigned int
#define ULint unsigned long int //温度零上与零下的标志位
char flag=0; //超声波
char flags=0; //超声波距离
char flag1s=0; //计算定时间
uint time=0; //计算距离
ULint L_=0; //温度
uint t_=0; //显示模式 0正常 1最大值调整 2最小值调整
uchar mode=0;
uint Max=200;
uint Min=30; //按键标志
uchar k=0; //数值有误
uchar FW=0; //头函数
#include <reg51.h>
#include <intrins.h>
#include "BJ_Key.h" //报警按键
#include "display.h" //显示头函数
#include "ultrasonic_wave.h"//超声波头函数
#include "DS18B20.h" //温度传感器头函数
//函数声明
void delayms(uint ms);
//主函数
void main()
{
Init_ultrasonic_wave();
//屏幕初始化
Init1602();
//温度初始化
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
//循环显示
while(1)
{
Key();
//正常显示
if(mode==0)
{
StartModule();//启动超声波
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
delayms(20); //20MS
tmpchange(); //温度转换
t_=tmp(); //度温度
Conut(t_/10); //计算距离
if(L_>Max||L_<Min)
{
Feng_Start();
}
else
{
if(FW!=1)
Feng_Stop();
}
Display_1602(t_/10,L_);
}
//调整显示
else if(mode!=0)
{
//最大最小值
Init_MaxMin();
while(mode!=0)
{
Key();
if(k==1&&mode==1)
{
Init_MaxMin();
write_com(0x8d);//设置位置
}
else if(k==1&&mode==2)
{
Init_MaxMin();
write_com(0x8d+0x40);//设置位置
}
k=0;
}
//界面初始化
Init1602();
}
}
}
void delayms(uint ms)
{
uchar i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
//T0中断用来计数器溢出,超过测距范围
void CJ_T0() interrupt 1
{
flags=1; //中断溢出标志
}
按键调整部分函数
//管脚声明
sbit Feng=P1^0;
sbit K1=P1^1;
sbit K2=P1^2;
sbit K3=P1^3;
//蜂鸣打开
void Feng_Start()
{
Feng=0;
}
//蜂鸣关闭
void Feng_Stop()
{
Feng=1;
}
//等待
void delay_key()
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<200;j++);
}
//按键检测
void Key()
{
//功能键按下
if(K1==0)
{
Feng_Start();//蜂鸣器开
delay_key(); //消抖
while(K1==0);//等待松手
Feng_Stop(); //蜂鸣器关闭
mode++; //模式++
if(mode==3) //达到最大限度归为
mode=0;
k=1; //按键标志位
}
//+键
else if(K2==0)
{
Feng_Start();//蜂鸣器开
delay_key(); //消抖
while(K2==0);//等待松手
Feng_Stop(); //蜂鸣器关闭
//最大值调整
if(mode==1) //在最大值调整下
{
Max++; //调整最大值
if(Max==201)//到达201归为200
{
Max=200;
}
}
//最小值
else if(mode==2)//最小模式下调整
{
Min++; //调整最小值
if(Min>Max) //最小值不能大于最大值
{
Min=Max;
}
}
k=1;
}
//-键
else if(K3==0)
{
Feng_Start();
delay_key();
while(K3==0);
Feng_Stop();
//最大值调整
if(mode==1)
{
Max--;
if(Max<Min)
{
Max=Min;
}
}
//最小值
else if(mode==2)
{
Min--;
if(Min==0xff)
{
Min=0;
}
}
k=1;
}
}
4 原理图
原理图由AD绘制
5 元器件清单
1)79万用板
2)1602液晶
3)HC-SR04超声波模块
4)DS18b20
5)Stc89c51单片机
6)40脚IC座
7)16p单排母座
8)4p单排母座
9)16p排针
10)103排阻
11)104独石
12)1.5k电阻
13)2.2k电阻
14)10k电阻3
15)12M晶振
16)30pf电容2
17)10uf电容
18)100uf电容
19)按键4
20)9012三极管
21)蜂鸣器
22)自锁开关
23)DC电源接口
24)导线若干
25)焊锡若干
26)USB电源线或电池盒+DC电源插头
6 PCB
7全部资料百度云链接
最重要的程序讲解,仿真讲解和仿真视频
程序PCB原理图proteus仿真等重要的资料
--------------------本设计A0001下载链接--------------------