蓝桥杯--超声波测距模块

#include <STC15F2K60S2.H>
#include "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
void CSB(void)
{
	unsigned int S = 0;
	if(flag_T0 >6)    //2ms
	{
		flag_T0 =0;
		TX = 1;somenop;TX = 0;somenop;TX = 1;somenop;TX = 0;somenop;	TX = 1;somenop;TX = 0;somenop;	TX = 1;somenop;TX = 0;somenop;
		TR1 = 1;
		while((RX==1)&&(TF1==0));
		TR1 = 0;
		if(TF1){S=999;TF1=0;}
		else 
		{
			S = (TH1<<8)|TL1;
			S = (unsigned int)(S*0.017);
			S = S/12;
		}
		TH1= 0;
		TL1= 0;
	}
	  displaysmg6(S%1000/100);
		displaysmg7(S%100/10);
		displaysmg8(S%10);
}

本次程序使用的单片机是基于蓝桥杯的stc15f260s2,超声波模块跟单片机型号无关,其工作原理相同,这里我使用定时器定时读取,定时器1作为计数

①超声波模块发送引脚发送一个10us以上的高电平,而后在拉低(这里可以多发几次,时间也可以稍微长些)

②打开定时器1开始计数

③判断echo引脚是否接收到信号,(收到信号echo引脚会被拉低)或者定时器计数是否溢出

④假设超声波echo引脚接受到信号,则关闭定时器计数,

⑤TH1和TL1都是8位重装载寄存器,将其放到一个16位的变量中进行计算

⑥S=((340*10)✘(t/10的六次方))/2=0.017*t

(哈哈哈哈当时写的太快,代码中的时间直接用s存储了,现在是手机编辑  懒得回去改了)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值