ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:19.13KB ,
资源ID:13604085      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13604085.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(带温度补偿的超声波测距程序Word格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

带温度补偿的超声波测距程序Word格式.docx

1、#define uchar unsigned char /无符号8位#define uint unsigned int /无符号16位#define ulong unsigned long /无符号32位/*全局变量定义*/sbit BEEP=P15; /报警测量超出范围sbit Trig=P34; /HC-SR04触发信号输入sbit Echo=P32; /HC-SR04回响信号输出float xdataDistanceValue=0.0; /测量的距离值float xdata SPEEDSOUND; /声速float xdata XTALTIME; /单片机计数周期ucharxdatast

2、ringBuf6; /数值转字符串缓冲/LCD1602提示信息uchar code Prompts16= Measure Distance, /测量距离- Out of Range -, /超出测量范围MAX range 400cm , /测距最大值400cmMIN range 2cm , /测距最小值2cm , /清屏;ucharxdataDistanceText=Range:;/测量结果字符串ucharxdataTemperatureText=Temperature:/测量温度值/*外部函数声明*/extern void LCD_Initialize(); /LCD初始化extern vo

3、id LCD_Display_String(uchar *, uchar);extern void ReadTemperatureFromDS18B20();externintxdataCurTempInteger; void DelayMS(uintms); /毫秒延时函数void Delay20us(); /20微秒延时函数void HCSR04_Initialize(); /HCSR04初始化float MeasuringDistance(); /测量距离float DistanceStatistics(); /测距的数值排序求平均void DisplayDistanceValue(fl

4、oat dat); /输出距离值到LCD1602上ucharUnsigedIntToString(uint value); /将无符号的整数转成字符串,返回字符串长度,不包括0结束符void Beep(uchar time); /蜂鸣器void DisplayTemperatureValue(); /显示温度值/*测量距离*/floatMeasuringDistance() /最大定时时间约65ms TH0=0; TL0=0; /生成20us的脉冲宽度的触发信号 Trig=1;Delay20us(); Trig=0;while(!Echo);/等待回响信号变高电平 TR0=1; /启动定时器0

5、 while(Echo);/等待回响信号变低电平 TR0=0; /关闭定时器0 return (SPEEDSOUND*XTALTIME*(float)TH0*256+(float)TL0)/2000; /返回距离值(mm)/*HCSR04初始化*/void HCSR04_Initialize() XTALTIME=12/12; /计算单片机计数周期晶振=12M单位us SPEEDSOUND=334.1+25*0.61; /温度25度时声速的值 Echo=0; TMOD=0x01;/*输出距离值到LCD1602上*/voidDisplayDistanceValue(float dat)uchar

6、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(value20)LCD_Display_String(Prompts3,0x40);elselen=UnsigedIntToString(value); /将数值转换成字符串 /保留1位小数while(stringBufi!=)if(len-j=1) Distanc

7、eText6+j=.j+;elseDistanceText6+j=stringBufi;i+;cmi=7+j; /剩余位置补空格while(i16)DistanceTexti= LCD_Display_String(DistanceText,0x40); /LCD_Display_String(Prompts0,0x00);/*显示温度值*/voidDisplayTemperatureValue()TemperatureText13=CurTempInteger/10+0TemperatureText14=CurTempInteger%10+TemperatureText15=CLCD_Dis

8、play_String(TemperatureText,0x00);/*将无符号的整数转成字符串,返回字符串长度*/ucharUnsigedIntToString(uint value)uchari=0,t,length; /从个位开始转换dostringBufi=+value%10;value=value/10;while(value!=0);length=i; /将字符串颠倒顺序for(i=0;i(length/2);i+) t=stringBufi;stringBufi=stringBuflength-i-1;stringBuflength-i-1=t;stringBuflength=r

9、eturn length;/*蜂鸣器*/void Beep(uchar time)uchari;100; BEEP=!BEEP;DelayMS(time); BEEP=0;DelayMS(100);/*延时函数毫秒 12.000MHz*/voidDelayMS(uintms)uchari, j;while(ms-) _nop_();i=2; j=239;while (-j);while (-i);/*延时函数 20微秒 12.000MHz*/void Delay20us()i=7;while (-i);/*定时器0中断*/void Timer0() interrupt 1/DS18B20代码:

10、/*-* 程序功能: DS18B20温度检测程序STC89C52 12MHz* 晶振:12Mhz-*/sbit DS18B20_DQ = P33; /定义DS18B20端口DS18B20_DQintxdataCurTempInteger; /当前采集的温度值整数部分intxdataCurTempDecimal; /当前采集的温度值小数部分/*功能:延时函数 STC89C52 12MHz 12T模式参数:无返回:无*/voidDelayus(uint count)while (-count); /*功能:DS18B20复位及状态检测参数:0或1,1表示未准备好,0表示准备好*/uchar Res

11、et_DS18B20()uchar status; DS18B20_DQ=1;Delayus(1); /开始复位过程 DS18B20_DQ=0; /数据线拉低Delayus(100); /延时480us-960us /数据线拉高Delayus(10); /延时15us-60us status=DS18B20_DQ; /读取数据线上的状态Delayus(120);return status;写一字节到DS18B20中参数:dat=数据返回:void WriteByteToDS18B20(uchardat)8; DS18B20_DQ=dat&0x01; /发送1位数据Delayus(15); /延时60us以上 DS18B20_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1