11、基于51单片机超声波测距仪数码管系统设计(程序+原理图+PCB图+参考论文+开题报告+元器件清单等)

目录

摘要

一、硬件方案

二、设计功能

三、成品实物图

四、原理图  

五、PCB图

六、程序源码 

部分代码:

 资料包括:


摘要


STC89C52是STC系列单片机里应用比较广泛的一款,在自动控制领域里享有很高的价值,以其易用性和多功能性受到了广大电子设计爱好者的好评。本次设计主要是利用STC89C52单片机、超声波传感器完成测距报警系统的制作,以STC89C52为主控芯片,利用超声波对距离的检测,将前方物体的距离探测出来,然后单片机处理运算,与设定的报警距离值进行比较判断,当测得距离小于设定值时,STC89C52发出指令控制蜂鸣器报警。

关键词:超声波传感器  STC89C52 

一、硬件方案

采用单片机+HC-SR04超声波传感器+数码管+按键+蜂鸣器而成。

二、设计功能

1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51 可通用。
2.产品自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。
3.数码管显示超声波测到的距离。
4.当超声波测出的距离小于设定的距离时就会使得蜂鸣器报警。
5.可设置 报警距离,按下设置键后 就可以再按 加减键 就可以修改报警距离并具有掉电保存功能。
6.HC-SR04超声波传感器模块测距,测量范围:2cm--5m。

三、成品实物图


四、原理图  


五、PCB图


六、程序源码 


部分代码:

/******************小延时函数*****************/
void delay()
{
	_nop_(); 		           //执行一条_nop_()指令就是1us
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_(); 
	_nop_();  
	_nop_(); 
}
 
 
/*********************超声波测距程序*****************************/
void send_wave()
{
	c_send = 1;		           //10us的高电平触发 
	delay();
	c_send = 0;	 
	TH0 = 0;		          //给定时器0清零
	TL0 = 0;
	TR0 = 0;				  //关定时器0定时
	while(!c_recive);		  //当c_recive为零时等待
	TR0=1;
	while(c_recive)		      //当c_recive为1计数并等待
	{
		flag_time0 = TH0 * 256 + TL0;
		if((flag_time0 > 40000))      //当超声波超过测量范围时,显示3个888
		{
			TR0 = 0;
			flag_csb_juli = 2;
			distance = 888;
			break ;		
		}
		else 
		{
			flag_csb_juli = 1;	
		}
	}
	if(flag_csb_juli == 1)
	{	
		TR0=0;							 //关定时器0定时
		distance =flag_time0;			 //读出定时器0的时间
		distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017M 算出来是米
		if((distance > 600))				 //距离 = 速度 * 时间
		{	
			distance = 888;				 //如果大于6m就超出超声波的量程 
		}
	}  
}
 
 
/*********************定时器0、定时器1初始化******************/
void time_init()	  
{
	EA  = 1;	 	  //开总中断
	TMOD = 0X11;	  //定时器0、定时器1工作方式1
	ET0 = 0;		  //关定时器0中断 
	TR0 = 1;		  //允许定时器0定时
	ET1 = 1;		  //开定时器1中断 
	TR1 = 1;		  //允许定时器1定时	
}
 
 
 
/***************主函数*****************/
void main()
{
	beep = 0;		 //开机叫一声   
	delay_1ms(150);
	P0 = P1 = P2 = P3 = 0xff;	   //初始化单片机IO口为高电平
	time_init();	//定时器初始化程序
	while(1)
	{	
		flag_300ms ++;	  //加1 
		if(flag_300ms >= 300)
		{		
			flag_300ms = 0;
			send_wave();	//测距离函数
			if(menu_1 == 0)
			{
				dis_smg[0] = smg_du[distance % 10];		 //显示距离
				dis_smg[1] = smg_du[distance / 10 % 10];
				dis_smg[2] = smg_du[distance / 100 % 10] & 0xdf; ;	
				dis_smg[3] = 0xff;	        //不显示
			}
			clock_h_l();     //报警函数
		}

 资料包括:

需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要:超声波测距是一种典型的非接触测量方式,应用非常广泛。本文提出了一种基于STM32单片机的高精度超声波测距方案。与传统单片机相比,STM32的主频和定时器的频率可以通过PLL倍频高达72MHz,高分辨率的定时器为高精度的测量提供了保证。超声波的发射使用定时器的PWM功能来驱动,回波信号的接收使用定时器的输入捕获功能,开始测距时,定时器的开启将同时启动PWM和输入捕获,完全消除了启动发射和启动计时之间的偏差,提高了测量精度。为使回波信号趋于稳定,设计了时间增益补偿电路(TGC),在等待回波的过程中随着时间的推移需要将放大器的增益值不断增大,通过实验获取不同距离需要设置的增益值,对应不同时间需要设置数字电位器的增量,并将该参数固化在单片机的FALSH中,在测距过程中,根据时间查询电位器增量表改变电位器阻值,实现回波信号的时间补偿,提高了测量的精度。为了在减小盲区的同时而不减小测量范围,设计了双比较器整形电路分别处理近、远距离的回波信号,近距离比较器可以有效屏蔽超声波衍射信号从而减小了测量盲区。传统的峰值检测方法大多通过硬件电路实现,设计较复杂,稳定性差。本文通过软件算法对回波信号进行峰值时间检测。不仅简化了电路,降低了成本,而且提高了系统的稳定度。经研究表明,该系统测量精度达到了lmm,盲区低至3cm,量程可达500cm。本系统在近距离测试时,系统的精度较理想,可作为停车时的倒车雷达使用,也可以用于液面检测(油箱液位),还可以用于自动门感应,机器人视觉识别等。如果多使用几个测距,将这些集成一个大系统,那么整个大系统可用于定位避障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值