一、实验目的
1. 了解超声波测距传感器工作原理及引脚功能。
2. 学会使用超声波测距传感器测量距离。
3. 会使用1602液晶显示器显示测量距离。
4. 学会控制LED灯亮灭。
5. 学会使用蜂鸣器发出报警声
二、实验设备
1. 51单片机实验板,以及电源线、下载线、杜邦线
2. 超声波测距传感器、蜂鸣器、LED灯、1602液晶显示模块
三、实验项目要求
为避免汽车倒车时与后方障碍物发生碰撞,请设计一款基于超声波测距传感器的汽车倒车报警器,要求如下:
①在显示屏上随时显示汽车与车后物体间的距离。
②一旦进入危险距离(<=1m)范围内,蜂鸣器将发出“嘀。。。嘀。。。”声音,LED灯开始闪烁,提示驾驶员;当距离越来越近是,提示声音越急促,LED灯闪烁越快(亮灭间隔越短)。
1602液晶显示示例:
请按要求设计一个可行方案,包括设备选型、系统连接图等,并编写程序实现上述功能。
四、实验步骤
1. 设计方案
①方案:
引脚设置:
超声波测距传感器:回声接收端引脚设置为P2^0,超声波触发端口引脚设置为P2^1;
蜂鸣器:引脚设置为 P2^5;
LED灯:引脚设置为P2^3;
通过1602液晶显示距离变化值。
通过超声波测距传感器测量距离,并且距离值会显示到1602液晶显示屏上。
通过蜂鸣器实现报警声,当距离小于10cm时,蜂鸣器将发出“嘀。。。嘀。。。”声音,并且LED灯开始闪烁;距离越来越近是,提示声音越急促并且LED灯闪烁越快,亮灭间隔越短。
②系统连接图:
2. 编写源程序,编译,生成hex文件
源程序:
#include "public.h"
#include "lcd1602.h"
sbit beep=P2^5;
sbit led=P2^3;
sbit ECHO = P2^0; //回声接收端口
sbit TRIG = P2^1; //超声触发端口
u8 n,figh=0;
void Alarm(u8 t) //蜂鸣器报警,持续t秒,软件延时
{
u8 k;
u16 i;
for(k=0;k<t;k++)
{
for(i=0;i<200;i++)//叮
{
beep=0;delay_us(50);
beep=1;delay_us(50);
}
}
}
void Timer0Init(void) //1??@12.000MHz
{
TMOD &= 0xF0; //???????
TMOD |= 0x01; //???????
TL0 = 0x00; //??????
TH0 = 0x00; //??????
TF0 = 0; //??TF0??
TR0 = 0; //???0????
ET0=1;
EA=1;
}
u8 US_Distance()
{
u8 l8b,h8b;
u16 distance;
TRIG =0;
ECHO = 0;
TRIG = 1;
delay_us(10); //延时10微秒;
TRIG = 0;
while(ECHO == 0); //等待回声
TR0 = 1;
while(ECHO);
TR0 = 0;
l8b = TL0;
h8b = TH0;
distance = (h8b << 8) + l8b;//将计数值转换为16位
TL0=0;
TH0=0;
return (u8)(0.017*distance);
}
void Timer1Init(void) //1毫秒@11.0592MHz
{
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0x66; //设置定时初值
TH1 = 0xFC; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1=1;
EA=1;
}
void main()
{
u8 distan,str[20];
Timer0Init();
Timer1Init();
lcd1602_init();
lcd1602_clear();
led=1;
while(1)
{
distan=US_Distance();//距离,单位cm
n=distan;
sprintf(str,"Distence:%03bu",distan);
lcd1602_show_string(0,0,str);
if(distan<=10)
{
figh=1;
Alarm(1);
delay_ms(distan*100);
}
else {figh=0;delay_ms(500);}
}
}
void Timer1_Init(void) interrupt 3
{
static u16 count=0;
static u8 x=0;
if(figh)
{
count++;
led=x;
if(count==n*100)
{
count=0;
x=(x+1)%2;
//led=~led;
}
}
else
{
led=1;
count=0;
}
TL1 = 0x66; //设置定时初值
TH1 = 0xFC; //设置定时初值
}
3. 将hex文件下载到实验板运行,描述实验现象
实验现象:
显示屏上显示汽车与车后物体间的距离。一旦进入危险距离(<=10cm)范围内,蜂鸣器将发出“嘀。。。嘀。。。”声音,LED灯开始闪烁;当距离越来越近是,提示声音越急促,LED灯闪烁越快(亮灭间隔越短)。