1.分析原理图
蓝桥杯单片机板子的原理图做的简直是依托答辩,乱糟糟的不说还弄成黑白的,明明很简单的东西,弄成一大堆。
可以看到,J2跳线帽如果P10接N_A1,P11接N_B1就是用作超声波功能。N_A1用作发生超声波功能,而N_B1用作接收超声波反馈信号,通过R6上拉到VCC,所以分析接收到超声波信号后由高电平变低电平。
2.程序代码分析
我们首先需要通过P10引脚输出一定频率的方波信号来驱动JS2发出超声波,然后打开定时器计数,直到P11引脚变为低电平,此时关闭定时器,获取计数值后就能计算得到距离。
#include "wave.h"
#define Wave_TX P10 //超声波发送引脚
#define Wave_RX P11 //超声波信号接收反馈引脚
void Send_Vave() //发出超声波脉冲
{
u8 i=8;
while(i--)
{
Wave_TX=1;
_nop_();_nop_();_nop_();
Wave_TX=0;
_nop_();_nop_();_nop_();
}
}
float Get_Distance() //返回距离: xx.xx cm
{
AUXR &= 0xBF; //12T模式,1us计数一次
TMOD &= 0x0F;
TMOD |= 0x10; //定时器1:16位不自动重载
TL1 = 0x00;
TH1 = 0x00;
TF1 = 0; //清除TF1标志
TR1 = 0; //定时器1关闭计时
Send_Vave(); //发送超声波脉冲
TR1=1; //开始计时
while(Wave_RX){ //接收到返回超声波信号Wave_RX=0
if(TF1==1) break; //>65.536ms,超时
}
TR1=0; //关闭定时器
return (TH1<<8 | TL1)*0.017; //返回距离
}
3.使用示例
我这里每1S获取一次距离并通过串口发送到电脑,然后用前面封装的数码管显示函数显示出距离