找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2789|回复: 0
收起左侧

单片机超声波测距介绍与程序源码分享

[复制链接]
ID:241020 发表于 2018-11-2 11:05 | 显示全部楼层 |阅读模式
超声波是指频率在20kHz以上的声波,它属于机械波的范畴。超声波也遵循一般机械波在弹性介质中的传播规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质吸收而发生衰减等。正是因为具有这些性质,使得超声波可以用于距离的测量中。随着科技水平的不断提高,超声波测距技术被广泛应用于人们日常工作和生活之中。
系统的设计主要包括两部分,即硬件电路和软件程序。硬件电路主要包括单片机电路、发射电路、接收电路、显示电路和电源电路,另外还有复位电路和LED控制电路等。我采用以AT89C51单片机为核心的低成本、高精度、微型化数字显示超声波测距仪的硬件电路。整个电路采用模块化设计,由信号发射和接收、供电、温度测量、显示等模块组成。发射探头的信号经放大和检波后发射出去,单片机的计时器开始计时,超声波被发射后按原路返回,在经过放大带通滤波整形等环节,然后被单片机接收,计数器停止工作并得到时间。温度测量后送到单片机,通过程序对速度进行校正, 结合两者实现超声波测距的功能。软件程序主要由主程序、预置子程序、发射子程序、接收子程序、显示子程序等模块组成。它控制单片机进行数据发送与接收,在一定温度下对超声波速度的校正,还有实现数据正确显示在LED上。另外程序控制单片机消除各探头对发射和接收超声波的影响。相关部分附有硬件电路图、程序流程图。

单片机源程序如下:
  1. #include "wave.h"
  2. #include "reg52.h"
  3. #include "intrins.h"
  4. #include "12864.h"
  5. #include "delay.h"

  6. sbit Trig  = P2^0;
  7. sbit Echo  = P3^2;
  8. extern uchar dis2[];
  9. extern uchar dis6[];
  10. float distance;
  11. uint succeed_flag,time,timeH,timeL,numble=0;
  12. uchar bai,shi,ge,xiaoge;
  13. void send()
  14. {
  15.         EA=0;
  16.         Trig=1;         //超声波输入端
  17.   delay_20us();   //延时20us
  18.   Trig=0;         //产生一个20us的脉冲
  19. }

  20. void receive()
  21. {
  22.            while(Echo==0); //等待Echo回波引脚变高电平
  23.                         succeed_flag=0; //清测量成功标志
  24.                         EA=1;
  25.                         EX0=1;          //打开外部中断0
  26.                         TH1=0;          //定时器1清零
  27.                         TL1=0;          //定时器1清零
  28.                         TF1=0;          //计数溢出标志
  29.                         TR1=1;          //启动定时器1
  30.                         delay(140);      //等待测量的结果
  31.                         TR1=0;          //关闭定时器1
  32.                         EX0=0;          //关闭外部中断0
  33.        
  34.                  if(succeed_flag==1)
  35.                  {   
  36.                     display3();
  37.                                 time=timeH*256+timeL+numble*65536;
  38.                                 distance=(time*1.85)/100;  //厘米
  39.                           TH1=0;
  40.               TL1=0;
  41.                     bai=(uint)distance/100;
  42.                           shi=(uint)(distance)%100/10;
  43.                           ge=(uint)(distance)%10;
  44.                           xiaoge=(uint)((distance-(uint) (distance))*100)%100/10;
  45.                          
  46.                
  47.                          
  48.                           lcd_pos(2,0);
  49.                                 lcd_wdat(' ');
  50.                           delay(5);
  51.                     lcd_wdat(0x30+bai);
  52.                           delay(5);
  53.                           lcd_wdat(0x30+shi);
  54.                           delay(5);
  55.                           lcd_wdat(0x30+ge);
  56.                           delay(5);
  57.                           lcd_wdat('.');
  58.                           delay(5);
  59.                           lcd_wdat(0x30+xiaoge);
  60.                           delay(5);
  61.                           lcd_wdat('c');
  62.                           delay(5);
  63.                           lcd_wdat('m');
  64.                           delay(300);
  65.                
  66.                  }                        
  67.                 if(succeed_flag==0)
  68.                  {  
  69.                           display();
  70.                          // display3();               //没有回波则清零
  71.                                 P1=0;                //测试灯变化
  72.                         }
  73. }

  74. //外部中断0,用做判断回波电平
  75. void exter()  interrupt 0   // 外部中断0是0号
  76. {   
  77.            timeH =TH1;    //取出定时器的值
  78.      timeL =TL1;    //取出定时器的值
  79.      succeed_flag=1;//至成功测量的标志
  80.      EX0=0;         //关闭外部中断
  81. }
  82. //****************************************************************
  83. //定时器1中断,用做超声波测距计时
  84. void timer1() interrupt 3  //
  85.     {
  86.          TH1=0;
  87.          TL1=0;
  88.                            numble++;
  89.      }
复制代码

所有资料51hei提供下载:
超声波测距.zip (58.08 KB, 下载次数: 13)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表