首页 > 编程知识 正文

蓝桥杯频率测量

时间:2023-05-04 00:41:20 阅读:207894 作者:4318

实验开发板为CT107D蓝桥官方板,编译环境为MDK5

超声波探头测距原理:
发射头发射超声波,遇到障碍物后返回,接收探头接受到返回信号。
两个动作产生的时间差可以是我们根据声音在空气中传播的速度来(大约340m/s)推算距离(注意:一来一回是两次的距离)。

在编写程序前首先要了解超声波模块在CT107D上的驱动方式:

向超声波模块发送8次脉冲蓝桥板子上的探头需要的为40KHZ的脉冲具体操作见代码检测是否接受到回应(且定时器未达最大值)根据时间计算距离
TIPS:
由于采用16位定时器使时间有最大值,也使得距离有最大值
注意超声波读取频率不能太高,最好间隔200ms读取一次
#include "Dis.h"void Delay13us()//@11.0592MHz{unsigned char i;_nop_();_nop_();i = 33;while (--i);}void InitSonic()//初始化定时器1,暂时不启动{TMOD = (TMOD & 0x0F) | 0x10;TF1 = 0;TR1 = 0;}void SendWave()//发送八段脉冲波(40Khz){u8 i = 8;while(i --){Snoic_Txd = 1;Delay13us();Snoic_Txd = 0;Delay13us();}}void Dis_Get(){u16 time, distance;EA = 0;SendWave();EA = 1;TH1 = 0;TL1 = 0;TR1 = 1;while((Snoic_Rxd) && (TF1 == 0));TR1 = 0;if(TF1 == 1){TF1 = 0;SMG_Buff[4] = 0xBF;SMG_Buff[5] = 0xBF;SMG_Buff[6] = 0xBF;SMG_Buff[7] = 0xBF;}else{time = (TH1 * 256) + TL1;distance = (u16)((time * 0.17 * 12) / 11.0592);//本身数值乘以0.17公式是官方给的对于12MHZ的晶振的由于实际使用的是11.05926MHZ所以这么算SMG_Buff[4] = SMG[(distance / 1000) % 10];SMG_Buff[5] = SMG[(distance / 100) % 10];SMG_Buff[6] = (SMG[(distance / 10) % 10]) & 0x7F;SMG_Buff[7] = SMG[(distance % 10)];}}/***********************************Dis.h**************************/#ifndef _DIS_H#define _DIS_H#include "config.h"#include "SMG.h"sbit Snoic_Txd = P1^0;sbit Snoic_Rxd = P1^1;extern void Delay13us();extern void InitSonic();extern void SendWave();extern void Dis_Get();#endif

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。