|
超聲波模塊選用的是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();
}
}