蓝桥杯单片机记录第十篇_超声波

采用了定时器法,进行超声波测距

sonic.c

#include 

sbit TX=P1^0;    	//发射引脚
sbit RX=P1^1;		//接受引脚

void Timer1Init(void)  //12微秒@12.000MHz
{
 AUXR &= 0xBF;  //定时器时钟12T模式
 TMOD &= 0x0F;  //设置定时器模式
 TL1 = 0xF4;  //设置定时初值
 TH1 = 0xFF;  //设置定时初值
 TF1 = 0;  //清除TF1标志
 TR1 = 0;  //定时器1开始计时
}

unsigned char distance_read(void)
{
 unsigned char distance=0,i=10;
 TX=0;
 
 TL1 = 0xF4;     	//设置定时初值
 TH1 = 0xFF;  		//设置定时初值
 
 TR1=1;			//定时器1开始计时 
//TX引脚发送40HZ方波信号驱动超声波发送探头
 while(i--)		
 {
  while(!TF1);
  TX^=1;
  TF1=0;
 }
 TR1=0;
 
 TL1=TH1=0;
 
 TR1=1;
 while(RX==1 && !TF1);	 //等待到收到脉冲
 TR1=0;
 
 if(TF1==1)		//如果有溢出
 {
   distance=999;
   TF1=0;
 }
 else   		//计算距离
  distance=((TH1<<8)|TL1)*0.017;

 return distance;	//返回测距
}

超声波测距时需要将J2的1、3和2、4短接

你可能感兴趣的:(蓝桥杯常考模块)