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

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

/**程序:基于HC-SR04得超声波测距系统

*单片机型号:STC90C51612MHz

*说明:开始连续进行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*/

/*包含头文件*/

#includereg51、h

#include<intrins、h

#defineDelay4us(){_nop_();_nop_();_nop_();_nop_();}

/*宏定义*/

#defineucharunsignedchar //无符号8位

#defineuintunsignedint //无符号16位

#defineulongunsignedlong //无符号32位

/*全局变量定义*/

sbitBEEP=P1^5; //报警测量超出范围

sbitTrig=P3^4;//HC-SR04触发信号输入

sbitEcho=P3^2; //HC-SR04回响信号输出

floatxdataDistanceValue=0、0; //测量得距离值

floatxdataSPEEDSOUND; //声速

floatxdataXTALTIME; //单片机计数周期

ucharxdatastringBuf[6]; //数值转字符串缓冲

//LCD1602提示信息

ucharcodePrompts[][16]=

{

{MeasureDistance"},//测量距离

{-OutofRange-},//超出测量范围

{MAXrange400cm},//测距最大值400cm

{"MINrange2cm},//测距最小值2cm

{},//清屏

};

ucharxdataDistanceText[]=Range:;//测量结果字符串

ucharxdataTemperatureText[]=Temperature:;//测量温度值

/*外部函数声明*/

externvoidLCD_Initialize(); //LCD初始化

externvoidLCD_Display_String(uchar*,uchar);

externvoidReadTemperatureFromDS18B20();

externintxdataCurTempInteger;

voidDelayMS(uintms); //毫秒延时函数

voidDelay20us();//20微秒延时函数

voidHCSR04_Initialize();//HCSR04初始化

floatMeasuringDistance();//测量距离

floatDistanceStatistics();//测距得数值排序求平均

voidDisplayDistanceValue(floatdat);//输出距离值到LCD1602上

ucharUnsigedIntToString(uintvalue); //将无符号得整数转成字符串,返回字符串长度,不包括'\0结束符

voidBeep(uchartime); //蜂鸣器

voidDisplayTemperatureValue(); //显示温度值

/***测量距离***/

floatMeasuringDistance()

//最大定时时间约65ms

TH0=0;

TL0=0;

//生成20us得脉冲宽度得触发信号

Trig=1;

Delay20us();

Trig=0;

while(!Echo);//等待回响信号变高电平

TR0=1; //启动定时器0

while(Echo);//等待回响信号变低电平

TR0=0; //关闭定时器0

return(SPEEDSOUND*XTALTIME*((float)TH0*256+(float)TL0))/2000;//返回距离值(mm)

文档评论(0)

cyx + 关注
实名认证
内容提供者

装饰装修木工持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年05月15日上传了装饰装修木工

1亿VIP精品文档

相关文档