51单片机入门学习(四):超声波的使用

#include 
//初始化led,超声波引脚
sbit LED1=P3^7;
sbit LED2=P3^6;
sbit Trig=P1^5;
sbit Echo=P1^6;
//2.定义10us的延时函数,使Trig保持高电平10us
void Delay10us()		//@11.0592MHz
{unsigned char i;i = 2;while (--i);
}
//3.Trig从0变高电平,延时使Trig保持高电平10us后变低电平
void Trig_start()
{Trig=0;Trig=1;Delay10us();Trig=0;
}
//4.初始化定时器0,先不开启它(即TR0先不搞)
void Time0_Init()
{TH0=0X00;TL0=0X00;TMOD&=0XF0;TMOD|=0X01;
}void main()
{  double time;//定义一个时间,存定时器计算的时间double dis;//定义一个距离,测距Time0_Init();//定时器函数调用Trig_start();//Trig函数调用while(Echo==0); //Echo=0时,此时Trig=0时,Echo未触发,程序卡死在while循环这里,只有当  Trig=1,Echo才会发波,变成高电平等于1,跳出while循环,程序才往下走             TR0=1;  //然后触发TR0使定时器开始计时while(Echo==1);//这里只有当EcHo接收波后变低电平,程序才往下走TR0=0; //此时关闭定时器计时time=(TH0*256+TL0)*1.085;//算出定时器计时的时间 TH0*2*8=TH0*256 这里是TH0位移的知识dis=time*0.017;          //声速340m/s=34000cm/s=34cm/ms=0.034cm/us if (dis<10)//当超声波测距小于10cm,LED1亮,LED2灭{LED1=0;LED2=1;}else{//否则,当超声波测距大于10cm,LED1灭,LED2亮LED1=1;LED2=0;}
} 

项目要求:定义两个灯,用超声波测距,当超声波测距小于10cm,LED1亮,LED2灭;否则,当超声波测距大于10cm,LED1灭,LED2亮。

 

 

超声波模块简单使用原理:VCC GND 接电源

Trig=1设置高电平,并维持10us的高电平时,会触发Echo=1,变高电平发射超声波,Echo接收物体反射的波会变成低电平,即Echo=0,用定时器计算Echo电平变化的时间乘以声速除以2就可以算出距离。即time=(TH0*256+TL0)*1.085;   距离dis=time*0.017;


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部