【毕业设计】61-基于单片机的超声波测距仪设计(原理图、仿真工程、答辩论文、答辩PPT、开题报告、任务书)
资料要求
包含此题目毕业设计全套资料:(毕业设计全套精品资料)
原理图工程文件
原理图截图
仿真模型工程文件
仿真截图
搭建视频
答辩论文低重复率,24618字
英文文献及翻译
开题报告
任务书
答辩PPT
详情请私信!
任务书
主要研究内容:
考虑到单片机由于其强大的功能和高性价比而得到广泛应用,测距系统采用单片机作为控制核心。采用液晶屏作为显示设备,最后对系统进行了测量,满足设计要求。
方法:
通过图书、期刊、网络等途径查阅相关文献资料,研究单片机、温湿度传感器、液晶屏等知识。
要求:
1、确定系统总体设计方案,给出设计方案的结构框图;
2、利用仿真软件(如:Proteus)完成仿真电路的具体设计;
3、利用编程软件(如:Keil)完成编程;
4、对所设计的系统进行仿真调试,实现超声波测距仪的功能。
设计说明书
摘要
本文设计题目为超声波测距仪,主要研究使用超声波传感器对距离的测量保证较高的测量精度。本文研究了距离传感器,超声波传感器的研究背景于发展情况,充分了解到了超声波传感器使用的便利性。并选择合适的设计方案,确认系统的功能,确认使用单片机做为主控芯片,HC-SR04做为超声波距离传感器,按键做为人机交互设备,LCD1602做为显示器单元显示当前全部检测信息与数据。使用EDA软件绘制原理图,分配单片机I/O引脚,保证原理图逻辑分配合理性。绘制程序框架,掌握C语言编制技巧,使用KEIL软件编写工程代码最后生成HEX文件。使用仿真软件PROTEUS模拟整个系统的运行环境与条件,根据原理图搭建系统的电路仿真图,调试电路,测试系统是否达到预期功能。完成本次系统设计总结全文。
设计框架架构
前 言 1
第一章 绪 论 2
第一节 研究背景 2
第二节 研究背景及意义 3
第三节 本文的主要研究内容 4
第四节 本章小结 4
第二章 超声波测距仪方案设计 5
第一节 超声波测距原理 5
一、时间误差 5
二、超声波传播速度误差 5
第二节 超声测距仪需要实现的功能 6
第三节 方案设计 7
第四节 本章小结 8
第三章 超声波测距仪电路设计 9
第一节 单片机最小系统电路设计 9
一、单片机介绍 9
二、单片机最小系统设计 10
第二节 按键电路设计 11
第三节 超声波测距电路设计 12
第四节 蜂鸣器报警电路设计 13
第五节 LCD1602电路设计 13
第六节 温度传感器电路设计 15
第七节 总电路设计 16
一、总原理图设计 16
二、PCB绘制 17
第八节 本章小结 17
第四章 超声波测距仪软件设计 18
第一节 Keil软件介绍 18
第二节 软件总流程设计 18
第三节 超声波测距流程设计 20
第四节 按键检测流程设计 21
第五节 LCD1602显示流程设计 22
第六节 测温流程设计 23
第七节 本章小结 24
第五章 超声波测距仪仿真实现 25
第一节 仿真软件介绍 25
第二节 仿真电路搭建 26
一、系统电路调试 26
二、系统综合调试 26
第三节 仿真功能测试 28
第四节 本章小结 32
总 结 33
致 谢 34
参考文献 35
附 录 37
一、英文原文 37
二、英文翻译 43
三、工程图纸 49
四、源代码 50
设计说明书及设计文件
低重复率文档,24618字
源码展示
#include <REGX51.H>
#include <stdio.h>
#include<intrins.h>
#define uint unsigned int;
#define uchar unsigned char
sbit DQ=P2^4; //ds18b20 端口
sbit k2=P3^6;
sbit k1=P3^5;
sbit csbint=P3^2; //ECHO
sbit csb=P2^5; //TRIG
sbit fmq=P3^3; //蜂鸣器
sbit bg=P2^6; //液晶屏背光控制
sbit EN = P2^2; //定义液晶屏定义端口
sbit RW = P2^1; //定义液晶屏定义端口
sbit RS = P2^0; //定义液晶屏定义端口
#define EN_CLR EN=0
#define EN_SET EN=1
#define RS_SET RS=1
#define RS_CLR RS=0
#define RW_SET RW=1
#define RW_CLR RW=0
unsigned char bb[11]={' ',' ',' ',' ','.',' ',' ',' ',' ',' ',};
unsigned char cc[]={'A','.','A','A','m'};
unsigned char aa[]={' ',' ','D','i','s','t','a','n','c','e',':'}; //Distance
unsigned int dz,k,s,j,bgz,k;
unsigned char zf,a1,a2,a3,xs,e,n,m,z; //zf 温度正负标志位;a1,a2,a3,按键设定程序中定值的米、分米、厘米临时存储变量 xs,e 用于按键程序中设定位闪动显示的变量;flag,未用,n,是背光控制标志位变量;m,z;
float temperature,csbc,wdz;
int temp;
bit wh;
/*------------------------------------------------
函数声明
------------------------------------------------*/
unsigned int ReadTemperature(void);
unsigned char ReadOneChar(void);
bit Init_DS18B20(void);
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);
void WriteOneChar(unsigned char dat);
void write_data(unsigned char date);
void init();
void write_com(unsigned char com);
void DelayMs(unsigned char t);
void DelayUs2x(unsigned char t);
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t) //大致延时1mS
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS uS延时函数,含有输入参
数 unsigned char t,无返回值 unsigned char
是定义无符号字符变量,其值的范围是
0~255
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
18b20初始化
------------------------------------------------*/
/*------------------------------------------------
读取一个字节
------------------------------------------------*/
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);
}
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;
}
/*------------------------------------------------
写入一个字节
------------------------------------------------*/
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);
}