超声波测距仪使用8051。

本文介绍了一种采用8051单片机的简易超声波测距仪。这种超声波测距仪可以以1厘米的精度测量2.5米以内的距离。本电路以AT89s51单片机和HC-SR04超声波换能器模块为基础。超声波模块向物体发送一个信号,然后拾取其回声并输出一个波形,其周期与距离成正比。单片机接受此信号,进行必要的处理,并在3位7段显示器上显示相应的距离。该电路在汽车停车传感器、障碍物预警系统、地形监控机器人、工业距离测量等项目中得到了广泛的应用。

HC-SR04超声波模块。

HC-SR04是为此类嵌入式系统项目设计的超声波测距模块。它的分辨率为0.3厘米,测距距离为2厘米到500厘米。它从5V直流电源工作,待机电流小于2mA。该模块发射一个超声波信号,拾取其回声,测量两个事件之间经过的时间,并输出一个波形,其高时间由测量的时间调制,与距离成正比。

HC-SR-04超声波测距模块
HC-SR04超声测距模块(FIG1)

模块上的支撑电路使得它几乎是独立的,程序员需要做的是发送触发信号来启动传输,并接收它的回波信号来计算距离。HR-SR04有四个引脚,分别是Vcc, Trigger, Echo, GND,下面详细说明。

1)VCC:5V直流电源电压连接到该引脚。

2)扳机:启动变速箱的触发信号提供给该引脚。触发信号必须是高达10uS的脉冲。当模块接收到有效的触发信号时,它会从发射器发出8个40KHz超声波脉冲。这个声音的回声由接收器拾取。

3)回声:在该引脚处,模块输出与距离成比例的高时间波形。

4)接地:地面连接到该引脚。

HC-SR04时序图。
HC-SR04时序图
HC-SR04时序图

从时序图来看,您可以看到在10US触发脉冲之后传输40kHz脉冲系,并且在更多时间后获得回声输出。只有在回声逐渐消失之后,才会给出下一个触发脉冲,并且该时间段称为周期周期。HC-SR04的循环周期不得低于50ms。根据数据表,可以使用以下等式从回波脉冲宽度计算距离。

距离cm = US / 58中的回声脉冲宽度

英寸距离= US / 148中的回声脉冲宽度

超声波测距仪采用8051-电路图。

采用单片机的超声波测距仪
超声波测距仪采用8051

超声波模块通过P3.0和P3.1引脚与单片机接口。Port0用于将8位显示数据传输到显示器,端口引脚P1.0、P1.1、P1.2用于传输对应显示单元D1、D2、D3的显示驱动信号。按钮开关S1、电容C3和电阻R9构成一个退跳复位电路。电容器C1,C2和晶体X1与时钟电路相关联。

程序。

ORG 00 h / /起源MOV焦度#附近地区/ /移动的地址附近地区焦度MOV P1, # 00000000 b / /集P1输出端口MOV P0, # 00000000 b / / P0设置输出端口CLR P3.0 / /集P3.0作为输出发送触发SETB P3.1 / /设置为接收回波MOV TMOD P3.1作为输入,# 00100000 b / /集timer1模式2汽车重载计时器主要:MOV TL1, # 207 d / /加载初始值开始计算从MOV TH1 # 207 d / /加载重载值MOV, # 00000000 b / /清除蓄电池SETB P3.0 / /启动触发脉冲驱使着DELAY1 / /让我们10触发脉冲的宽度CLR P3.0 / /结束了触发脉冲:JNB P3.1,这里/ /循环直到收到听到回声:SETB TR1 //启动timer1JNB TF1 HERE1 / /循环,直到定时器溢出(ie, 48计数)CLR TR1 / /停止计时器CLR TF1 / /清除计时器国旗1 . n:行情)/ /增量每timer1溢出JB P3.1, / /跳回到如果回声仍可用MOV R4, / /保存的价值,R4驱使着DLOOP / /调用显示循环SJMP主要/ /跳跃主循环DELAY1:MOV R6,#2D // 10uS delay LABEL1: DJNZ R6,LABEL1 RET DLOOP: MOV R5,#100D // load R5 with 100D BACK1:MOV, R4 / /加载值在R4 MOV B, # 100与100 d d / /加载B DIV AB / /隔离第一位数SETB P1.0 / /激活LED显示单元D1驱使着显示/ /调用显示子程序MOV P0, / /移动数字驱动模式为1位P0驱使着延迟/ / 1毫秒延迟驱使着延迟MOV A, B / / 1日部门移动其余MOV B, # 10 d/ /加载B 10 d DIV AB / /隔离第二位CLR P1.0 / /失效导致显示器D1 SETB P1.1 / /激活LED显示器D2驱使着显示MOV P0, / /移动数字驱动模式,第二位P0驱使着延迟驱使着延迟MOV, B / /第二师的其余部分移动到一个CLR P1.1 / /失效导致显示器D2 SETB P1.2 / /激活LED显示器D3驱使着显示MOV P0, / /移动数字驱动模式,第三位P0驱使着延迟驱使着延迟CLR P1.2 / /失效导致显示器D3 DJNZ R5, BACK1 / /重复显示循环100次RET延迟:MOV R7, # 250 d / / 1毫秒的延迟LABEL2: DJNZ R7, LABEL2 RET显示:MOVC, @A +焦度/ /获取数字驱动模式的内容在CPL / /补充数字驱动模式(见注1)RET附近地区:3 DB fh / /查找表(附近地区)从这里开始DB 06 h DB 5 bh DB 4 fh 66 h DB 6 dh DB 7 dh DB 07 h DB 7 fh DB 6跳频

关于这个项目。

程序的第一部分设置初始条件。端口0和P0rt 1设置为输出端口,分别用于发送数字驱动器模式和数字驱动器信号。端口引脚3.0为输出引脚,用于将触发信号发送给超声波模块,用于启动传输;端口引脚3.1为接收回波的输入引脚。微控制器的TMOD寄存器加载如此之多,以至于Timer 1在mode2 8位自动加载模式下工作。这里不使用单片机的定时器0。在程序的下一部分(循环MAIN)中,Timer1的TL1和TH1寄存器用初始值加载。TL1以开始计数的初始值加载,TH1以重新加载值加载。这是定时器1在模式2的工作方式:当设置TCON寄存器的TR1位时,TL1开始计数,从加载到它的初始值开始,并一直计数,直到滚动(即;255 d)。当发生滚转时,设置TF1标志,并自动加载TL1,并将TH1中存储的重新加载值加载TL1,并重复该序列,直到程序使TR1降低。 The TF1 goes high at the first roll over and if you want it as an indicator for each roll over, you have to clear it using the program after each roll over. In the next part of the MAIN loop P3.0 is set high for 10uS and then cleared to make 10uS triggering pulse. The ultrasonic module issues a 40Khz pulse wave form after receiving this trigger and the program waits until a valid echo is received at P3.1. The pulse width of the echo signal is proportional to the distance to the obstacle and so the next job of the program is to measure the pulse width. Whenever there is a valid echo pulse at P3.1, the Timer1 starts and it counts from the initial value to 255 ie: 255-207= 48 counts. Then the counter restarts and accumulator increments by one for every restart. This sequence is repeated until the echo signal at P3.1 vanishes (ie; P3.1 goes low). Now the content in A will be equal to the number of Timer1 reloads which is in fact proportional to the distance. From the datasheet it is clear that 58uS echo pulse width indicates 1cM distance. When the processor is clocked by a 12MHz crystal, 58 counts of Timer1 indicates 1cM. That means 1 reload is equal to 1cM. But here we are letting the Timer1 to count only 48 times before reload and this is done in order to compensate for the time lags caused by the branching instructions used for checking the status of P3.0 and P3.1 pins. If this trick is not done, the individual time lags caused by the branching instructions will be cumilatively added to the observed pulse width and the range finder will show a reading higher than the original distance. Some trial and error was required for getting the correct Timer1 reload value and with the 207D (ie; 48 counts) used here the error was found to be less than half a centimeter which is quite fine in this context. The next part of the program does necessary mathematics on the current content in A and displays it as 3 digit readout on the display.

笔记。

1)这里使用的LUT最初用于共同的阴极七个段显示器,并且在这里我们使用常见的阳极显示器。CPL指令只会补充所获得的数字驱动模式,并制作适用于常见的阳极方案。如果您有时间,请为常见的阳极方案进行烹饪LUT,并替换当前的使用它。由此,您可以避免额外的CPL指令,并且它是正确的方法。

2)整个电路可以由5V DC供电。

3)搬运超声波模块时要小心。在其背面制作了许多灵敏的表面贴装器件。

4)浏览这些文章:接口七段显示到8051用8051定时器延时软件延迟程序使用8051

作者

82注释

  1. Richa.

    嗨,这篇文章很有用。请帮我一下。我的工作是测量障碍物,我需要连接4hc sr04超声波测距仪和单片机At89S52。请提供电路图给我请尽快提供

  2. 乔尔

    当连接到程序包????时,这个程序是否用于对IC进行编程

  3. jay pulickal.

    好项目
    对未来增强的祝愿

  4. clemo

    你好
    你起诉什么样的节目?什么名字?
    am新的计划,但这一个似乎比其他人更容易
    谢谢

  5. clemo

    你好
    善意的语言程序

    • Rishabh

      这被称为汇编语言编程。一般用于8051。

  6. hakeeqjavid

    我只是想知道关于7赛格显示.....你已经将它们连接在.....系列中所以如果没有。在这个部分将是52,然后我认为显示器将显示88,因为你已经把它们串联在了......,让我解释一下我想澄清的内容.......如果引脚' a '在d1(前7段显示)高,那么在d2引脚' a '将高.....但是如果pin ' a '不应该高到显示no。在d2 ? ?同样地,如果电路想显示52,它将显示88 .....我认为7赛格显示器不应该是串联......,他们都应该给出一个单独的连接.....实际上7段显示不应该使用..... instead we shud use 16*2 display ……… in a readymade project given by jojo, he has used 16*2 display……. pls let me kno if im wrong or rite …….

    • 管理

      led显示器不是串联的,它们实际上是多路复用的。在电路图中显示的是显示多路led显示器的标准方法。

  7. 俯卧撑

    请你提供89c51的程序,用lcd向我提供计划

  8. neetee

    你能提供mi c代码吗

  9. 拉杰什

    花多少钱就能得到这个项目
    PLZ中小企业回复我

  10. akshith

    我可以使用AT86C51而不是AT89S51?
    请迅速回复。谢谢

    • Jojo.

      你好Akshith,

      您应该适当地进行代码的更改。您可以确定使用控制器。

  11. 引擎

    哪个软件有你在这个项目中使用的所有组件
    在哪些软件中,您已经模拟了电路

  12. 达里奥

    我在显示器上距离加倍,
    有没有办法改变这个?

  13. DD

    Plzzzz告诉我软件组装代码......

    • 伊斯兰国

      Keilsoftwrae.

  14. 约翰

    任何人都可以告诉我这个IC的型号和有多少引脚。谢谢

  15. 苏拉杰

    先生,这个项目有用吗?
    因为我正在考虑把它作为我的小项目。

  16. Shivachandran.

    此程序在MVersion中没有任何错误...但是
    它不是与套件......
    它没有产生波形FRM port3.0

  17. jayaram

    SIR PLSS与HC-SR04共享C代码接口,LCD,8051/51 PLSS SIR

  18. vinod.

    我已经把d程序烧成8951了…它发生得很正常…。wen i chckd 4在试验板上进行试验测试……根本不起作用…。。七个部分的所有部分发光……。。请帮忙……。。真的需要

    • atish

      我也面临同样的问题。我有任何解决办法请你做。Thanxl

    • atish

      我面临同样的问题。我有任何解决方案plz do rrpy。thanx.

  19. 玛吉沙阿

    我想要更多关于这个主题的信息,我也想修改dis项目,所以请帮助我的dis..谢谢你

  20. shubham

    我可以用7805 IC的9v直流电池吗

  21. 湿婆

    在上面的电路中x1是什么?

    • Seetharaman

      它是一种额定频率为11.0592 MHz的晶体

  22. Prerak

    我想要这个电路的框图...

  23. 尼桑斯

    这段代码可以直接刻录到8051吗?这段代码是否需要修改?我这样做是为了我的小项目。请尽快帮助

    • 特鲁帕尔

      是的,你不能使用程序集文件刻录

    • 俯卧撑

      嘿,我也为我的迷你项目做同样的事情......你可以邮寄我的8051个计划吗???请尽快回复..

  24. 爱资哈尔

    SIR PLSS与HC-SR04共享C代码接口,LCD,8051/51 PLSS SIR

  25. 马努

    plz给出了超声波传感器与8051单片机接口测量距离的C程序。

  26. vedika

    我们可以把语音芯片APR9600接口到这个项目吗?如果是,请把电路直径发给我…

  27. 萨钦

    我想要电路的设计

  28. 杰弗里塞凡座

    你好,你能给我看一下这个程序的流程图吗?谢谢

  29. Balasubramanian.

    好的计划

    • SATHIYAN.

      我很高兴感谢你的节目。你帮了我一个小项目,非常感谢。我真为你骄傲。

  30. 阿伦

    非常感谢。你在我的小项目中帮了我。

  31. 阿伦

    我现在正在研究它。希望我会得到正确的结果。谢谢帮助我。

    • Sayali

      嘿,你得到了正确的结果吗?

  32. tanima

    长官,我想知道密码在8051里会不会烧了…

    • Ritika,尼基塔

      是的,你可以。它会完美运行的。

  33. 默罕默德naseem

    非常感谢你在我的项目中帮助我,愿真主保佑你。

  34. ANKIT

    先生,如果我将此代码转换为十六进制文件并刻录到8051,因为闪光灯可以工作,请帮助我先生

  35. ANKIT

    这段代码准备好在8051刻录请帮助我

  36. ANKIT

    在这个我们需要eeprom文件或不是,或这个代码是完整的或不是,或它是一个例子

  37. sunanth

    请告诉我HC-SR04模块的情况

  38. 埃文斯

    请给我一张图表,我可以用它来构建一个微控制器程序

  39. vinay bhat.

    不错的网站和项目......,请有人建议我一个好的网站,我可以得到更多的信息。关于这个8051 u-CONTROLLER和相关项目.....

  40. Sumit Singh.

    请用c语言上传超声接口程序

  41. 这个多少钱?我也想。我从哪里来?这台at89s51和8051 mde教练机有什么不同吗?需要尽快回应。

    • 偏爱

      这个传感器模块花了我500卢比。
      总成本约为。700卢比。(包括每个组件)

  42. 偏爱

    它的工作好…
    我对TH0$TL0的值做了一些更改,通过一些hit-n-trial我得到了它。

    • shanthveer

      嗨Deepesh,

      在测试SR04时,我可以获得负值。请帮助我进一步帮助我。

      • 偏爱

        th1和tl1加载#210d
        在“DLoop”R5中,r5装满#50d而不是#100d。

        休息在我的项目中都是一样的。
        希望它能帮助

        • 阿伦

          我用的是9v的电池,它能正常工作吗?请帮我

        • 达什梅特

          我正在获得一个持续的777读,而不是改变,你可以帮忙吗?

        • vinod.

          你能给这个项目发正确的程序吗?因为我用的是普通阳极............,我用的是GTTNG输出.........
          我烧了上面的prog ............和段的aal是发光的............需要帮助...... .pls

    • Akshay.

      你能告诉我最终TH0和TL0的值,结果是准确的吗?

      • 偏爱

        不是TH0和TL0....我们使用定时器1,因此TL1和TH1将被加载一个值。
        我使用#210d。
        在“DLoop”R5中,r5装满#50d而不是#100d。

        希望它能帮助

        • ankit.

          你好,我是ankit,请给我代码的hex文件,我做了代码的hex文件,但它没有运行,请尽快给我正确的代码

        • shubham

          为什么你要在R5上加载#50D,这有什么逻辑吗?????

  43. 罗希特

    它显示100,不随距离而波动

  44. Trinayan Baruah.

    LUT表有什么用?你能解释一下吗?

    • niranjan

      LUT表用于接口7段显示。显示与数字相对应的DB值。

  45. 罗希特

    在哪里将CPL指令算法请尽快回复

  46. saqib

    这段代码Reaady和最终会在AT89S51燃烧

  47. 安琪拉

    我只是想知道给出的上述程序是否足够,否则我必须找到用于在注释中使用的不同设备的不同程序
    尽快回复。请

  48. 萨兰

    我们如何才能在这个系统中添加报警系统??

  49. Rama Krishna

    我们还可以使用距离传感器来测量距离。使用超声波模块有什么特别之处??以及它的价格??????

    • 马苏德

      我喜欢这个项目
      我可以知道,是DIS计划足以做项目orelse我应该考虑你在注释中提到的每个设备的另一个程序
      (即,将七个段显示器接口到8051,使用8051定时器延迟,使用8051使用软件延迟例程。)
      请尽快回复我
      v需要2个项目在11-2-2013之前

      • ankit.

        我是ankit,我在8052中刻录了hex文件,但它没有运行,请尽快给正确的hex文件代码

        • 卡图巴迪

          kaatravalli.

    • 西班牙

      你说的距离传感器是什么意思?我是说什么类型的传感器?以上模块在itead工作室的成本约为2.8美元

  50. 罗伊

    非常有趣,谢谢

    • 普拉文·

      如何烧掉一个节目?使用ardino或? ?

      • Harikrishna

        有人能解释一下,回波信号的宽度是如何计算的吗?

Baidu