找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 37930|回复: 78
打印 上一主题 下一主题
收起左侧

Proteus超声波测距仿真电路图+单片机源程序

  [复制链接]
跳转到指定楼层
楼主
ID:236171 发表于 2020-4-1 00:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大多数人感觉超声波测距proteus仿真是无法实现的,虽然proteus自带的库有GUR03和SRF04两种模型,但是却与实际传感器使用方法相差甚远,即使求助度娘也很难找到简单易懂的教程。



之前很多人想做超声波测距仿真但都没有找到很好的办法去实现,在软件里没有这样的元件,有人用一个按键开关去模拟仿真,这样仿真出来的效果,非常不好。还有人用555时基电路产生一个延时信号(555电路作为超声波仿真的内部元件),来模拟超声波头发送后遇到回波返射回来的这阶段时间,来对单片机超声波测距单片机系统进行模拟,能完成对超声波测距模块大致仿真,但需要繁杂的设计。

下面是一个超声波测距模块的proteus模型,能直接用于proteus仿真,且使用方法与实际传感器几乎一致,模型如下图。楼主千辛万苦终于完成了仿真,分享交流一下,请大家不啬赐教!

(library文件见附件)

下面是仿真效果:


单片机程序代码:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <LCDcmd.h>

  4. #define Delay4us(){_nop_();_nop_();_nop_();_nop_();}

  5. sbit LEDRed=P2^4;        //测距指示灯,亮表示正在测距,灭表示测距完成
  6. sbit Trig=P1^7;                //HC-SR04触发信号输入
  7. sbit Echo=P1^6;                //HC-SR04回响信号输出

  8. float DistanceValue=0.0;        //测量的距离值
  9. float SPEEDSOUND;                                //声速

  10. //延时函数 20微秒 @12.000MHz
  11. void Delay20us()
  12. {
  13.         uchar i;
  14.         _nop_();
  15.         i = 7;
  16.         while (--i);
  17. }


  18. //测量距离
  19. float MeasuringDistance()
  20. {
  21.         //最大定时时间约65ms
  22.         TH0=0;
  23.         TL0=0;
  24.         
  25.         //生成20us的脉冲宽度的触发信号
  26.         Trig=1;                                
  27.         Delay20us();
  28.         Trig=0;

  29.         //等待回响信号变高电平
  30.         while(!Echo);        
  31.         TR0=1;                //启动定时器0

  32.         //等待回响信号变低电平
  33.         while(Echo);               
  34.         TR0=0;                //关闭定时器0

  35.         //返回距离值(mm)
  36.         return (SPEEDSOUND*(TH0*256.0+TL0))/2000;
  37. }

  38. //HCSR04初始化
  39. void HCSR04_Initialize()
  40. {

  41.         SPEEDSOUND=334.1+25*0.61;                                
  42.         Trig=0;        
  43.         Echo=0;
  44.         TMOD=0x01;
  45. }

  46. //测距的数值排序求平均
  47. float DistanceStatistics()
  48. {
  49.         uchar i;
  50.         float disData;
  51.         for(i=0;i<7;i++)          //连续测距
  52.         {
  53.                 disData+=MeasuringDistance();        
  54.                 delay(1);        
  55.         }
  56.         return disData/7.0;
  57. }

  58. void main()
  59. {

  60.         LcdInitiate();//1602初始化
  61.         HCSR04_Initialize();//HC-SR04初始化
  62.         while(1)
  63.         {
  64.                 DistanceValue= DistanceStatistics()        ;
  65.                 display_val((int)DistanceValue,0x45);//显示距离值
  66.                 delay(1000);
  67.                 LEDRed=~LEDRed;                //测距系统工作指示灯
  68.                
  69.         }
  70. }

复制代码

全部文件已打包,请自行下载(2个文件内容一样,推荐下载7z的):
7z: 7z压缩版.7z (96.58 KB, 下载次数: 269)
winrar: 超声波测距(仿真原理图+源程序).rar (102.08 KB, 下载次数: 1254)


评分

参与人数 3黑币 +72 收起 理由
15961840023 + 12 很给力!
Jeff_BlindCat + 10 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏29 分享淘帖 顶7 踩
回复

使用道具 举报

沙发
ID:446113 发表于 2020-4-1 09:02 | 只看该作者
感谢楼主奉献;好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:236171 发表于 2020-4-1 10:16 | 只看该作者
我用的软件版本是proteus 8.8 SP1,低于此版本的软件可能会打不开,现在将我的软件安装包和原理图单独发出来,以供参考。

另外,开楼时附上的源码只是main.c的内容,还有一个LCD.h的头文件,需要下载全部附件才有,否则程序是跑不起来的。


*—————————————proteus 8.8 SP1安装包—————————————————————--
百度获取
*——————————————完整原理图截图———————————————————————

回复

使用道具 举报

地板
ID:255559 发表于 2020-4-1 15:26 | 只看该作者
谢谢分享,好资料,51黑有你更精彩!!!用Proteus8.8版本,载入单片机和超声波两个不同的hex后,终于成功了,效果如下

51hei.png (129.63 KB, 下载次数: 167)

51hei.png
回复

使用道具 举报

5#
ID:687441 发表于 2020-4-1 20:47 | 只看该作者
为什么hex文件复制过去后还是会提示加载失败?
回复

使用道具 举报

6#
ID:236171 发表于 2020-4-1 22:17 | 只看该作者
fjvhhhcyxrxuv 发表于 2020-4-1 20:47
为什么hex文件复制过去后还是会提示加载失败?

不好意思,忘了写进去了,开始仿真之前,需要双击超声波传感器加载那个hex文件,跟51单片机加载hex是一样的哈
回复

使用道具 举报

7#
ID:236171 发表于 2020-4-1 22:22 | 只看该作者
补充说明:
1、楼主使用的Proteus版本是Proteus8.8 SP1,低于此版本可能打不开仿真文件,下面是安装包,如有需要请百度 Proteus8.8白菜直装版
2、超声波传感器的库文件里包含有一个hex文件,仿真时需要将其加载到超声波传感器中(操作类似于单片机加载hex文件);
3、正文所分享的代码只是MAIN.C的内容,工程文件中还有一个LCDcmd.h头文件,请自行下载附件查看。
回复

使用道具 举报

8#
ID:352458 发表于 2020-4-1 23:04 | 只看该作者
已经收藏,谢谢楼主的分享
回复

使用道具 举报

9#
ID:720750 发表于 2020-4-2 10:09 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

10#
ID:484200 发表于 2020-4-3 17:37 | 只看该作者
想要,,真的,,很需要
回复

使用道具 举报

11#
ID:687441 发表于 2020-4-3 18:39 | 只看该作者
午夜蹦迪丶 发表于 2020-4-1 22:17
不好意思,忘了写进去了,开始仿真之前,需要双击超声波传感器加载那个hex文件,跟51单片机加载hex是一样 ...

好的,谢谢楼主
回复

使用道具 举报

12#
ID:722021 发表于 2020-4-4 14:31 来自手机 | 只看该作者
大哥 可不可以分享 想问问一些关于超声波的仿真知识
回复

使用道具 举报

13#
ID:692635 发表于 2020-4-4 16:36 | 只看该作者
大神牛逼,小弟佩服佩服
回复

使用道具 举报

14#
ID:376311 发表于 2020-4-4 18:41 | 只看该作者
没办法,毕竟是仿真软件,只能模拟,不过功能也挺全了
回复

使用道具 举报

15#
ID:353551 发表于 2020-4-5 00:30 | 只看该作者
大家仿真的时候哦那个LCD会有显示吗,为什么LCD没显示呢
回复

使用道具 举报

16#
ID:715369 发表于 2020-4-5 14:07 来自手机 | 只看该作者
附件LCD那个怎么找,小白
回复

使用道具 举报

17#
ID:715369 发表于 2020-4-5 15:24 来自手机 | 只看该作者
internal exception access violation in module plc EX.DLL
回复

使用道具 举报

18#
ID:715369 发表于 2020-4-5 15:24 来自手机 | 只看该作者
仿真有错误,internal exception access violation in module  plc  EX.DLL
回复

使用道具 举报

19#
ID:236171 发表于 2020-4-5 16:25 | 只看该作者
冬天别来无恙 发表于 2020-4-5 15:24
仿真有错误,internal exception access violation in module  plc  EX.DLL

你好,可能是软件版本不同导致的,请尝试从库里选择新的89C52芯片进行替换,或许可以解决。
回复

使用道具 举报

20#
ID:236171 发表于 2020-4-5 16:27 | 只看该作者
KobeHuang 发表于 2020-4-4 14:31
大哥 可不可以分享 想问问一些关于超声波的仿真知识

你好,请直接提出你的问题,我会尽力提供帮助
回复

使用道具 举报

21#
ID:715369 发表于 2020-4-5 17:49 来自手机 | 只看该作者
午夜蹦迪丶 发表于 2020-4-5 16:25
你好,可能是软件版本不同导致的,请尝试从库里选择新的89C52芯片进行替换,或许可以解决。

换了一个也不行

IMG_20200405_174639.jpg (1.06 MB, 下载次数: 165)

IMG_20200405_174639.jpg
回复

使用道具 举报

22#
ID:715369 发表于 2020-4-5 18:37 来自手机 | 只看该作者
大佬,换了一个芯片还是不行
回复

使用道具 举报

23#
ID:353551 发表于 2020-4-8 14:32 | 只看该作者
COG电子 发表于 2020-4-4 18:41
没办法,毕竟是仿真软件,只能模拟,不过功能也挺全了

朋友,你好,请问你仿真的时候LCD显示了吗
回复

使用道具 举报

24#
ID:353551 发表于 2020-4-8 14:56 | 只看该作者
pengliang123 发表于 2020-4-5 00:30
大家仿真的时候哦那个LCD会有显示吗,为什么LCD没显示呢

解决了,那个软件在管理员条件下运行就OK了
回复

使用道具 举报

25#
ID:314730 发表于 2020-4-9 11:41 | 只看该作者
请教一下:这个边框是怎么画的?
回复

使用道具 举报

26#
ID:502152 发表于 2020-4-17 12:06 | 只看该作者
感谢大佬,这几天正为这焦头烂额
回复

使用道具 举报

27#
ID:731406 发表于 2020-4-17 15:41 | 只看该作者
楼主你好,我想问一下你:在你这个超声波模块仿真中,我们怎么才能看出他已经测到前面地距离了,因为我从新改了一下我的代码,智能小车需要先用超声波测距,然后系统判断距离前方障碍物的距离来做出小车如何移动的指令,但是我用你这个超声波模块仿真后,一直显示不出距离。
回复

使用道具 举报

28#
ID:236171 发表于 2020-4-18 08:37 | 只看该作者
1257627505 发表于 2020-4-9 11:41
请教一下:这个边框是怎么画的?

你好,打开软件后直接新建project会自动有这个框,标题栏里的内容也会自动更新
回复

使用道具 举报

29#
ID:111893 发表于 2020-4-18 13:12 | 只看该作者
感谢,喊着很棒,谢谢大神的分享
回复

使用道具 举报

30#
ID:733648 发表于 2020-4-21 17:38 | 只看该作者
你好,问一下我第一次打开仿真,图里面有那个Digitai Oscilloscope窗口,第二次打开就没了,应该在哪里重新打开
回复

使用道具 举报

31#
ID:733648 发表于 2020-4-21 17:40 | 只看该作者
你好,问一下第一次打开仿真图会自动出现Digital那个窗口,第二次就没了。那个窗口是干什么的,怎么才能再次打开?
回复

使用道具 举报

32#
ID:236171 发表于 2020-4-23 18:16 | 只看该作者
TX666 发表于 2020-4-21 17:40
你好,问一下第一次打开仿真图会自动出现Digital那个窗口,第二次就没了。那个窗口是干什么的,怎么才能再 ...

你好,仿真开始运行后,点击菜单栏的“debug”,下拉菜单中最后一行就是了
回复

使用道具 举报

33#
ID:742560 发表于 2020-5-1 22:55 | 只看该作者
好的 楼主很有用,安装了8.8白菜版终于成功了,用其他版本都不行 我测试了
回复

使用道具 举报

34#
ID:740707 发表于 2020-5-7 12:29 | 只看该作者
为什么不能运行呢
回复

使用道具 举报

35#
ID:743531 发表于 2020-5-9 21:56 | 只看该作者
楼主为什么实物图他会显示乱码呀
回复

使用道具 举报

36#
ID:710551 发表于 2020-5-15 23:46 | 只看该作者
问一下楼主这个超声波器件怎么仿真,滑动变阻器啥用处,还有怎么知道超声波测得距离(好检验看看显示的对不对),望回答
回复

使用道具 举报

37#
ID:755221 发表于 2020-5-20 00:39 | 只看该作者

开始我也遇到这个问题,后来我发现是这样,就是超声波加载的HEX文件要用Ultrasonic-Sensor-Library-for-Proteus-_by-eT文件夹里的UltraSonicTEP.HEX,不是单片机用的那个HEX文件,运行就可以了
回复

使用道具 举报

38#
ID:545457 发表于 2020-5-21 11:44 | 只看该作者
楼主的分享真心强
回复

使用道具 举报

39#
ID:545457 发表于 2020-5-21 11:47 | 只看该作者
有一事不明:怎样在仿真时,调节屏幕显示距离;还有直流激励源那一块,作用可以解答下吗。辛苦了
回复

使用道具 举报

40#
ID:727764 发表于 2020-5-24 12:28 来自手机 | 只看该作者
请问,那个仿真的话,障碍物是怎么实现的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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