一.硬件方案
硬件部分为利用超声波测距模块,将声波信号通过发射头发射出去,当声波信号遇到障碍物后反射回来给接收头,单片机通过计算发射和接收的时间间隔,并结合声波的传播速度,便可计算出障碍物的距离。最后,单片机将距离结果转化为语音模块指令,将距离以音频的形式播放出来。
主要由51单片机+最小系统+LCD1602液晶显示模块+超声波测距模块+语音播放模块+蜂鸣器模块+温度传感器+按键模块;如图:
二.设计功能
(1)LCD1602液晶显示测量的距离和温度;
(2)带有温度补偿功能(DS18B20传感器);
(3)测量范围0.02m~4m,精度为0.01m;
(4)带实时语音播报功能;
(5)按键功能:按键2:加报警值按键3:减报警值按键1:设置按键(只有在按下设置的时候才可以加减报警值),在未按下按键1时,按下按键3播报测量距离。
三.设计原理图
原理图主要采用AD软件进行设计,如图:
四.软件设计
主程序源码
//主函数
void main()
{
UART_init();
Init_ultrasonic_wave();
//屏幕初始化
Init1602();
//温度初始化
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
//循环显示
while(1)
{
Key();
if(yuyin_flag==1)
{
yuyin_flag=0;
ONE4[4]=L_/100;
ONE5[4]=L_/10%10;
ONE6[4]=L_%10;
if(ONE4[4]==0)ONE4[4]=0x0A;
if(ONE5[4]==0)ONE5[4]=0x0A;
if(ONE6[4]==0)ONE6[4]=0x0A;
UART_send_string(ONE1,6);
delayms(1);
UART_send_string(ONE4,6);
delayms(1);
UART_send_string(ONE3,6);
delayms(1);
UART_send_string(ONE5,6);
delayms(1);
UART_send_string(ONE6,6);
delayms(1);
UART_send_string(ONE2,6);
delayms(1);
}
//正常显示
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();
}
}
}
链接:https://pan.baidu.com/s/1GhaJNjxNWKv_AuzevLmkoA?pwd=c6dp
提取码:c6dp