单片机控制雷达测距模块HC-SR04测量距离(通过测试)

雷达测距模块在小车防撞中应用比较不错,在这篇文章中简单介绍下雷达测距模块HC-SR04的使用。

一、硬件介绍

                                    单片机控制雷达测距模块HC-SR04测量距离(通过测试)_第1张图片

引脚四个,分别为VCC、TRIG、ECHO、GND

单片机控制引脚TRIG:用于给出促发测距信号端,至少拉高电平10us

                        ECHO:用于输出发送雷达到接收到雷达所需时间的信号端,其输出高电平持续时间即为雷达来去时间。

二、工作原理

                     单片机控制雷达测距模块HC-SR04测量距离(通过测试)_第2张图片

三、时序图

单片机控制雷达测距模块HC-SR04测量距离(通过测试)_第3张图片

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************

四、软件程序

#include
#include
sbit TRIG=P0^0;
sbit ECHO=P0^1;
sbit biaozhi=P0^2;
unsigned char flag;
// 此表为 LED 的字模(共阴极)      0 1     2     3     4     5     6     7    8     9 灭   a     b     c    d     e      f
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x00,0x39,0x5E,0x79,0x71};
void display(unsigned char number,unsigned char shuzi) //显示子程序
{unsigned char temp,i;
temp=number<<2;
P2=temp&0x1c; 
P1=(LED7Code[shuzi])&0x7f;
for(i=0;i<=50;i++);
}
void timer1() interrupt 3 //定时器1中断服务子程序
{
flag=1;
TR1=0;
}
void timer0() interrupt 1  //定时器0中断服务程序
{
}
unsigned int juli()   //距离测量
{//float count=0;
unsigned long count=0;
unsigned int zhengshu;
unsigned char i;
TH0=0; //定时器初值设定为0
TL0=0;
flag=0;  //未收到回声信号标志
ECHO=1;  //开通读ECHO
TRIG=1;  //开启测距促发信号拉高
for(i=0;i<5;i++); //延时15us
TRIG=0; // 促发信号拉低
TR1=1; //开启定时器1
while(ECHO==0) //未收到高电平等待

if(flag) //测距超出范围返回0
{return 0;
biaozhi=0;  //测试用标志位
}
}
TR0=1; //定时器0开启
while(ECHO==1); //等待持续高电平
TR0=0; //关闭定时器0中断
count=TH0*256+TL0; //计算出所花时钟数。。。。。。。。。。。。。。(1)
for(i=0;i<=30;i++); //防止发射信号对回传信号的影响,进行延时
zhengshu=count*17/1000; // 转化为距离,单位CM
return zhengshu;
}

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************

void main() //主程序
{unsigned char i;
unsigned int canshu;
unsigned char shijian[8]={2,0,1,10,10,10,10,10};
TMOD=0x11; //定时器0、定时器1 工作模式设为1,采用的是16位计数器
TH1=0; //设置定时器1初值
TL1=0;
EA=1; //开启总中断
ET1=1; //定时器1开启中断
ET0=1; //定时器0开启中断
do{
canshu=juli();
shijian[0]=canshu/100;  //取百位
shijian[1]=canshu%100/10;   //取十位
shijian[2]=canshu%100%10; //取个位
for(i=0;i<=2;i++) //显示前3位数字
{display(i,shijian[i]);
}
}while(1);
}

五、注意事项

在位置(1)处,采用中断开启时计数器0开始每机器周期加1来计算时间,通过while()语句来判断定时器计数停止时刻。

六、测试效果

单片机控制雷达测距模块HC-SR04测量距离(通过测试)_第4张图片

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************

你可能感兴趣的:(单片机测试)