欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于51单片机的HCSR04超声波测距系统制作.docx

    • 资源ID:8725232       资源大小:364.35KB        全文页数:27页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于51单片机的HCSR04超声波测距系统制作.docx

    1、基于51单片机的HCSR04超声波测距系统制作基于51单片机带温度补偿的HC-SR04超声波测距系统利用从网上购买的HC-SR04超声波模块制作了一个测距装置,HC-SR04自身不带温度补偿功能,所以加上一个使用DS18B20做的温度测量模块。整个系统包括:51单片机最小系统,超声波测距模块、温度测量模块、液晶显示模块。使用了如下主要元器件:元件说明数量STC90C516RC51单片机1HC-SR04超声波测距模块1DS18B20温度测量模块1lcd1602液晶显示模块1系统电路图51单片机最小系统单片机型号:STC90C516,晶振:12Mhz。自己动手焊接的最小系统板。LCD1602A液晶

    2、显示模块:HC-SR04超声波测距模块HC-SR04超声波测距模块可提供2cm至400cm的非接触式距离感测功能,测距精度可达3mm;模块自身包括超声波发射器、接收器与控制电路。实物正反两面图HC-SR04电气参数:HC-SR04工作原理及说明:1、 给Trig触发控制信号IO端口至少10us的高电平信号;2、 模块自动发送8个40khz的方波,并自动检测是否有信号返回;3、 有信号返回时,Echo回响信号输出端口输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间;4、 两次测距时间间隔最少在60ms以上,以防止发射信号对回响信号的影响;超声波时序图单片机控制HC-SR04超声波测距

    3、说明: 原理图中,单片机的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度时,上述公式不能完全满足对测量的

    4、修正了,所以高于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个数值取

    5、平均值。完成后指示灯灭,输出结果到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_

    6、();_nop_();/*宏定义*/#define uchar unsigned char /无符号8位#define uint unsigned int /无符号16位#define ulong unsigned long /无符号32位/*全局变量定义*/sbit K1=P10; /按下K1后,开始测距sbit LEDRed=P11; /测距指示灯,亮表示正在测距,灭表示测距完成sbit BEEP=P15; /报警测量超出范围sbit Trig=P17; /HC-SR04触发信号输入sbit Echo=P16; /HC-SR04回响信号输出float xdata DistanceValue

    7、=0.0; /测量的距离值float xdata SPEEDSOUND; /声速float xdata XTALTIME; /单片机计数周期uchar xdata stringBuf6; /数值转字符串缓冲 /LCD1602提示信息uchar code Prompts16= Measure Distance, /测量距离 - Out of Range -, /超出测量范围 MAX range 400cm , /测距最大值400cm MIN range 2cm , /测距最小值2cm , /清屏 Press K1 Start /按键开始测量;uchar xdata DistanceText=Ra

    8、nge: ;/测量结果字符串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_I

    9、nitialize();/测量距离float MeasuringDistance();/测距的数值排序求平均float DistanceStatistics();/输出距离值到LCD1602上void DisplayDistanceValue(float dat);/将无符号的整数转成字符串,返回字符串长度,不包括0结束符uchar UnsigedIntToString(uint value);/蜂鸣器void Beep(uchar time);/显示温度值void DisplayTemperatureValue();/测量距离float MeasuringDistance() /最大定时时间

    10、约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;

    11、 /温度25度时声速的值 SPEEDSOUND=334.1+25*0.61; Trig=0; Echo=0; TMOD=0x01;/输出距离值到LCD1602上void DisplayDistanceValue(float dat) uchar i=0,j=0,len; uint value; value=(uint)dat; /范围检查大于4000mm和小于20mm都为超出测量范围 if(value4000) LCD_Display_String(Prompts1,0x00); LCD_Display_String(Prompts2,0x40); Beep(2); else if(value

    12、20) LCD_Display_String(Prompts1,0x00); LCD_Display_String(Prompts3,0x40); Beep(2); else /将数值转换成字符串 len=UnsigedIntToString(value); /保留1位小数 while(stringBufi!=0) if(len-j=1) DistanceText6+j=.; j+; else DistanceText6+j=stringBufi; i+; j+; DistanceText6+j=c; j+; DistanceText6+j=m; i=7+j; /剩余位置补空格 while(i

    13、16) DistanceTexti= ; i+; /LCD_Display_String(Prompts0,0x00); LCD_Display_String(DistanceText,0x40); /显示温度值void DisplayTemperatureValue() TemperatureText13=CurTempInteger/10+0; TemperatureText14=CurTempInteger%10+0; TemperatureText15=C; LCD_Display_String(TemperatureText,0x00); /将无符号的整数转成字符串,返回字符串长度u

    14、char UnsigedIntToString(uint value) uchar i=0,t,length; /从个位开始转换 do stringBufi=0+value%10; value=value/10; i+; while(value!=0); length=i; /将字符串颠倒顺序 for(i=0;i(length/2);i+) t=stringBufi; stringBufi=stringBuflength-i-1; stringBuflength-i-1=t; stringBuflength=0; return length;/蜂鸣器void Beep(uchar time)

    15、uchar i; for(i=0;i100;i+) BEEP=!BEEP; DelayMS(time); BEEP=0; DelayMS(100);/延时函数 毫秒 12.000MHzvoid DelayMS(uint ms) uchar i, j; while(ms-) _nop_(); i = 2; j = 239; do while (-j); while (-i); /延时函数 20微秒 12.000MHzvoid Delay20us() uchar i; _nop_(); i = 7; while (-i);/定时器0中断void Timer0() interrupt 1 /DS18

    16、B20代码:/*-* 程序功能: DS18B20温度检测程序* 单片机型号:STC89C52 12MHz* 晶振: 12Mhz-*/*包含头文件*/#include #include /*宏定义*/#define uchar unsigned char /无符号8位#define uint unsigned int /无符号16位/定义DS18B20端口DS18B20_DQsbit DS18B20_DQ = P37;/当前采集的温度值整数部分int xdata CurTempInteger; /当前采集的温度值小数部分int xdata CurTempDecimal;/*-* 功能:延时函数

    17、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 stat

    18、us=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); /延时

    19、4us if(DS18B20_DQ) dat|=0x80; /合并每位数据 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 WriteByteTo

    20、DS18B20(0xCC);/跳过ROM命令 WriteByteToDS18B20(0x44);/温度转换命令 Reset_DS18B20();/复位 WriteByteToDS18B20(0xCC);/跳过ROM命令 WriteByteToDS18B20(0xBE);/读取温度暂存器命令 TempValue0=ReadByteFromDS18B20();/先读低字节温度值 TempValue1=ReadByteFromDS18B20();/后读高字节温度值 Reset_DS18B20();/复位 /计算温度值 /先进行正温度与负温度判断,高5位全为1(0xF8)则为负数 if(TempVal

    21、ue1&0xF8)=0xF8) /负温度计算:取反加1,低字节为0时,高字节取反加1,否则不需要。 TempValue1=TempValue1; TempValue0=TempValue0+1; if(TempValue0=0x00) TempValue1+; flag=1;/负数标志 /将温度值分为整数和小数两部分存储(默认为12位精度) CurTempInteger=(TempValue1&0x07)4); if(flag) CurTempInteger=-CurTempInteger; CurTempDecimal=(TempValue0&0x0F)*625; / LCD1602程序代码

    22、:/*-* 程序功能:1602液晶显示程序* 单片机型号:STC90C160 12MHz-*/*1602液晶显示器控制端口分配,数据使用P0端口*/sbit LCD_RS=P26;sbit LCD_RW=P25;sbit LCD_EN=P27;/*-* 功能:毫秒级延时函数* 参数: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表示

    23、状态闲-*/bit LCD_Busy_Check() bit result; LCD_RS=0; LCD_RW=1; LCD_EN=1; Delay4us(); result=(bit)(P0&0x80); 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;D


    注意事项

    本文(基于51单片机的HCSR04超声波测距系统制作.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开