#include<reg51.h>
#include<intrins.h>
sbit Trig=P2^0;
sbit Echo=P2^1;
/*
---------------------
延时函数
---------------------
*/
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=400;y>0;y--);
}
/*
---------------------
超声波启动函数
---------------------
*/
void start()
{
int i;
Trig=0; //控制端初始状态拉低
Echo=0; //初始状态接收端置0
Trig=1; //控制端拉高,给一个高电平
for(i=0;i<20;i++) //给至少10us的高电平
{
_nop_(); //精确延时,推荐使用,在头文件intrins.h中
}
Trig=0; //将控制端拉低,触发条件完成
}
void count()
{
unsigned int time,timeH,timeL;
timeH=TH0;
timeL=TL0;
TH0=0;
TL0=0;
time=timeH*256+timeL;
if(time<542 ) //542us,换算成距离是10cm(11.0592m)
P1=0x00; //p1控制4个轮子
else
P1=0xAA;
}
void main()
{
while(1)
{
TMOD=0X11;
TH0=0;
TL0=0;
start();
while(!Echo);
TR0=1;
while(Echo);
TR0=0;
count();
delay(120);
}
}
代码如上,已经测试过了,那个超声波模块正常工作,就是轮子不动,麻烦各位大哥了
|