基于51单片机的超声波测距原理图
51单片机超声波测距离(带温度补偿)

超声波模块原理图:发射接收原理图PCB:51单片机原理图:软件部分C语言程序:/*=========================================================== =========调试要求:1.MCU:A T89S52芯片或AT89C522.晶振:12MHz调试注意:本程序带温度补偿,采用DS18B20测量温度1.LCD1602液晶屏有显示后,才接入超声波模块。
2.注意超声波模块电源的极性。
不清楚请参好淘宝的电路图3.没有选用频率为12MHz晶振,用了别的频率晶振,单片机定时器的测量值与发出的40KHz频率脉冲不对。
4.使用者经常误发出20KHZ脉冲当40KHZ脉冲。
(40KHz频率脉冲,周期25us,占空比为50% = 12.5us)5.如果是用开发板调超声波模块,请检查开发板上的电路是否与超声波模块的控制脚复用了, 若复用了,请通过跳线分开发板上的电路。
6如果使用的是万用板,请确定单片机的复位电路和晶振电路是否正常,同时单片机的31脚(EA)记得接高电平。
============================================================= =======*/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//===============================LCD1602接口定义=====================/*-----------------------------------------------------|DB0-----P2.0 | DB4-----P2.4 | RW-------P0.1 ||DB1-----P2.1 | DB5-----P2.5 | RS-------P0.2 ||DB2-----P2.2 | DB6-----P2.6 | E--------P0.0 ||DB3-----P2.3 | DB7-----P2.7 | 注意,P0.0到P0.2需要接上拉电阻---------------------------------------------------============================================================= */#define LCM_Data P2 //数据接口#define Busy 0x80 //用于检测LCM状态字中的Busy标识sbit LCM_RW = P0^1; //读写控制输入端,LCD1602的第五脚sbit LCM_RS = P0^2; //寄存器选择输入端,LCD1602的第四脚sbit LCM_E = P0^0; //使能信号输入端,LCD1602的第6脚//===============================超声波模块定义========================sbit RemPin =P3^2;// 接收端(这个不能修改,因为是外部中断(INT0)的引脚) sbit TxPin =P3^1;// 发射端//******************************************************************** ***//ds18b20数字温度传感器控制引脚定义sbit dq_ds18b20=P3^3;//定义控制DS18B20//******************************************************************** ***//LCD显示模块的函数声明void WriteDataLCM (uchar WDLCM);//LCD模块写数据void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模块写指令uchar ReadDataLCM (void);//LCD模块读数据uchar ReadStatusLCM (void);//读LCD模块的忙标void DisplayOneChar (uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符void DisplayListChar (uchar X,uchar Y,uchar delayms,uchar code *DData); void DisplayCursorPos (uchar X, uchar Y);void LCMInit (void);void DisplayIntData (uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu);void DisplayCharData (uchar X, uchar Y,uchar ZiFu);//******************************************************************** **//延时函数声明void delay25us_40KHz(unsigned char us);void DelayUs(uint us);void DelayMs(uint Ms);void delay_3us();//3US的延时程序void delay_8us(unsigned int t);//8US延时基准程序void delay_50us(unsigned int t);//延时50*T微妙函数的声明//******************************************************************** ***//DS18B20测温函数定义void w_1byte_ds18b20(uchar value);//向DS18B20写一个字节uchar r_1byte_ds18b20(void);//从DS18B20读取一个字节的数据void rest_ds18b20(void);//DS18B20复位程序void readtemp_ds18b20(void);//读取温度void display_temp(void);//温度显示程序//******************************************************************** ***//参数定义uint length = 0; // 测距的长度0.00Muchar flag = 0; // 测距的标志有信号接收=1uchar templ,temph;uint speed;//根据温度计算出来的声音速度uchar t_b,t_s,t_g,t_x;//从左到右分别存储温度百位,十位,个位,小数位uchar flag1;//温度正负性暂存,1为正数,0为负数const unsigned char tabl3[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x0 8,0x09,0x09};/*=========================================================== ================主程序============================================================= ================*/void main(void){uchar i;LCMInit(); //1602初始化EX0 = 1; //允许总中断中断,使能INT0 外部中断ET0 = 1;TMOD=0x11; //设定T0为16位时器,设定T1为16位时器DisplayOneChar( 0,14,'m');DisplayListChar(0,0,0, "Distanc: "); //显示字符串while(1){readtemp_ds18b20();display_temp();//显示温度for(i=0;i<20;i++){DisplayIntData(0, 13,length,5,3);//显示测量距离TH0=0x00;TL0=0x00;TR0=1; //启动定时器0EA = 1; //允许所有中断delay25us_40KHz(15); //发出脉冲信号DelayMs(200);}}}//******************************************************************** ***********//温度显示函数void display_temp(){if(flag1==1)//温度为正数时的显示程序{DisplayOneChar( 1,2,'+');}else{DisplayOneChar( 1,2,'-');}//显示温度信息DisplayOneChar( 1,0,'T');DisplayOneChar( 1,1,':');DisplayOneChar( 1,3,t_s+0x30);DisplayOneChar( 1,4,t_g+0x30);DisplayOneChar( 1,5,'.');DisplayOneChar( 1,6,t_x+0x30);//显示速度信息DisplayOneChar( 1,8,'S');DisplayOneChar( 1,9,':');DisplayOneChar( 1,10,speed/100%10+0x30);DisplayOneChar( 1,11,speed/10%10+0x30);DisplayOneChar( 1,12,speed%10+0x30);DisplayOneChar( 1,13,'M');DisplayOneChar( 1,14,'/');DisplayOneChar( 1,15,'S');}//****************************************************//读取温度void readtemp_ds18b20(void){uchar temp32;rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0x44); //启动温度转换delay_8us(2);rest_ds18b20();w_1byte_ds18b20(0xcc); //跳过读序列号的操作w_1byte_ds18b20(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度templ=r_1byte_ds18b20();temph=r_1byte_ds18b20();if((temph&0xf0))//判断温度的正负性{flag1=0;temph=-temph;templ=-templ;t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据speed=331.4-0.607*(temp32 | templ);}else//为正数{t_x=tabl3[templ & 0x0f];//计算温度的小数temp32=temph & 0x0f;temp32<<=4;templ>>=4;temp32=temp32 | templ;t_b=temp32/100%10;//计算温度的百位数据t_s=temp32/10%10;//计算温度的十位数据t_g=temp32%10;//计算温度的个位数据flag1=1;speed=311.4+0.607*(temp32 | templ);}}/*=========================================================== =========功能:在1602显示一个整数数据说明:显示一个整数数据-9999->32625. 从右至左显示数据5位:============================================================= =========*/void DisplayIntData(uchar X, uchar Y,int ZhengShu,uchar Digit,uchar XiaoShu) {uchar i=0,k=0, BCD[5]={0};if(Digit>5) Digit=5;if(ZhengShu<0){k=1;//负数示志位ZhengShu=-ZhengShu;}BCD[4] =ZhengShu / 10000; //求出万位数据ZhengShu = ZhengShu % 10000;BCD[3] =ZhengShu / 1000; //求出千位数据ZhengShu = ZhengShu % 1000;BCD[2] =ZhengShu / 100; //求出百位数据ZhengShu = ZhengShu % 100;BCD[1] =ZhengShu / 10; //求出十位数据BCD[0] =ZhengShu % 10; //求出个位数据for(i=0;i<Digit;i++)//输出显示的数值{if((i==XiaoShu)&&(0!=XiaoShu)){DisplayOneChar(X,Y-i,'.');//输出小数点Y= Y-1;}DisplayOneChar(X,Y-i,BCD[i]+0x30); //显示一个字符}if(k==1)DisplayOneChar(X,Y-1,'-');//输出负符}//****************************************************************//读一个字节uchar r_1byte_ds18b20(void){uchar i=0;uchar value= 0;for (i=0;i<8;i++){value>>=1;dq_ds18b20=0;// DQ_L;delay_3us();dq_ds18b20=1; //DQ_H;delay_8us(2);if(dq_ds18b20==1) value|=0x80;delay_8us(6); //延时40us}dq_ds18b20=1;return value;}//******************************************************************** ***********//子程序功能:向DS18B20写一字节的数据void w_1byte_ds18b20(uchar value){uchar i=0;for(i=0;i<8;i++){dq_ds18b20=1;delay_3us();dq_ds18b20=0;delay_8us(2);if (value& 0x01) dq_ds18b20=1; //DQ = 1delay_50us(1); //延时50us 以上delay_8us(2);value>>=1;}dq_ds18b20=1; //DQ = 1}//;**************************************************//ds18b20复位子程序void rest_ds18b20(void){rest:delay_3us(); //稍做延时delay_3us();dq_ds18b20=1;delay_3us();dq_ds18b20=0;// DQ_L;delay_50us(11);//480us<T<960usdq_ds18b20=1;//拉高总线delay_8us(5);if(dq_ds18b20==1){return;}delay_50us(2); //延时90usif(dq_ds18b20==1){return;}else{goto rest;}}//==============================超声波模块测试子程序================================================/*=========================================================== =========注意:是用12MHz晶振设定延时时间:x*25us 与产生40KHZ的脉冲============================================================= =======*/void delay25us_40KHz(unsigned char us){while(us--){TxPin = 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TxPin = 1;_nop_();_nop_();_nop_();_nop_();}TxPin = 1;}/*=========================================================== ==================中断程序的入口(注意:接收与发射的电平是相反的)============================================================= ==================*/void init0int() interrupt 0{uint timer_us = 0;TR0=0; //关闭定时器0timer_us =TH0*256+TL0;if(timer_us>190)timer_us=timer_us-180; //修正测距的距离if(timer_us<=735){timer_us=timer_us-96;//二次修正}if(timer_us>5059){timer_us+=29;}if(timer_us>5470){timer_us+=29;}if(timer_us>6410){timer_us+=29;}if(timer_us>7410){timer_us+=29;}if(timer_us>8410){timer_us+=29;}if(timer_us>9410){timer_us+=29;}if(timer_us>10410){timer_us+=29;}length = ((unsigned long)(speed)*timer_us)/2000;//计算长度,是扩大100倍flag = 0;EA = 0; //禁止所有中断}/*=========================================================== =========功能:在1602显示一个字符数据说明:显示一个字符数据0~256. 从左至右显示数据3位============================================================= =========*/void DisplayCharData(uchar X, uchar Y,uchar ZiFu){uchar i=0;uchar V alueBCD[3];V alueBCD[0] = ZiFu / 100; //求出百位数据ZiFu = ZiFu % 100;V alueBCD[1] = ZiFu / 10; //求出十位数据V alueBCD[2] = ZiFu % 10; //求出个位数据for(i=0;i<3;i++)//输出显示的数值{DisplayOneChar(X,Y+i,V alueBCD[i]+0x30); //显示一个字符}}/*=========================================================== ================超出测量时间============================================================= ================*/void timer0int (void) interrupt 1{TR0=0; //关闭定时器0length = 0; //超出测量时间显示示0flag = 1; //EA = 0; //禁止所有中断}/*=========================================================== ===========LCM初始化============================================================= =========*/void LCMInit(void){LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,0);DelayMs(5);WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置DelayMs(100);}/*=========================================================== =========显示光标的位置============================================================= =======*/void DisplayCursorPos( unsigned char X, unsigned char Y){X &= 0x1;Y &= 0xF; //限制Y不能大于15,X不能大于1if (X) Y |= 0x40; //当要显示第二行时地址码+0x40;Y |= 0x80; // 算出指令码WriteCommandLCM(Y, 1); //这里不检测忙信号,发送地址码}/*=========================================================== =========按指定位置显示一串字符:第X 行,第y列注意:字符串不能长于16个字符============================================================= =========*/void DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData){unsigned char ListLength;ListLength = 0;X &= 0x1;Y &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]!='\0') //若到达字串尾则退出{if (Y <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;Y++;DelayMs(delayms);//延时显示字符串}elsebreak;//跳出循环体}}/*=========================================================== =========设定延时时间:x*1us============================================================= =======*/void DelayUs(uint us){while(us--);}/*=========================================================== =========设定延时时间:x*1ms============================================================= =======*/void DelayMs(uint Ms){uint i,TempCyc;for(i=0;i<Ms;i++){TempCyc = 250;while(TempCyc--);}}//==============================LCD1602显示子程序================================================/*=========================================================== ==========写数据函数: E =高脉冲RS=1 RW=0============================================================= =========*/void WriteDataLCM(unsigned char WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 0; //延时LCM_E = 1;}/*=========================================================== =========写指令函数: E=高脉冲RS=0 RW=0============================================================= =========*/void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}/*=========================================================== =========//读数据============================================================= =========*/unsigned char ReadDataLCM(void){LCM_RS = 1;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);}/*=========================================================== =========正常读写操作之前必须检测LCD控制器状态:E=1 RS=0 RW=1;DB7: 0 LCD控制器空闲,1 LCD控制器忙。
基于51单片机超声波测距系统方案

目录摘要 (1)一. 绪论 (2)二.超声波测距的原理 (3)2.1 超声波的基本理论 (3)2.2 超声波测距系统原理 (7)三. 系统硬件的具体设计与实现 (8)3.1 系统原理和框图 (8)3.2 功能模块的设计 (8)3.2.1 单片机介绍 (8)3.2.1.1 AT89C51管脚说明 (9)3.2.1.2 AT89C51主要特性 (10)3.2.1.3芯片擦除 (11)3.2.2 超声波测距模块HC-SR04 (11)3.2.2.1 产品特点 (11)3.2.2.2 基本原理 (12)3.2.2.3 电气参数 (12)3.2.2.4 超声波时序图 (12)四. 系统软件设计 (13)1. 程序设计思路 (13)2. 程序流程图 (13)3. 程序 (14)五. 总结 (15)六. 致 (16)七. 参考文献 (17)八.附录 (18)1.原理图 (18)2.PCB图 (19)3.主程序 (19)摘要基于传统的测距方法在很多特殊场合:如带腐蚀的液体,强电磁干扰,有毒等恶劣条件下,测量距离存在不可克服的缺陷,超声波测距能很好的解决此类的问题。
本系统主要以AT89C51单片机为核心,结合超声波测距模块HC-SR04、数码管、蜂鸣器等硬件平台,对超声波测距系统的原理、数码管显示、单片机的应用等进行了分析和验证。
关键词:超声波测距模块,AT89C51,数码管。
AbstractIn many special occasions, traditional measuring distance methods based on the existence of insurmountable distance measuring defects, such as the measurement of corrosion in the liquid with strong electromagnetic interference, toxic and other adverse conditions. The ultrasonic range can be a very good solution to the problem. This system mainly uses AT89C51 microcontroller as the core,hardware platform combined with the HC-SR04 ultrasonic ranging module,digital tube,buzzer etc. Analyzed and validated the principle of ultrasonic ran,d igital tube’s display,the application of single-chip microcomputer etc.Keywords: ultrasonic ranging module,AT89C51,Digital tube.一. 绪论随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。
基于51单片机超声波测距仪

个性化实验基于51单片机超声波测距器设计摘要传统的测距方法存在不可克服的缺陷。
例如,液面测量就是一种距离测量,传统的电极法是采用差位分布电极,通过给电或脉冲来检测液面,电极由于长期浸泡于水中或其他液体中,利用超声波测量距离就可以解决这些问题,因此超声波测量距离技术在工业控制、勘探测量、机器人定位和安全防范等领域得到了广泛的应用。
本设计以STC89C52单片机为核心控制定时器产生超声波脉冲并计时,计算超声波自发射至接收的往返时间,从而得到实测距离。
并且在数据处理中采用了温度补偿对声速进行调整,用1602液晶显示速度和测量距离。
整个硬件电路有超声波电路、电源电路、显示电路等组成。
个探头的信号经单片机综合分析处理,实现超声波测距器的功能。
在此基础上设计了系统的总体方案,最后通过硬件和软件实现了测距功能。
此系统具有易控制、工作可靠、测距准确度高、可读性强和流程清晰等优点,即过系统扩展和升级,可以有效的解决汽车倒车,建筑施工工地以及一些工业现场的位置监控。
关键词:STC89C52;超声波;温度补偿;测距目录绪论 (4)设计目的和意义 (4)设计任务和要求 (4)系统方案设计 (5)设计原理 (5)设计框图 (5)主要元器件介绍 (6)STC89C52 (6)LCD1602液晶显示器 (7)HC-SR04超声波模块 (8)DS18B20温度传感器 (10)系统硬件结构设计 (11)单片机电路 (11)LCD显示电路 (11)温度补偿电路 (12)电源电路 (12)系统软件设计 (13)主程序流程 (13)测距流程图 (14)测试 (15)测试结果 (15)误差分析 (15)总结 (16)附录 (17)整体电路图 (17)PCB布线图 (18)实物图........................................................................................................错误!未定义书签。
基于51单片机的超声波测距

本系统由51单片机及相关外围电路构成,系统由单片机系统、发射电路与接收放大电路和显示电路几部分组成。
测距范围:25CM到250CM之间。
误差:1%。
距离显示:用三位LED 数码管进行显示(单位是CM)。
该接收电路结构简单,性能较好。
硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波接收电路三部分。
单片机采用AT89C2051。
采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。
单片机用P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.6端口监测超声波接收电路输出的返回信号。
显示电路采用简单实用的3位共阳LED数码管,段码输出端口为单片机的P1口,位码输出端口分别为单片机的P3.2、P3.1、P3.0口,数码管位驱运用PNP三极管S9012三极管驱动。
超声波发射、接收电路如图。
超声波发射部份由电阻R2及超声波发送头T40板成;接收电路由BG1、BG2X组成的两组三级管放大电路组成;检波电路、比较整形电路由C7、D1、D2及BG3组成。
40kHz的方波由A T 8 9 C 2 0 5 1单片机的P 3 .5驱动超声波发射头发射超声波,经反射后由超声波接收头接收到40kHz的正弦波,由于声波在空气中传播时衰减,所以接收到的波形幅值较低,经接收电路放大,整形,最后输出一负跳变,输入单片机的P3脚。
该测距电路的40kHz方波信号由单片机A T 8 9 C 2 0 5 1 的P 3 .5发出。
方波的周期为1/40ms,即25µs,半周期为12.5µs。
每隔半周期时间,让方波输出脚的电平取反,便可产生40kHz 方波。
由于单片机系统的晶振为12M晶振,因而单片机的时间分辨率是1µs,所以只能产生半周期为12µs或13µs的方波信号,频率分别为41.67kHz和38.46kHz。
本系统在编程时选用了后者,让单片机产生约38.46kHz的方波。
基于51单片机的超声波测距仪

控制
定时器 计时器
接收检测
超声波 发射器
超声波 接收器
显示器
图 3 超声波测距原理框图
3.1 单片机系统及显示电路 单片机采用 STC89C5。5 采用 11.0592MHz高精度的晶振,以获得较稳定的时
钟频率,减小测量误差。单片机用 P1.0 端口输出超声波转化器所需的 40KHz方 波信号,利用外中断 0 口检测超声波接受电路输出的返回信号。 显示电路采用简 单实用的 LCD1602液晶显示电路,用 P0 做为数据口。单片机系统及显示电路如 图 4 所示。
机电信息工程学院
For personal use only in study and research; not for commercial use
单片机系统课程设计报告 For personal use only in study and research; not for commercial use
图 4 单片机及显示电路原理图
3.2 超声波发射电路 超声波发射电路原理图如图 5 所示。
图 5 超声波发射电路原理图
压电超声波转换器的功能: 利用压电晶体谐振工作。 内部结构图 6 所示,它 有两个压电晶片和一个共振板。 当它的两极外加脉冲信号, 其频率等于压电晶片
的固有振荡频率时, 压电晶片将会发生共振, 并带动共振板振动产生超声波, 这 时它就是一超声波发生器 ; 如没加电压,当 共振板接受到超声波时,将压迫压电振荡 器作振动,将机械能转换为电信号,这时 它就成为超声波接受转换器。超声波发射 转换器与接收转换器其结构稍有不同。
器收到反射波就立即停止计时。超声波在空气中的传播速度为
340m/s,根据计
时器记录的时间 t ,就可以计算出发射点距障碍物的距离 (s) ,即:s=340t/2 。
推荐-51单片机的超声波测距 非常详细已处理 精品

基于51单片机的超声波测距毕业非常详细目录目录1摘要 2第1章超声波测距系统设计 31.1 超声波测距的原理 31.2超声波测距系统电路的设计 31.2.1 总体设计方案 31.2.2发射电路的设计 41.2.3接收电路的设计 51.2.4显示模块的设计 61.3超声波测距系统的软件设计71.4本章小结9第2章绪论102.1 课题背景,目的和意义 102.2两种常用的超声波测距方案102.2.1基于单片机的超声波测距系统102.2.2基于CPLD的超声波测距系统112.3课题主要内容12第3章超声波传感器133.1超声波传感器的原理与特性13 3.1.1原理133.1.2特性143.2超声波传感器的检测方式153.3超声波传感器系统的构成163.4本章小结17第4章 AT89C51单片机简介184.1单片机基础知识184.1.1单片机的内部结构184.1.2单片机的基本工作原理204.2单片机的分类及发展214.3单片机AT89C51的特性224.4本章小结25第5章电路调试及误差分析265.1电路的调试265.2系统的误差分析265.2.1声速引起的误差 265.2.2单片机时间分辨率的影响27 5.4本章小结28结论29致谢30参考文献31附录1 31附录2 36附录3 38摘要超声波具有指向性强,能量消耗缓慢,传播距离较远等优点,所以,在利用传感器技术和自动控制技术相结合的测距方案中,超声波测距是目前应用最普遍的一种,它广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。
本报告详细的介绍了超声波传感器的原理和特性,以及Atmel公司的AT89C51单片机的性能和特点,并在分析了超声波测距的原理的基础上,指出了设计测距系统的思路和所需考虑的问题,给出了以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路和软件设计方法。
该系统电路设计合理、工作稳定、性能良好、检测速度快、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求。
基于51单片机的超声波测距系统设计【毕业作品】

基于51单片机的超声波测距系统设计摘要本次系统的设计主要包括两部分,即硬件电路和软件程序。
硬件电路主要包括单片机电路、发射电路、接收电路、显示电路和电源电路等。
本次设计采用以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路。
整个电路采用模块化设计,由信号发射和接收、供电、显示等模块组成。
发射探头的信号经放大和检波后发射出去,单片机的计时器开始计时,超声波被发射后按原路返回,信号被接受电路接受,然后被单片机接收,计数器停止工作并得到时间。
软件程序主要由主程序、预置子程序、发射子程序、接收子程序、显示子程序等模块组成。
它控制单片机进行数据发送与接收,实现数据正确显示在数码管上。
另外程序控制单片机消除各探头对发射和接收超声波的影响。
相关部分附有硬件电路图、程序流程图。
实际的环境对超声波有很大的影响,如外部电磁干扰电源干扰信道干扰等等,空气的温度对超声波的速度影响也很大,此外供电电源也会使测量差生很大的误差。
由于知识面有限,作品还有许多可以改进的地方,希望在日后的学习中能将作品完善的更好。
关键词:AT89C51;超声波;测距51 MCU-based Ultrasonic Ranging System DesignAbstractThe system's design includes two parts, namely the hardware circuit and software program.The hardware circuit includes a microcontroller circuit, the transmitting circuit, the receiving circuit, display circuit and the power supply circuit. The design uses AT89C51 microcontroller as the core of low-cost, high-precision, miniaturization of digital hardware circuit of the ultrasonic range finder. The entire circuit is modular in design, by the signal transmitter and receiver, power supply, display modules. Transmitted probe signal is amplified and detector were launched out single-chip timer is started, the ultrasonic was launched after the original way back, a signal is accepted by a receiving circuit, then MCU receives the counter stop working and time. Software program from the main program, preset subroutine emission subroutine, receive subroutine, subroutines modules. It microcontroller to send and receive data, data display correctly in the digital control. In addition, program-controlled microcontroller to eliminate the impact of the probe for transmitting and receiving ultrasonic waves. With relevant parts of the hardware circuit diagram, process flow chart.Actual environment has a great influence on the ultrasonic waves, such as an external electromagnetic interference power interfering channel interference, etc., the temperature of the air is also a great influence on the speed of the ultrasonic addition, the power supply to the measured differential raw large errors. Due to the limited knowledge, works there are many areas for improvement, can work better in the future study.Keywords: AT89C51;Ultrasonic;Ranging目录1.绪论 (1)1.1课题背景及重要意义 (1)1.2 研究内容 (2)1.3主要任务及目标: (2)2.整体设计思路 (3)2.1硬件整体设计 (3)2.2软件整体设计思路 (5)3.硬件设计 (5)3.1对超声波的认识 (5)3.2器材的选择 (6)3.3.单片机最小系统 (9)3.4超声波发射电路 (10)3.5超声波接收电路设计 (11)3.6显示电路设计 (13)4.软件设计 (14)4.1主程序设计 (14)4.2中断处理程序 (17)4.3计算及显示模块设计 (19)4.4作品展示: (21)5.设计总结 (21)参考文献 (22)谢辞 (24)系统整体电路图 (25)程序代码 (26)1.绪论1.1课题背景及重要意义近年来,随着电子测量技术的发展,运用超声波作出精确测量已成可能。
基于51单片机的超声波测距模块

基于51单片机的超声波测距模块By 黄阿阿阿厉第1章HC-SR04超声波测距模块说明1.1 产品特点HC-SR04超声波测距模块能提供2~400cm的非接触式距离感测功能,测量精度可以达到3mm;该模块包括超声波发射器、接收器与控制电路。
1.2 产品介绍HC-SR04模块实物如图1.1所示,引脚如图所示,从上到下分别为VCC,Trig,Echo和GND。
VCC,GND连接电源,Echo和Trig连接51单片机的引脚。
图1.1 HC-SR04模块实物图HC-SR04超声波电气参数如表1.1所示。
表1.1 HC-SRO4电气参数HC-SRO4超声波模块的时序图如图1.2所示。
图1.2 HC-SRO4的时序图HC-SR04的实物规格如图1.3所示。
图1.3 模块尺寸1.3 注意事项HC-SR04超声波模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。
使用该模块测距时,被测物体的面积不少于0.5平方米平面。
且平面要求尽量平整,否则会影响测量的结果。
1.4 模块分析根据时序图可以知道,只需通过单片机向模块的Trig端提供一个10us以上的脉冲出发信号,该模块内部将会发出8个40KHz的脉冲,并开始检测回波。
一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。
通过检测开始发射信号到收到回响信号的时间间隔,就可以计算得到距离。
根据时序图,这样的方式可能会存在误差,即误差是声音在空气的传播速度并不固定,虽然有一个标准的声速值V=340m/s,但是实际的声速并不固定,所以计算出来的数值在不同的地区会存在差异。
因为资料不足,这里我有一个猜测。
Echo输出电平置零的时刻应该是模块不再接受到回波信号的那一刻,这样,官方提供的计算方法才能说得通。
第2章程序和说明2.1 硬件平台说明本次测试使用的硬件平台,是手创科技提供的51单片机开发板,使用的单片机型号是STC89C52RC。