已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于基于 51 单片机带温度补偿的单片机带温度补偿的 HC SR04 超声波测距系统超声波测距系统 利用从网上购买的 HC SR04 超声波模块制作了一个测距装置 HC SR04 自身不带温度补偿功能 所以加上一个使用 DS18B20 做的温度测量模块 整个系统包括 51 单片机最小系统 超声波测距模块 温度测量模块 液晶显示模块 使用了如下主要元器件 元件元件说明说明数量数量 STC90C516RC 51 单片机 1 HC SR04 超声波测距模块 1 DS18B20 温度测量模块 1 lcd1602 液晶显示模块 1 系统电路图 51 单片机最小系统单片机最小系统 单片机型号 STC90C516 晶振 12Mhz 自己动手焊接的最小系统板 LCD1602A 液晶显示模块 液晶显示模块 HC SR04 超声波测距模块超声波测距模块 HC SR04 超声波测距模块可提供 2cm 至 400cm 的非接触式距离感测功能 测距精度可达 3mm 模 块自身包括超声波发射器 接收器与控制电路 实物正反两面图 HC SR04 电气参数 电气参数 HC SR04 工作原理及说明 工作原理及说明 1 给 Trig 触发控制信号 IO 端口至少 10us 的高电平信号 2 模块自动发送 8 个 40khz 的方波 并自动检测是否有信号返回 3 有信号返回时 Echo 回响信号输出端口输出一个高电平 高电平持续的时间就是超声波从发射 到返回的时间 4 两次测距时间间隔最少在 60ms 以上 以防止发射信号对回响信号的影响 超声波时序图 单片机控制单片机控制 HC SR04 超声波测距说明 超声波测距说明 原理图中 单片机的 P1 7 口接 HC SR04 的 Trig 端口 P1 6 口接 HC SR04 的 Echo 端口 超声 波在传播时碰到障碍物即返回 HC SR04 模块收到回波信号后 Echo 口输出一个高电平 单片机检测到 高电平后即启动计数器开始计数 直到单片机检测到 Echo 口变成低电平后结束计数 计数器的计数值 乘以单片机计数周期就是超声波从发射到接收的往返时间 即距离 S v t 2 由于在室温下 声速受温度的影响 其变化关系为 V 334 1 T 0 61 T 为当前温度 利用 DS18B20 温度传感器可以得到环境温度 补偿温度对声速的影响 当温度高于 26 度或低于 14 度时 上 述公式不能完全满足对测量的修正了 所以高于 26 度时取 26 度 低于 14 度时取 14 度 距离计算公式为 S 334 1 T 0 61 N T0 2 T 当前环境温度值 N 计数值 T0 单片机计数周期 晶振频率 12 微秒 HC SR04 测量存在不稳定性 所在对同一距离进行多次测量 并对测量结果排序 去除最大和最小 值 将余下的求平均值 程序流程图 程序流程图 程序代码 程序代码 程序 基于程序 基于 HC SR04 的超声波测距系统的超声波测距系统 单片机型号 单片机型号 STC90C516 12MHz 说明 按下说明 按下 K1 键后 指示灯点亮 开始连续进行键后 指示灯点亮 开始连续进行 7 次超声波测距 每次测距间隔次超声波测距 每次测距间隔 80ms 完成后对完成后对 7 次结果排序并将最大的次结果排序并将最大的 2 个数值和最小的个数值和最小的 2 个数值去除 对剩余的个数值去除 对剩余的 3 个数值取平均值 完成后指示灯灭 输出结果到个数值取平均值 完成后指示灯灭 输出结果到 LCD1602 上 测量超出范围则发出报警上 测量超出范围则发出报警 声 声 使用两个使用两个 IO 端口控制端口控制 HC SR04 触发信号输入和回响信号输出 触发信号输入和回响信号输出 以及一个以及一个 T0 定时器用于时间计数 定时器用于时间计数 使用使用 DS18B20 测量环境温度 声速公式 测量环境温度 声速公式 V 334 1m s Temperature 0 61 单片机晶振为单片机晶振为 12Mhz 11 953M 计数时为 计数时为 T 1us 计算公式 计算公式 S 334 1m s Temperature 0 61 N T 2 N 为计数值为计数值 TH0 256 TL0 包含头文件包含头文件 include include define Delay4us nop nop nop nop 宏定义宏定义 define ucharunsigned char 无符号无符号 8 位位 define uint unsigned int 无符号无符号 16 位位 define ulongunsigned long 无符号无符号 32 位位 全局变量定义全局变量定义 sbit K1 P1 0 按下按下 K1 后 开始测距后 开始测距 sbit LEDRed P1 1 测距指示灯 亮表示正在测距 灭表示测距完成测距指示灯 亮表示正在测距 灭表示测距完成 sbit BEEP P1 5 报警测量超出范围报警测量超出范围 sbit Trig P1 7 HC SR04 触发信号输入触发信号输入 sbit Echo P1 6 HC SR04 回响信号输出回响信号输出 float xdata DistanceValue 0 0 测量的距离值测量的距离值 float xdata SPEEDSOUND 声速声速 float xdata XTALTIME 单片机计数周期单片机计数周期 uchar xdata stringBuf 6 数值转字符串缓冲数值转字符串缓冲 LCD1602 提示信息提示信息 uchar code Prompts 16 Measure Distance 测量距离测量距离 Out of Range 超出测量范围超出测量范围 MAX range 400cm 测距最大值测距最大值 400cm MIN range 2cm 测距最小值测距最小值 2cm 清屏清屏 Press K1 Start 按键开始测量按键开始测量 uchar xdata DistanceText Range 测量结果字符串测量结果字符串 uchar xdata TemperatureText Temperature 测量温度值测量温度值 外部函数声明外部函数声明 extern void LCD Initialize extern void LCD Display String uchar uchar extern void ReadTemperatureFromDS18B20 extern int xdata CurTempInteger 毫秒延时函数毫秒延时函数 void DelayMS uint ms 20 微秒延时函数微秒延时函数 void Delay20us HCSR04 初始化初始化 void HCSR04 Initialize 测量距离测量距离 float MeasuringDistance 测距的数值排序求平均测距的数值排序求平均 float DistanceStatistics 输出距离值到输出距离值到 LCD1602 上上 void DisplayDistanceValue float dat 将无符号的整数转成字符串 返回字符串长度 不包括将无符号的整数转成字符串 返回字符串长度 不包括 0 结束符结束符 uchar UnsigedIntToString uint value 蜂鸣器蜂鸣器 void Beep uchar time 显示温度值显示温度值 void DisplayTemperatureValue 测量距离测量距离 float MeasuringDistance 最大定时时间约最大定时时间约 65ms TH0 0 TL0 0 生成生成 20us 的脉冲宽度的触发信号的脉冲宽度的触发信号 Trig 1 Delay20us Trig 0 等待回响信号变高电平等待回响信号变高电平 while Echo TR0 1 启动定时器启动定时器 0 等待回响信号变低电平等待回响信号变低电平 while Echo TR0 0 关闭定时器关闭定时器 0 返回距离值返回距离值 mm return SPEEDSOUND XTALTIME float TH0 256 float TL0 2000 HCSR04 初始化初始化 void HCSR04 Initialize 计算单片机计数周期计算单片机计数周期 晶振晶振 11 953M单位单位 us XTALTIME 12 11 953 温度温度 25 度时声速的值度时声速的值 SPEEDSOUND 334 1 25 0 61 Trig 0 Echo 0 TMOD 0 x01 输出距离值到输出距离值到 LCD1602 上上 void DisplayDistanceValue float dat uchar i 0 j 0 len uint value value uint dat 范围检查大于范围检查大于 4000mm 和小于和小于 20mm 都为超出测量范围都为超出测量范围 if value 4000 LCD Display String Prompts 1 0 x00 LCD Display String Prompts 2 0 x40 Beep 2 else if value 20 LCD Display String Prompts 1 0 x00 LCD Display String Prompts 3 0 x40 Beep 2 else 将数值转换成字符串将数值转换成字符串 len UnsigedIntToString value 保留保留 1 位小数位小数 while stringBuf i 0 if len j 1 DistanceText 6 j j else DistanceText 6 j stringBuf i i j DistanceText 6 j c j DistanceText 6 j m i 7 j 剩余位置补空格剩余位置补空格 while i 16 DistanceText i i LCD Display String Prompts 0 0 x00 LCD Display String DistanceText 0 x40 显示温度值显示温度值 void DisplayTemperatureValue TemperatureText 13 CurTempInteger 10 0 TemperatureText 14 CurTempInteger 10 0 TemperatureText 15 C LCD Display String TemperatureText 0 x00 将无符号的整数转成字符串 返回字符串长度将无符号的整数转成字符串 返回字符串长度 uchar UnsigedIntToString uint value uchar i 0 t length 从个位开始转换从个位开始转换 do stringBuf i 0 value 10 value value 10 i while value 0 length i 将字符串颠倒顺序将字符串颠倒顺序 for i 0 i length 2 i t stringBuf i stringBuf i stringBuf length i 1 stringBuf length i 1 t stringBuf length 0 return length 蜂鸣器蜂鸣器 void Beep uchar time uchar i for i 0 i 100 i BEEP BEEP DelayMS time BEEP 0 DelayMS 100 延时函数延时函数 毫秒毫秒 12 000MHz void DelayMS uint ms uchar i j while ms nop i 2 j 239 do while j while i 延时函数延时函数 20 微秒微秒 12 000MHz void Delay20us uchar i nop i 7 while i 定时器定时器 0 中断中断 void Timer0 interrupt 1 DS18B20 代码 代码 程序功能 程序功能 DS18B20 温度检测程序温度检测程序 单片机型号 单片机型号 STC89C52 12MHz 晶振 晶振 12Mhz 包含头文件包含头文件 include include 宏定义宏定义 define ucharunsigned char 无符号无符号 8 位位 define uint unsigned int 无符号无符号 16 位位 定义定义 DS18B20 端口端口 DS18B20 DQ sbit DS18B20 DQ P3 7 当前采集的温度值整数部分当前采集的温度值整数部分 int xdata CurTempInteger 当前采集的温度值小数部分当前采集的温度值小数部分 int xdata CurTempDecimal 功能 延时函数功能 延时函数 STC89C52 12MHz 12T 模式模式 参数 无参数 无 返回 无返回 无 void Delayus uint count while count 功能 功能 DS18B20 复位及状态检测复位及状态检测 参数 无参数 无 返回 返回 0 或或 1 1 表示未准备好 表示未准备好 0 表示准备好表示准备好 uchar Reset DS18B20 uchar status DS18B20 DQ 1 Delayus 1 开始复位过程开始复位过程 DS18B20 DQ 0 数据线拉低数据线拉低 Delayus 100 延时延时 480us 960us DS18B20 DQ 1 数据线拉高数据线拉高 Delayus 10 延时延时 15us 60us status DS18B20 DQ 读取数据线上的状态读取数据线上的状态 Delayus 120 return status 功能 写一字节到功能 写一字节到 DS18B20 中中 参数 参数 dat 数据数据 返回 无返回 无 void WriteByteToDS18B20 uchar dat uchar i for i 0 i 1 准备下一位数据准备下一位数据 功能 从功能 从 DS18B20 中读一字节中读一字节 参数 无参数 无 返回 读取的数据返回 读取的数据 uchar ReadByteFromDS18B20 uchar i dat 0 for i 0 i 1 DS18B20 DQ 1 释放总线 准备读释放总线 准备读 1 位数据位数据 Delayus 2 延时延时 4us if DS18B20 DQ dat 0 x80 合并每位数据合并每位数据 Delayus 15 延时延时 60us DS18B20 DQ 1 拉高总线 准备读下拉高总线 准备读下 1 位数据位数据 return dat 功能 读取温度值并转换成有符号的数值形式功能 读取温度值并转换成有符号的数值形式 参数 无参数 无 返回 无返回 无 void ReadTemperatureFromDS18B20 uchar flag 0 正负符号标志正负符号标志 存储当前采集的温度值存储当前采集的温度值 uchar TempValue 0 0 if Reset DS18B20 CurTempInteger 255 CurTempDecimal 0 else WriteByteToDS18B20 0 xCC 跳过跳过 ROM 命令命令 WriteByteToDS18B20 0 x44 温度转换命令温度转换命令 Reset DS18B20 复位复位 WriteByteToDS18B20 0 xCC 跳过跳过 ROM 命令命令 WriteByteToDS18B20 0 xBE 读取温度暂存器命令读取温度暂存器命令 TempValue 0 ReadByteFromDS18B20 先读低字节温度值先读低字节温度值 TempValue 1 ReadByteFromDS18B20 后读高字节温度值后读高字节温度值 Reset DS18B20 复位复位 计算温度值计算温度值 先进行正温度与负温度判断 高先进行正温度与负温度判断 高 5 位全为位全为 1 0 xF8 则为负数 则为负数 if TempValue 1 TempValue 0 TempValue 0 1 if TempValue 0 0 x00 TempValue 1 flag 1 负数标志负数标志 将温度值分为整数和小数两部分存储将温度值分为整数和小数两部分存储 默认为默认为 12 位精度位精度 CurTempInteger TempValue 1 if flag CurTempInteger CurTempInteger CurTempDecimal TempValue 0 LCD1602 程序代码 程序代码 程序功能 程序功能 1602 液晶显示程序液晶显示程序 单片机型号 单片机型号 STC90C160 12MHz 1602 液晶显示器控制端口分配 数据使用液晶显示器控制端口分配 数据使用 P0 端口端口 sbit LCD RS P2 6 sbit LCD RW P2 5 sbit LCD EN P2 7 功能 毫秒级延时函数功能 毫秒级延时函数 参数 参数 ms 毫秒数值毫秒数值 返回 无返回 无 void LCDDelay uint ms uchar i j while ms nop i 2 j 239 do while j while i 功能 功能 1602 液晶忙状态检测液晶忙状态检测 参数 无参数 无 返回 返回 0 或或 1 1 表示状态忙 表示状态忙 0 表示状态闲表示状态闲 bit LCD Busy Check bit result LCD RS 0 LCD RW 1 LCD EN 1 Delay4us result bit P0 LCD EN 0 return result 功能 功能 1602 液晶写指令液晶写指令 参数 参数 cmd 1602LCD 指令指令 返回 无返回 无 void Write LCD Command uchar cmd while LCD Busy Check LCD RS 0 LCD RW 0 LCD EN 0 nop nop P0 cmd Delay4us LCD EN 1 Delay4us LCD EN 0 功能 功能 1602 液晶写数据液晶写数据 参数 参数 dat 一个字节数据一个字节数据 返回 无返回 无 void Write LCD Data uchar dat while LCD Busy Check LCD RS 1 LCD RW 0 LCD EN 0 P0 dat Delay4us LCD EN 1 Delay4us LCD EN 0 功能 设置功能 设置 1602 液晶显示位置液晶显示位置 参数 参数 pos 位置地址值位置地址值 返回 无返回 无 void LCD Set POS uchar pos Write LCD Command pos 0 x80 功能 功能 1602 液晶初始化液晶初始化 参数 无参数 无 返回 无返回 无 void LCD Initialize Write LCD Command 0 x01 LCDDelay 5 Write LCD Command 0 x38 LCDDelay 5 Write LCD Command 0 x0C LCDDelay 5 Write LCD Command 0 x06 LCDDelay 5 功能 在功能 在 1602 液晶指定的行上显示字符串液晶指定的行上显示字符串 共两行 一行共两行 一行 16 个字符个字符 参数 参数 str 字符串指针 字符串指针 LineNo 行首地址行首地址 第一行第一行 0 x00 第二行 第二行 0 x40 返回 无返回 无 void LCD Display String uchar str uchar LineNo uchar k LCD Set POS LineNo for k 0 k 16 k Write LCD Data str k 功能 在功能 在 1602 液晶指定位置显示一个字符液晶指定位置显示一个字符 共两行 一行共两行 一行 16 个字符个字符 参数 参数 Dat 一个字符 一个字符 X 列位置列位置 0 15 Y 行位置行位置 0 1 返回 无返回 无 void LCD Display OneC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 变态心理学试题和答案
- 保定新秀考试题库及答案
- 2025年普通测量学考试题及答案
- 2025年遥感概论期末试卷及答案
- 中石化应急预案检查(3篇)
- 2025年语文拟标题的题库及答案
- 实验性操作考试题及答案
- 胜红清热胶囊免疫成分-洞察与解读
- 2025年注册会计师岗位招聘面试参考试题及参考答案
- 2025年国有企业财务专员岗位招聘面试参考题库及参考答案
- 南充市高2026届高三高考适应性考试(一诊)语文试卷(含答案)
- 临床抗生素使用课件
- 2025山东济南医学发展集团有限公司国有企业招聘22人笔试考试参考试题附答案解析
- 律师事务所保密制度和保密措施
- 物业管理费用结构分析报告
- 2025天津港保税区安全生产技术专家招聘26人笔试考试参考题库附答案解析
- 少年中国说英文版
- 国开电大《婚姻家庭法学》答案
- 道岔改道作业指导书
- 四川省2023年普通高等学校高职教育单独招生文化考试(普高类)英语试题(含答案解析)
- 制片人手册2023版制品人手册
评论
0/150
提交评论