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 = 1;
while(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;
}
再将其显示就可以了。