55、基于51单片机的超声波测距仪数码管设计

该设计使用STC89C52单片机和HC-SR04超声波传感器创建了一个测距报警系统。系统能检测前方物体距离,并在距离小于预设值时触发蜂鸣器报警。硬件方案包括单片机、超声波传感器、数码管、按键和蜂鸣器。程序中包含了超声波测距的实现以及小延时函数。
摘要由CSDN通过智能技术生成

毕设帮助、开题指导、技术解答(有偿)见文末

目录

摘要

一、硬件方案

二、设计功能

三、实物图

四、原理图

五、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();     //报警函数
		}

七、资料包括

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

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冠一电子设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值