?本文参考该博主而写,这位博主大大写的十分详细,大家有兴趣可以去参考
蓝桥杯之超声波__WILLPOWER_的博客-CSDN博客_蓝桥杯超声波https://willpower.blog.csdn.net/article/details/107942703
我之所以再 画蛇添足 写这个是因为我想记录一下我作为小白视角如何去使用
很多同学刚开始写的时候,看到超声波参数手册一定都是晕的,不知道怎么写,怎么办!其实我也是,我在写这篇文章的时候,依旧搞不清楚!!!但是,这不影响我参加比赛(除非规则改了),正常来说,我们能写出来就行,不用搞原理!!!如果你也是这种心态,那么就继续看下去叭。如果不是,请看上面的博客!!!
强调!有了这篇文章,你不需要再看 超声波介绍!!!你已经可以进行距离测量了!!!
关于这个这个传感器,我们分为两部分进行学习!
(1)写自己驱动
(2)验证
(1)写自己驱动
这里的驱动也很简单,因为不长,这边建议直接理解背下来!!!
代码已经放在下面!!,我会稍微解释一下,方便你理解记忆!!!
//超声波发生程序,此处是一个周期为26us,也就是频率为1/26us,接近38k
void SendWaves()
{
uchar i=8;
while(i--)
{
Sonic_Txd=1;
Delay13us();
Sonic_Txd=0;
Delay13us();
}
}
对发送信号进行判断是否超时
//超声波测距
void SonicDrive()
{
uint time;
SendWaves();
CH = 0; //清空定时器的初值
CL = 0;
CR = 1; //开启计时
//当没有接收到信号,并且没有超时的时候,一直在这里循环
while((Sonic_Rxd) && (CF==0)); //注意这里while后面的分号!
//当退出的时候,有两种情况,要么接收到了信号,要么超时了!
CR= 0; //首先要关闭计时!
if(CF == 1) //如果是因为超时退出
{
CF = 0; //清除溢出标志
/*
此处放超时的程序,看要求,不显示,或者返回一个什么东西
*/
}
else //否则,则应该是接收到信号而退出
{
time = (CH * 256) + CL; //将计时器的计时取出,合并数据
distance = (uint)((time * 0.017) / 12); //计算距离
}
}
?函数代码解读:
1.调用?SendWaves函数进行判断是否超过最大距离。
2.把计数值清零,并且开始计时
3.判断 接收到 或者 时间超出 后结束循环
4.关闭及时
5.超时退出
6.接收退出
?注意事项:(1)main函数中加入?CMOD |= 0x08 ;?CCON = 0x00;
? ? ? ? ? ? ? ? ? ?(2)distanc为全局变量
(2)验证
这里的话,就是把读取的数据放到串口上进行打印,方便我们在测试的时候用!
?
?
|