HC-SR04超声波模块测距

在这里插入图片描述
 超声波测距模块工作原理
  (1)采用IO口TRIG触发测距,给至少10us的高电平信号;

(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;

(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

(4)本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,即可以达到你移动测量的值

程序
sbit Echo=P1^0;
sbit Trig=P1^1;

void delay10() //10us的电平
{
TMOD|=0x1;
TH0=0xFF;
TL0=0xF6;
TR0=1;
while(!TF0){}
TF0=0;

}
void delay()
{
int i,j;
for (i=0;i<200;i++)
for(j=0;j<1000;j++);
}
void initcs_9600() //串口初始化
{
SCON =0x50;
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;

}
void csb_init() //超声波初始化
{
TMOD |=0x1;
TH0=0x00;
TL0=0x00;
}
void sendword(char c)
{
SBUF=c;
while(TI!=1){}
TI=0;
}
void sendstring(char *p)
{
while(*p!=’\0’){
sendword(*p);
p++;
}
}

void csb_start(){ //给电平
Trig=1;
delay10();
Trig=0;
}
void getecho(){
csb_start();
while(!Echo){}
TH0=0;
TL0=0;
TR0=1;
//开始计时
while(Echo){}
TR0=0;
}

int gettime(){ //时间
unsigned int time=TH0256+TL0;
return time;
}
float getdis(int time){ //获取距离
float distance;
distance = (float)(time
0.017);
return distance;
}
int main()
{
float dis=0;
char buf[30]={0};
initcs_9600();
csb_init();
while(1){
getecho();
dis=getdis(gettime());
sprintf(buf,“dis=%fcm\r\n”,dis);
sendstring(buf);
TH0=0;
TL0=0;
delay();
}
return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值