肿瘤康复网,内容丰富有趣,生活中的好帮手!
肿瘤康复网 > HC-SRF04超声波测距传感器+Proteus仿真(附源码与仿真电路)

HC-SRF04超声波测距传感器+Proteus仿真(附源码与仿真电路)

时间:2019-11-08 19:02:49

相关推荐

一、模块介绍

1.1 模块图示

模块共有四个引脚,分别是Vcc(供5V电源)、Trig(控制端,下文简称Tr)、Echo(接收端,下文简称Ec)、Gnd(地线)

2.2 产品参数

二、 工作原理(时序)

在初始状态时,Tr引脚电平由单片机拉高,Ec引脚电平由传感器拉低。工作时,首先由单片机将Tr引脚拉低后再给一个高电平脉冲(持续时间至少为10us),传感器收到该脉冲信号后开始向外发射8个40KHz的方波即用来测距的超声波。该测距超声波以声速(340m/s)向前传播,在遇到障碍物时,该超声波被反弹向回传播,因此最终能够被传感器接收到,传感器会记录从发射超声波到接收到超声波的所经历的时间t。传感器在收到返回的信号后,由Ec引脚输出一个与t相同时间的高电平脉冲。此时,我们只需要通过单片机内部定时/计数器记录Ec引脚高电平脉冲时间即可得超声波的传播时间t。因此可算出传感器到障碍物间的距离=340*(t/2) (因为t是超声波一来一回经历的时间,所以单程时间要除以2)。

三、例程(例程均为自己编写且仿真通过)

单片机为AT89C52,工作频率为12Mhz,最终结果通过八段数码管显示。

#include<reg52.h>#include<intrins.h>typedef unsigned char uchar;typedef unsigned int uint;sbit Tr=P1^0;//触发信号sbit Ec=P1^1;//回响信号void Delay10us(void);//10us延时函数void Delay1ms(void);//1ms延时函数uint Read_value(void);//读值函数void InitTimer0(void);//定时器0初始化void show(uint Out);//显示函数void main(){uint distance;Tr=0;//出发引脚首先拉低InitTimer0();//初始化定时器0distance=Read_value();//读值show(distance);//显示距离}/********************读值函数***********************/uint Read_value(){float temp;uint result;Tr=1;//触发引脚发出11us的触发信号(至少10us)Delay10us();_nop_();Tr=0;while(!Ec);//度过回响信号的低电平TR0=1;//开启定时器0while(Ec);//度过回响信号高电平TR0=0;//关闭定时器0temp=TH0*256+TL0;//最终us时间temp/=1000.0;//最终ms时间temp*=17.0;//距离(cm) (17=光速34cm/ms 除2)result=temp;//四舍五入if(temp-result>=0.5){result+=1;}return result;}/***********************10us延时函数*****************************/void Delay10us(){uchar i;i=2;while(--i);}/***********************1ms延时函数*****************************/void Delay1ms() //误差 0us{unsigned char a,b,c;for(c=1;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}/************************定时器0初始化*****************************/void InitTimer0(void){TMOD = 0x01;TH0 = 0x00;TL0 = 0x00;TR0 = 0;//先关闭定时器0}/**********************显示函数*************************************/void Show(uint Out){char duan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码while(1){P2=0x01;//第四位(个位)Delay10us();P3=duan[Out%10];Delay1ms();P3=0xff;P2=0x02;//第三位(十位)Delay10us();P3=duan[(Out/10)%10];Delay1ms();P3=0xff;P2=0x04;//第二位(百位)Delay10us();P3=duan[(Out/100)%10];Delay1ms();P3=0xff;P2=0x08;//第一位(千位)Delay10us();P3=duan[(Out/1000)%10];Delay1ms();P3=0xff;}}

注意:因为12MHz的单片机的机器周期为1us,即计数值就等于以us为单位的时间值,因此计算公式 可以写为 时间=TH0*256+TL0;但如果使用的单片机工作频率为11.0592MHz,其机器周期为1.085us,因此时间计算公式需写为 时间=(TH0*256+TL0)*1.085

四、仿真电路

左肩理想右肩担当,君子不怨永远不会停下脚步!

如果觉得《HC-SRF04超声波测距传感器+Proteus仿真(附源码与仿真电路)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。