• 领导讲话
  • 自我介绍
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 当前位置: 勤学考试网 > 公文文档 > 工作汇报 > 正文

    超声波测 距仪单片机课设实验报告

    时间:2020-11-06 16:51:01 来源:勤学考试网 本文已影响 勤学考试网手机站

    微机原理与单片机系统课程设计

    评语:

    考勤10分

    守纪10分

    过程30分

    设计报告30分

    答辩20分

    总成绩(100分)

    专  业:    轨道交通信号与控制  

    班   级:   交控1305

    姓   名: 贺云鹏     

    学 号:   201310104

    指导教师:          李建国    

    兰州交通大学自动化与电气工程学院

    2015 年 12

    超声波测距仪设计

    1 设计说明

    1.1 设计目得

    超声波测距得原理就是利用超声波在空气中得传播速度为已知,测量声波在发射后遇到障碍物反射回来得时间,根据发射与接收得时间差计算出发射点到障碍物得实际距离。

    超声波测距主要应用于倒车提醒、建筑工地、工业现场等得 HYPERLINK "" \t ”_blank" 距离测量。

    超声波在气体、液体及固体中以不同速度传播,定向性好、能量集中、传输过程中衰减较小、反射能力较强。超声波能以一定速度定向传播、遇障碍物后形成反射,利用这一特性,通过测定超声波往返所用时间就可计算出实际距离,从而实现无接触测量物体距离。超声波测距迅速、方便,且不受光线等因素影响,广泛应用于水文液位测量、建筑施工工地得测量、现场得位置监控、 HYPERLINK "" \t "_blank" 振动仪车辆倒车障碍物得检测、移动机器入探测定位等领域。

    1。2 设计方法

    本课题包括数据测距模块、显示模块。测距模块包括一个HC-SR04超声波测距模块与一片AT89C51单片机,该设计选用HC-SR04超声波测距模块,通过HC-SR04发射与接受超声波,使用AT89C51单片机对超声波进行计时并根据超声波在空气中速度为340米每秒得特性计算出距离。显示模块包括一个4位共阳极LED数码管与AT89C51单片机,由AT89C51单片机控制数码管动态显示距离、

    1、3 设计要求

    采用单片机为核心部件,选用超声波模组,实现对距离得测量,测量距离能够通过显示输出(LED,LCD)。

    2 设计方案及原理

    2.1超声波测距模块设计

    HC—SR04超声波测距模块可提供2cm-400cm得非接触式距离感测功能,测距精度可达高到3mm。模块包括超声波发射器、接收器与控制电路、当提供一个10uS以上正脉冲触发信号,该模块内部将发出8个40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号得脉冲宽度与所测得距离成正比、由此通过发射信号到收到得回响信号时间间隔可以计算得到距离

    由以上信息,在设计时选用两个定时器,定时器1用来定时800ms,当产生中断时,启动HC—SR04超声波测距模块,即给其TRIG(发射)口送一个持续20ms得正脉冲,定时器0用来对超声波传递时间进行计时,即当ECHO(回波)口为高电平时启动计时,当ECHO口变为低电平时关闭计时、再根据超声波在空气中得传播速度为340米每秒,通过AT89C51计算出距离,当距离超过400cm时,显示8888,表示超出工作距离。

    2。2 LED显示模块设计

    将算得得距离通过一个4位LED数码管采用动态扫描进行显示。

    2。3 其她功能得设计

    考虑到实际得需求,本设计还应增加以下功能:

    1、增加一个指示灯、当ECHO(回波)口为高电平时,即超声波信号在空气中传播时,指示灯点亮。当数码管不能正常点亮时,若指示灯正常指示,则说明LED显示模块发生故障;若指示灯不能正常点亮,则说明超声波测距模块发生故障。

    2、 增加一个锁存按钮。由于设计时我们设计得为每800ms超声波测距模块启动一次,由于定时器会产生误差,造成测得距离不断变化,增加一个锁存按钮,当确定显示结果稳定时,按下按钮时,关闭超声波测距模块,可以使结果清楚显示。

    3、增加一个待机按钮。当按下锁存按钮后,再按下待机按钮,这时关闭LED显示,若再打开待机按钮,这时LED启动工作,显示得数值为上一次被测距离、

    2、4 设计成本及定价

    成本:1、HC-SR04超声波测距模块1个3、3元

        2、AT89C51单片机1个2.5元

          3、四位LED数码管1个1、5元

        4、晶振1个0.17元

        5、电路板1个0、57元

       6、其她开关、电阻及电容总计0、5元

    总计:8。54元

    市场平均价格:12元

    预计定价:10元

    利润:1、46元

    3 硬件设计

    此系统得硬件设计主要包括HC—SR04超声波测距模块、AT89C51单片机、4位LED显示模块,并连入指示灯、待机开关与锁存开关。

    仿真时,将HC-SR04超声波测距模块用一个555延时电路来代替即可,其中调节改变滑动变阻器得阻值可以模拟被测物体距离得变化、实验仿真电路图如图1所示。

    图1 设计硬件电路图

    4 软件设计

    此系统得软件设计主要包括超声波测距模块设计、LED显示模块设计、与其她拓展模块。采用定时器1每800ms发射一个脉冲信号启动超声波测距模块,采用定时器0计算超声波传播时间,并通过一个计算函数算得距离,然后送LED显示屏进行动态扫描并显示结果、

    4.1 程序流程图

    主程序流程图如图2所示、

    图2 程序流程图

    4、2程序

    基于AT89C51单片机得超声波测距源程序见附录一、

    5 系统仿真及调试结果

    基于AT89C51单片机得超声波测距仿真结果见附录二。

    基于AT89C51单片机得超声波测距调试结果如图3所示、

    图3 系统程序调试结果

    6 总结

    本设计通过对超声波测距得研究,与单片机结合,实现了超声波测距得目标,并增加了数据锁存、指示灯与待机得功能。仿真时由于软件中没有HC-SR04模块,因此用555延时电路来代替。

    通过这次课程设计,我加深了对单片机得理解,也为以后更好得运用打下了基础。最后要感谢李老师得指导,在李老师得耐心解答下,我受益匪浅。

    参考文献

    [1] 李积英.数字电子技术、中国电力出版社,2011

    [2] 深圳市捷什科技有限公司。HC-SR04超声波测距模块说明书。

    [3] 彭江、单片机原理及接口技术得开发[J]、软件导刊,2011,12(8):66-70.

    [4] 王思明。张金敏。苟军年.张鑫、杨乔礼、单片机原理及应用系统设计。科学出版社。2012

    附录一:实验源程序

    #include<reg51。h〉

    #define uchar unsigned char

    #define uint unsigned int  

    #define LED_port P0  ? //用于LED段选

    #define LED_pos P1 ?  //用于LED位选

    sbit =P2^6; ?   //待机按钮

    sbit suocun=P2^1; //锁存结果

    sbit RX=P1^4; //回波

    sbit TX=P1^5;? //送波

    sbit D1=P3^7;         //接收指示灯

    uint time=0; //定时器0时间

    uint timer=0;? ? //定时器1时间

    unsigned long S=0;   //用于显示最后计算得到得距离

    unsigned long W[2]={0,0}; //用于比较两次测算距离大小 

    bit flag =0; ? //定时器0中断溢出标志位

    uchar value[4];

    uchar code LED_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管段选

    uchar code pos[4]={0x01,0x02,0x04,0x08};? ? //数码管位选

    /********************************************************/

    void Delay(uchar t)   //延时函数

       uchar i,j,k;

      for(i=0;i<t;i++)

       for(j=0;j<20;j++)

     for(k=0;k<20;k++);

    /********************************************************/

    void value_shift(uchar value[])          //将距离值得每一位放到数组中

    {

       value[0]=S/1000;

     value[1]=S/100%10;

    value[2]=S/10%10;

    value[3]=S%10;

    }

    /********************************************************/

    void Display(uchar value[])      //数码管显示

    {

     uchar i;

       for(i=0;i〈4;i++)

      {  

      LED_pos=pos[i];          

        LED_port=LED_seg[value[i]];

        Delay(1);

     }

    /********************************************************/

    void zd3()  interrupt 3 //T1中断用来扫描数码管与计800MS启动模块

    {                 //这就是计时器1中断

      TH1=0xf8;             //赋初值,2ms

    ?TL1=0x30;

    ?timer++;

    ?if(timer〉=400)

    {

    ?  timer=0;

    TX=0; ?     //800MS 启动一次模块

    //Delay(30);       //一次超声波信号时长30ms,仿真时只需加负脉冲,故屏蔽此句

    TX=1;

    ?}

    }

    /********************************************************/

    void zd0() interrupt 1 ? //T0中断用来计数器溢出

    {

       flag=1; ?  //中断溢出标志

    /********************************************************/

    void Count(void) //计算程序

    {

    ?time=TH0*256+TL0;   //这就是最后算到得时间,往返时间,但应该再乘以12/11.0593M就是一个机器周期,时间应该就是time*12/11。059

    ?TH0=0;             //定时器0得初始值为0

    TL0=0;

    S=(time*1、845)/10;    //算出来就是mm,time*12*170/(11。0592*1000)mm=time*(1845/10000) mm

    W[0]=S; ?

    if(((W[0]-W[1])^2)<=100) //进行校正,若两次结果相差小于10mm,则采用前一次结果

    ?   S=W[1];

    ?else

    W[1]=S;

    if (S>=4000)  //最大距离4m,即4000mm

    ?S=8888;

    if (flag==1)   //判断就是否溢出

    ?   S=8888;

    ?flag=0;

    TH0=0;

    ? TL0=0;

    }  

    /********************************************************/

    void  main( void  )

    {

    TMOD=0x11;?   //设T0为方式1,T1为方式1

    TH0=0;     //中断0初始化

    ?TL0=0;  //中断1初始化

    TH1=0XF8;

    ?TL1=0X30;       

    ET0=1;  //允许T0中断

    ET1=1;

    TR1=1;

    ?=1;

    suocun=0;

    ?EA=1;

      ?while(1)

    ?{ ?  

    ?  while(!RX)?; //当RX为零时等待,即echo为低电平

    ? TX=1;      

    TR0=1;

    ? D1=1;     //开启计数

    while(RX); //当RX为1计数并等待

    ?  TR0=0;?  //关闭计数

    D1=0;?     //关指示灯

    while(!qq) //待机按钮按下时,关总中断与位选

      EA=0;

    P1=0X00;

    ? }

    qq=1;?    

    ? Count(); //计算

      value_shift(value);

    ? Display(value); //显示

    ?  while(suocun) //当按下锁存按钮时 ,关总中断并显示

    ?  {

    ? EA=0;

      Display(value);

    EA=1;

        } 

    附录二:

    1。距离小于4m时得仿真图

    图1 距离小于4m

    2。距离大于4m时得仿真图

    图2 距离大于4m

    相关热词搜索: 实验报告 单片机 超声波 实验

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问