蓝桥杯单片机--超声波

   日期:2021-03-30     浏览:98    评论:0    
核心提示:P1^0为发送端,将它定义为TX,1为发送。P1^1为接收端,将它定义为RX,1为未接收,0未接收。通过TX置1发送超声波后,再到RX变为0接收到发出去的超声波过程,通过消耗的时间,代入公式得到距离。超声波发送void Send_Ware(){ usnigned char i; for(i=0;i<8;i++) { TX = 1; Delay12us();//12MHZ,经过测试感觉12us效果挺不错 10us-13us都可以. RX = 0; .


P1^0为发送端,将它定义为TX,1为发送。
P1^1为接收端,将它定义为RX,1为未接收,0未接收。
通过TX置1发送超声波后,再到RX变为0接收到发出去的超声波过程,通过消耗的时间,代入公式得到距离。

  • 超声波发送
void Send_Ware()
{ 
  usnigned char i;
  for(i=0;i<8;i++)
  { 
    TX = 1;
    Delay12us();//12MHZ,经过测试感觉12us效果挺不错 10us-13us都可以.
    RX = 0;
    Delay12us();
  }
}
  • 超声波接收识别与距离计算

首先我们还是要设置定时器,需要计算超声波发送到接收所用的时间

void Timer1Init()//设置的定时器1
{ 
    AUXR &= 0xBF;//12T模式,似乎不设置AUXR默认也为12T 
	TMOD &= 0x0F;		
	TMOD |= 0x10; //打开定时器1的16位计数模式
	TH1 = 0;
	TL1 = 0;
	TF1 = 0;
}
因为不需要用到中断,所以暂时不打开

这里是引用 void Send_Ware() //在前面定义过了

unsigned int distance;
void Ware_Dis()
{ 
  Send_Ware();
  TR1 = 1while(TF1 == 0&&RX == 1);//进行下一步只有两种情况,第一种就是接收到了超声波,即RX = 0,第二种就是计时器溢出,即TF1 = 0;
  TR0 = 0;
  if(TF1 == 1)
  TF1 = 0;
  if(RX == 0)
  { 
    distance = TH1;
    distance = (distance<<8)|TL1;
    distance = (unsigned int)distance*0.017;//公式,可以推导
  }
  TH1 = TL1 = 0;
}

再将其显示就可以了。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服