51单片机----超声波模块51单片机程序

最近在造小车 需要用到超声波模块 现将调试时用到的代码分享出来。

所用超声波模块为HC-SR04 单片机开发板是吴鉴鹰的
在这里插入图片描述
先理解超声波模块的原理,它有四个接口 Vcc Trig Echo Gnd 。
Vcc接正极 Gnd接地
Trig和Echo随便接两个IO口
然后给Trig口高电平10us以上,超声波模块会自动发出8个40khz的方波,并检测是否有信号返回,有信号返回时就在Echo口输出高电平,持续的时间就是发出信号到接受信号所用的时间。
然后开始写程序。
这里我为了能更好的看到超声波模块是否起作用,加入了单片机上的蜂鸣器,并设置了一个报警距离。

#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
sbit Trig=P2^5;   	 //控制端 
sbit Echo=P2^4; 	 //接收端
sbit Beep=P3^4;      //单片机开发板上的蜂鸣器
unsigned char T0RH=0;
unsigned char T0RL=0;
void Start_Buzz(unsigned int frequ)		
{
	unsigned int reload;
	reload = 65536 - (11059200/12)/(frequ*2); 
	T0RH = (unsigned char)(reload >>8);	  //蜂鸣器定时用 产生方波
	T0RL = (unsigned char)reload;		  //蜂鸣器定时用 产生方波

	TH1 = 0xFF;//蜂鸣器定时器
	TL1 = 0xFE;//蜂鸣器定时器

	ET1 = 1;
	TR1 = 1;
} //启动蜂鸣器 并设置音高
void Stop_Buzz()
{
	Beep= 1;
	ET1 = 0;
	TR1 = 0;
} //关闭蜂鸣器
void InterruptTimer0() interrupt 3
{
	TH1 = T0RH;
	TL1 = T0RL;
	Beep = ~Beep;
} //蜂鸣器中断程序
void time_init()
{
	EA=1;
	TMOD=0x11;
	TH0 = 0;
	TL0 = 0; 
} //初始化定时器
void Delay_us(unsigned char t)
{
	while(--t);
}	 //大约延时t*2+5us 	超声波模块用


void timer0()interrupt 1
{
TH0 = 0;
TL0 = 0; 
} //中断程序 初始化赋值 重新计数 超声波模块用 计算时间
 void main()
 {
 	unsigned int time,distance;
	Trig=0;
	Echo=0;
	time_init();
 	while(1)
	{
		Trig=1;
		Delay_us(5);
		Trig=0;
		while(Echo==0);
		TR0=1;
		while(Echo);
		TR0=0;
		time=TH0*256+TL0;
		distance=(int)(time*0.017);	   		//计算路程 单位为cm
		TH0=0;
		TL0=0;
		if(distance<30)					//如果距离小于30cm 蜂鸣器响
		{
			Start_Buzz(4000); 			//用于控制蜂鸣器的音高
		}
		else 
		{
			Stop_Buzz();
		}
 	}
 }

才学疏浅如有不妥请多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值