|
超声波模块选用的是HC-SR04。首先,利用单片机发出一个的高电平信号,其次,超声波发射器会向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中遇到障碍物就立即返回来,超声波接收器收到反射波立即停止计时,超声波在空气中的传播速度为340m/s,根据计时器记录的时间t可以算出距障碍物的距离=t*340/2。程序:
void pingyi(void)
{
ControlCar(4);
delay_nms (400);
ControlCar(1);
delay_nms (300);
ControlCar(3);
delay_nms (400);
ControlCar(1);
delay_nms (410);
ControlCar(3);
delay_nms (400);
ControlCar(1);
delay_nms (300);
ControlCar(4); //右转100ms
delay_nms (350);
ControlCar(1);
delay_nms (300);
}
void Display(void) //数码管显示函数
{ unsigned char b;
for(b=193456789;b>0;b--)
{
sw1=0;
P0=Disp_Tab[disbuff[0]];
delay_nus(20);
sw1=1;
sw2=0;
P0=Disp_Tab[disbuff[1]];
delay_nus(20);
sw2=1;
sw3=0;
P0=Disp_Tab[disbuff[2]];
delay_nus(20);
sw3=1;
sw4=0;
P0=Disp_Tab[disbuff[3]];
delay_nus(20);
sw4=1;
}
}
void Conut(void)
{
time=TH0*256+TL0; /*此时time的时间单位决定于晶振的速度,外接晶振
11.0592MHZ时,time的值为0.54us*time,单位为微秒,
那么1us声波能走多远的距离呢?
1s=1000ms=1000000us 340/1000000=0.00034米=0.34
毫米 也就是1us能走0.34毫米 */
TH0=0;
TL0=0;
S=(time*1.7)/10;
if(S>4500)
{
ControlCar(1);
disbuff[0]=10; //显示距离的千位
disbuff[1]=10; //百位
disbuff[2]=10; //十位
disbuff[3]=10; //个位
Display();
}
if(300<S<4500)
{
ControlCar(1);
disbuff[0]=S/1000;
disbuff[1]=S%1000/100;
disbuff[2]=S%1000%100/10;
disbuff[3]=S%1000%10 %10;
Display();
}
if(S<=500)
{
SB1=0;
delay_nms(200);
SB1=1;
pingyi();
disbuff[0]=S/1000; //距离的千位
disbuff[1]=S%1000/100; //百位
disbuff[2]=S%1000%100/10; //十位
disbuff[3]=S%1000%10 %10; //个位
Display();
}
}