超声波stc8a代码.c

#include “hcsr04.h”
/********************************************************/
void HCSR04Start(char i) //i:那个超声波模块;
{
if(i0)
{
TRIG=1; // 启动一次模块
delay_tms(5);
TRIG=0;
}
else
if(i
1)
{

		TRIG1=1;			                 // 启动一次模块
    delay_tms(5);
    TRIG1=0;
	
		}
	else
		if(i==3)
		{
		
		    TRIG2=1;			                 // 启动一次模块
        delay_tms(5);
       TRIG2=0;

		}

}

/********************************************************/
void HCSR04Count(void)
{

 Sx=((TH0*256+TL0)*1.87)/100;     //算出来是CM
 TH0=0;
 TL0=0;
 if(HCflag==1)		    //超出测量
 {
  HCflag=0;
 }

}

/********************************************************/
void HCSR040() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
HCflag=1; //中断溢出标志
}
///////////////////////////////////////////////////////////
float ReadHCSR04(char i)
{
float dd;
HCSR04Start(i);
if(i==0)
{
while(!ECHO); //当RX为零时等待
TR0=1; //开启计数
while(ECHO); //当RX为1计数并等待
TR0=0; //关闭计数
HCSR04Count(); //计算
dd=Sx;
delay_tms(10);
return dd;
}

 else	 if(i==1)
 {
	while(!ECHO1);		//当RX为零时等待
		 TR0=1;			    //开启计数
		//dd=125.87;
		 while(ECHO1);			//当RX为1计数并等待
		 TR0=0;				//关闭计数
		 HCSR04Count();			//计算
		 dd=Sx;
		//dd=291.78;
		 delay_tms(10);	
	 return dd;
 }
 
  else	 if(i==2)
 {
	while(!ECHO2);		//当RX为零时等待
		 TR0=1;			    //开启计数
		//dd=125.87;
		 while(ECHO2);			//当RX为1计数并等待
		 TR0=0;				//关闭计数
		 HCSR04Count();			//计算
		 dd=Sx;
		//dd=291.78;
		 delay_tms(10);	
	 return dd;
 }
 
 else
	 return 900;

}

void HCSR04Init()
{
P2M0=0x00;
P2M1=0x00;

P1M0=0x00;
P1M1=0x00;

TMOD=0x21; //设T0为方式1,GATE=1;
SCON=0x50;
TH0=0;
TL0=0;
TR0=1;
ET0=1; //允许T0中断

TI=1;
EA=1;			   //开启总中断

}

猜你喜欢

转载自blog.csdn.net/lmf666/article/details/102994072
今日推荐