蓝桥杯单片机之超声波
2019-04-15 18:34发布
生成海报
首先看原理图
这里的超声波模块主要是介绍的是蓝桥杯板子上的超声波模块,
超声波的原理其实很简单的,就是由于单片机一个引脚连接到发射模块,就可以利用这个引脚来发出一定频率的信号,而在,而在发射模块发射出的超声波被接受回来之后,就会在接收端连接的一极产生下降沿,我们利用一个定时器来计数,记录下来回的时间,然后根据声音传播速度来算出距离,这里超声波的速度和我们声音速度差不多340m/s在使用超声波之前,
我们必须将蓝桥杯板子上的J2的1与3,2与4用跳线帽连接好,默认的情况下这几个引脚是连接好的,这样我们就可以用P10来进行发射超声波,然后就是P11这个引脚上面判断是不是有低电平就可以,同时发射电路发射完之后就可以检测引脚的电平变化,也就是这个时候开启定时器计数器,检测到下降沿或者定时器溢出之后就开始下一次的发射,下面是用代码来进行实现./***** 先定义一些引脚,然后宏定义一些数据以供我们后面使用 ***/
//位定义
sbit launch = P1^0; //发送超声波
sbit Receive = P1^1; //接受超声波
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
//我们利用定时器1就要设置一下为16位定时器模式
void T1_Init(void){
TMOD = (TMOD&0x0F)|0x10;
TH1 = 0;
TL1 = 0;
}
//发射超声波的函数
void sonic_send(void){
unsigned char i = 8,j = 12;
while(i--){
launch = 1;
while(j--)somenop;
j=11;
launch = 0;
while(j--)somenop;
_nop_();_nop_();_nop_();_nop_();
}
}
//接收超声波并且计算的函数
unsigned int cal_distant(void){
unsigned int distant ;
//发送超声波
sonic_send();
//开启定时器
TR1 = 1;
//等待定时器溢出或者铺捉到下降沿
while((Receive==1)&&(TF1==0));
//关闭定时器
TR1 = 0;
//判断是不是定时器溢出,如果是,则我们直接返回9999表示没有检测到
if(TF1==1){
TF1=0;
distant = 9999;
}
//否则根据计数器的时间来计算出距离
else {
//获取到计数器的值
distant = TH1;
distant = (distant<<8)|(TL1);
//将计数的值重新清零
TH1 = 0;
TL1 = 0;
//这个是计算出的单位是cm
/*
公式推导:
默认12分频情况下,定时器加1的时间是1us = 1 * 10^(-6)
声音传播速度一个是340m/s,即3.4*10^4 cm/s,注意单程就要除以2
距离 = 定时器的值 * 3.4*10^4 * 10^(-6) /2
= 定时器的值 * 0.017
*/
distant = distant*0.017;
}
return distant;
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮