使用超声波需要用跳线帽将N_A1、N_B1分别与P10、P11相连
先来讲一下原理,超声波一个发射端一个接收端。
发射端需要发出方波信号,定时器再开始计时,当接收端接收到信号了或者定时器溢出定时器停止计时,未溢出就根据时间计算出距离S=(Time/10)*17.2/100+3;
我这里用的PCA模块,这个模块也可以当作定时器使用,具体可以去手册看看
void Send_Wave() //产生8个脉冲超声波信号
{
unsigned char i;
for(i = 0; i < 10; i++)
{
Trig = 1;
Delay14us();
Trig = 0;
Delay14us();
}
}
void Distance(void)
{
CMOD=0x00;
CL = 0; // 设置定时初值
CH = 0; // 设置定时初值
Send_Wave();
CR=1;
while(Echo==1&&CF==0); //当Echo为0接收到。 这行代码说明Echo未接收到且定时未溢出时进行
循环
CR=0;
if(CF==0) //未溢出
{
Time=CH<<8 | CL;
S=(Time/10)*17.2/100+3; //实测准确度高
S_distance=S;
}
else //定时器溢出
{
CF=0;
S=999;
S_distance=999;
}
}