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=0if(TF1==1) break; //>65.536ms,超时}TR1=0; //关闭定时器return (TH1<<8 | TL1)*0.017; //返回距离
}
3.使用示例
我这里每1S获取一次距离并通过串口发送到电脑,然后用前面封装的数码管显示函数显示出距离