1.1602显示超声波测距的C语言程序和Proteus仿真图
#include"reg52.h"#include"intrins.h"#define uchar unsigned char //无符号8位#define uint unsigned int //无符号16位#define ulong unsigned long //无符号32位 sbit K1=P1^0; //按下K1后,开始测距 sbit LEDRed=P1^1; //测距指示灯,亮表示正在测距,灭表示测距完成//sbit BEEP=P1^2; //报警测量超出范围 sbit Trig=P2^5; //HC-SR04触发信号输入 sbit Echo=P2^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(); //LCD初始化 extern void LCD_Display_String(uchar *, uchar); //字符串显示 extern void (); //从DS18B20读取温度值 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 (); void main() { LCD_Initialize();//LCD1602初始化 LCD_Display_String(Prompts[0],0x00); LCD_Display_String(Prompts[5],0x40); (); //测温度 HCSR04_Initialize(); //HC-SR04初始化 while(1) { if(K1==0) { DelayMS(5); if(K1==0) { //Beep(1); while(K1==0); LEDRed=0; ();//测温度 (); if(CurTempInteger<14) CurTempInteger=14; else if(CurTempInteger>26) CurTempInteger=26; SPEEDSOUND=334.1+CurTempInteger*0.61;//计算声速 DistanceValue=DistanceStatistics(); //测距并返回距离值 DisplayDistanceValue(DistanceValue); //显示距离值 LEDRed=1; } } } }//测距的数值排序求平均 float DistanceStatistics() { uchar i,j; float disData[7],t;//连续测距 for(i=0;i<7;i++) { disData=MeasuringDistance(); DelayMS(80); }//排序 for(j=0;j<=6;j++) { for(i=0;i<7-j;i++) { if(disData>disData[i+1]) { t=disData; disData=disData[i+1]; disData[i+1]=t; } } } return (disData[2]+disData[3]+disData[4])/3; }//测量距离 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=0x01; }//输出距离值到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],0x00); LCD_Display_String(Prompts[2],0x40); //Beep(2); } else if(value<20) { LCD_Display_String(Prompts[1],0x00); LCD_Display_String(Prompts[3],0x40); //Beep(2); } else { //将数值转换成字符串 len=UnsigedIntToString(value); //保留1位小数 while(stringBuf!='\0') { if(len-j==1) { DistanceText[6+j]='.'; j++; }else { DistanceText[6+j]=stringBuf; i++; j++; } } DistanceText[6+j]='c'; j++; DistanceText[6+j]='m'; i=7+j; //剩余位置补空格 while(i<16) { DistanceText=' '; i++; } //LCD_Display_String(Prompts[0],0x00); LCD_Display_String(DistanceText,0x40); } }//显示温度值 void () { TemperatureText[13]=CurTempInteger/10+'0'; TemperatureText[14]=CurTempInteger+'0'; TemperatureText[15]='C'; LCD_Display_String(TemperatureText,0x00); }//将无符号的整数转成字符串,返回字符串长度 uchar UnsigedIntToString(uint value) { uchar i=0,t,length;//从个位开始转换 do { stringBuf='0'+value; value=value/10; i++; }while(value!=0); length=i;//将字符串颠倒顺序 for(i=0;i<(length/2);i++) { t=stringBuf; stringBuf=stringBuf[length-i-1]; stringBuf[length-i-1]=t; } stringBuf[length]='\0'; return length; }//蜂鸣器//延时函数 毫秒 @12.000MHz void DelayMS(uint ms。
2.基于61单片机的超声波测距毕业论文
[自动化]基于SPCE061A超声波测距仪设计
【摘要】超声波测距技术在当今社会生活中已有很广泛的应用,本论文在了解超声波测距原理的基础上,完成了基于时差测距原理的一种超声波测距系统的软硬件设计,其中的控制芯片是采用凌阳公司开发的SPCE061A系列单片机。论文着重介绍了SPCE061A与超声波测距模块组成的超声波测距系统的组成原理以及应用,另外也介绍了LED显示等模组的应用。该系统可广泛应用于小距离测距、机器人检测、车辆倒车雷达以及家居安防系统等应用方案。最后实际使用表明能实现基本测量。
【关键词】SPCE061A 超声波 距离测量
目 录
一、引言 4
二、凌阳SPCE061A简介 5
2.1总述 5
2.2性能 5
2.3结构概览 6
2.4 61板卡说明 7
三、系统分析与设计 9
3.1超声波测距基本原理 9
3.2系统总体方案介绍 10
四、硬件电路设计 11
4.1 超声波发射模块 11
4.2 超声波接受模块 11
4.3键盘模块 12
4.4 LED显示模块 12
4.5 超声波测距系统工作过程 14
五、以SPCE061A为核心的软件设计 15
5.1 总体设计 15
5.2 测距算法 16
5.3系统调试 18
六、系统的测试与结果分析 21
6.1 系统误差分析 21
6.2 系统测试 21
七、结束语 22
八、参考文献 23
九、致谢 24
十、附录(源程序)25
转载请注明出处众文网 » 超声波测距仪毕业论文Proteus仿真(1602显示超声波测距的C语言程序和Proteus仿真图)