超声波模块介绍及应用

在这里插入图片描述HC-SR04超声波模块基本工作原理:(1)采用IO口TRIG触发测距,当给它一个最少10us的高电平信号时启动。(2)模块自动发送8个40khz的方波自动检测是否有信号返回。(3)通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波发射到返回的时间。所以测算出距离即(高电平时间*声速(340m/s))/2.。注意此模块不宜带电连接

#include <stdio.h>
#include “reg52.h”
sbit Echo = P1^0; //定义引脚
sbit Trig = P1^1;
void initUart_9600()
{
//1.串口协议初始化
//1.1 数据格式:起始位,数据位,停止位,奇偶校验
//工作方式:1.1位起始位,8位数据位(低位在先)和1位停止位 SM0、SM1为“01
// 芯片手册:每个硬件都有一个开发手册,软件代码必须根据手册来写
SCON |=0x1<<6; //串行控制寄存器;方式1:波特率=(2的SMOD次方/32)x(定时器1的溢出率或···)
SCON&=~(0x1<<7);
SCON |=0x1<<4; //当T1x12=0或1时,定时器1的溢出率=SYSclk(晶振)/(12x(256-TH1))
TMOD |= 0x1<<5;//定时/计数器方式控制寄存器,方式1为常数自动重装入的8位定时/计数器 8位的效率和准确度更高
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;//启动定时器,让定时器工作,数节拍
TCON |=0x1<<6;
EA =1;
ES =1;

}
void delay20us(){ //延时10 微妙
TMOD |= 0x1; //定时16位计时模式
TH0=0xff;
TL0=0xf6;
TR0=1;

while(!TF0);  //第一遍没做出,解释:
TF0 = 0;

}
void delay(){
int i;
int j;
for(i=0;i<100;i++)
for(j=0;j<500;j++);
}

void initCSB()
{ //让超声波开始工作,给他一个10us的高电平脉冲

Trig=0;
Trig=1;
delay20us();
Trig=0;

}

void startTime(){
// TMOD=0x01; 在之前delay10中已经做过
TH0=0;
TL0=0;//让计时器开始
TR0=1;//开始计时
}
void endTime(){

// TMOD=0x01;
TR0=0;

}
int getCSBtime(){

 unsigned long time;
 time=TH0*256+TL0;
 return time;

}

float CSB_GetDistance(unsigned int time)
{
float distance;
distance=(float)time*0.017;
//TH0=0;
//TL0=0;//清空定时器
return distance;
}
void printfStr(char c)
{

	SBUF =c;
	while(!TI);
	TI=0;
	
	//delay();

}

void sendString(char *str)
{
while(*str!=’\0’)
{
printfStr(*str);
str++;
// delay();
}
}

void main()
{
unsigned int time=0;
char buf[24]={’\0’}; //数组
float dis;

initUart_9600(); //初始化串口

while(1){

   initCSB();	 
   while(Echo!=1);//	 波出去,开始计时
   startTime();
   while(Echo!=0);//  波回来,结束计时
   endTime();
	  
   time=getCSBtime(); //获得超声波发送的时间
  dis=CSB_GetDistance(time);   //计算出距离
  delay();



   sprintf(buf,"getDistance=%fcm\r\n",dis);	
 
   sendString(buf); //传出数组
   delay();
   
}

}

  • 10
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值