【毕业设计】57-基于单片机的超声波测距仿真倒车雷达系统设计(源程序+原理图工程+PCB+仿真工程+答辩论文)

【毕业设计】57-基于单片机的超声波测距仿真倒车雷达系统设计(源程序+原理图工程+PCB+仿真工程+答辩论文)

资料要求

资料包含:毕业设计全套资料(精品)
原理图工程文件
原理图截图
PCB工程文件
仿真模型工程文件
源代码工程
仿真截图
搭建视频
实物图片
答辩论文低重复率文档

设计说明书

摘要

本设计介绍了基于单片机控制的超声测距仪的原理:由AT89S52控制定时计时,以HC-SR04超声波模块发射,接收,并计算超声波自发射至接收的往返时间,从而得到实测距离。并且在数据处理中采用了温度补偿的调整,用LCD1602液晶显示模块显示距离和温度。

整个硬件电路由超声波发射接收电路、电源电路、显示电路等模块组成。各探头的信号经单片机综合分析处理,实现超声波测距仪的各种功能。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。相关部分附有硬件电路图、程序流程图,给出了系统构成、电路原理及程序设计。此系统具有易控制、工作可靠、测距准确度高、可读性强和流程清晰等优点。实现后的作品可用于需要测量距离参数的各种应用场合。

设计框架架构

基于单片机系统的超声波测距仪… I

Ultrasonic range finder system based on single chip. II

1、 绪论… 8

1.1课题研究背景… 8

1.2、课题的提出和研究意义… 9

1.2.1课题的提出… 9

1.2.2本课题研究的意义… 9

1.3、国内外研究现状… 10

1.3.1发展历史… 10

1.3.2 研究现状… 11

2、 超声波的测距原理及误差分析… 11

2.1 超声波简介… 11

2.1.1 什么是超声波… 11

2.1.2超声波的特性及特点… 12

2.1.3超声波的应用… 13

2.1.4超声波测距的原理… 14

2.2超声波测距的误差分析… 14

3、 系统硬件设计… 16

3.1 系统结构设计… 16

3.2 AT89S52单片机简介… 17

3.2.1 AT89S52单片机功能… 17

3.2.2 AT89S52单片机主要特性… 17

3.2.3 AT89S52管脚说明… 18

3.3 DS18B20温度传感器简介… 20

3.4 超声波模块HC-SR04. 21

3.4.1 HC-SR04特点… 21

3.4.2 HC-SR04基本工作原理… 21

3.4.3超声波时序图… 22

3.5.1 LCD1602简介… 23

3.5.2 LCD1602显示程序流程图… 24

3.6超声波发射接收电路… 25

3.7 LCD显示电路… 26

3.8单片机及其配属电路… 26

3.8.1单片机最小系统及复位电路… 26

3.8.2单片机时钟电路… 27

3.8.3 按键电路… 27

3.8.4电源模块… 28

3.8.5 报警电路… 28

3.8.6 温度检测电路… 29

4、 系统软件设计… 29

4.1 主程序流程… 29

4.2子程序设计… 32

4.2.1超声波测距程序… 32

4.2.2测温子程序… 34

4.2.3 显示程序… 37

4.2.4测算程序… 38

5、 调试… 39

5.1系统硬件调试… 39

5.2系统硬件调试… 41

5.3静态调试… 41

5.4系统综合调试… 42

6 总结 43

7、 参考文献… 43

8、 附录… 45

附录A 程序清单… 45

附录B超声波测距电路原理图… 57

附录C PCB原理图及实物图… 58

设计说明书及设计文件

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

源码展示

 图4.4 DS18B20测温程序流程图
/*------------------------------------------------
                    18b20初始化
------------------------------------------------*/
bit Init_DS18B20(void)
{
	bit dat=0;
	DQ = 1;    				//DQ复位
 	DelayUs2x(5);   		//稍做延时
 	DQ = 0;         		//单片机将DQ拉低
 	DelayUs2x(200); 		//精确延时 大于 480us 小于960us
 	DelayUs2x(200);
 	DQ = 1;        			//拉高总线
 	DelayUs2x(50); 			//15~60us 后 接收60-240us的存在脉冲
 	dat=DQ;        			//如果x=0则初始化成功, x=1则初始化失败
 	DelayUs2x(25); 			//稍作延时返回
 	return dat;
}
/*------------------------------------------------
                    读取一个字节
------------------------------------------------*/
unsigned char ReadOneChar(void)
{
	unsigned char i=0;
	unsigned char dat = 0;
	for (i=8;i>0;i--)
 	{
  		DQ = 0; 			// 给脉冲信号
  		dat>>=1;
  		DQ = 1; 			// 给脉冲信号
  		if(DQ)
   		dat|=0x80;
  		DelayUs2x(25);
 	}
 	return(dat);
}
/*------------------------------------------------
                    写入一个字节
------------------------------------------------*/
void WriteOneChar(unsigned char dat)
{
 	unsigned char i=0;
 	for (i=8; i>0; i--)
 	{
  		DQ = 0;
  		DQ = dat&0x01;
  		DelayUs2x(25);
  		DQ = 1;
  		dat>>=1;
 	}
	DelayUs2x(25);
}
/*------------------------------------------------
                    读取温度
------------------------------------------------*/
unsigned int ReadTemperature(void)
{
	unsigned char a=0;
	int b=0;
	int t=0;
	float tt=0;
	while(Init_DS18B20()); 	//检测初始化是否成功
	WriteOneChar(0xCC); 	// 跳过读序号列号的操作
	WriteOneChar(0x44); 	// 启动温度转换
	DelayMs(10);
	Init_DS18B20();
	WriteOneChar(0xCC); 	//跳过读序号列号的操作 
	WriteOneChar(0xBE); 	//读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	a=ReadOneChar();   		//低位
	b=ReadOneChar();   		//高位
	t=b;
 	t<<=8;
 	t=t|a;
 	tt=t*0.0625;
 	t= tt*10+0.5; 
 	return(t);
}

猜你喜欢

转载自blog.csdn.net/cqtianxingkeji/article/details/135012019