找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机软件模拟HC_SRO4超声模块仿真

[复制链接]
跳转到指定楼层
楼主

软件模拟HC_SRO4超声模块

作者:五号智能

需求:需要主控制单片机启动的第一时间进行初始化,初始化代码

trig=0;
echo=1;

使用方法:你只需要提供一个10uS以上脉冲触发信号。
此程序便按arr数组里标的时间,让echo引脚发出不同时长的高电平.来模拟HC_SR04
  1. /*
  2. 软件模拟HC_SRO4超声模块

  3. 作者:五号智能

  4. 需求:需要主控制单片机启动的第一时间进行初始化,初始化代码

  5. trig=0;
  6. echo=1;

  7. 使用方法:你只需要提供一个10uS以上脉冲触发信号。
  8. 此程序便按arr数组里标的时间,让echo引脚发出不同时长的高电平.来模拟HC_SR04

  9. 功能:被触发后,模拟超声模块输出.输出5次,每次间隔5秒,

  10. 距离从长到短,使用着可以自行设置数组arr来模拟


  11. HC_SR04说明书:

  12. 基本工作原理:
  13. (1)采用IO口TRIG触发测距,给最少10us的高电平信呈。
  14. (2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
  15. (3)有信号返回,通过IO口ECHO输出一个高电平,
  16.         高电平持续的时间就是超声波从发射到返回的时间。
  17.         测试距离=(高电平时间*声速(340M/S))/2;
  18.         每次触发高电平必须15us以上

  19. */



  20. #include<reg52.h>
  21. #include <intrins.h>

  22. sbit trig=P3^2;          //模拟HC_SR04的两个引脚定义,可自行更改
  23. sbit echo=P2^1;
  24. unsigned int conter=0;
  25. unsigned int ec=0;
  26. unsigned int arr[]={588,400,350,200,50,1};   //此处为模拟发出的超声时长.可自行设置
  27. unsigned int timer=0;
  28. unsigned int flag=0;
  29. void daley_10us(unsigned int n)//12M
  30. {
  31.         _nop_();
  32.         _nop_();
  33.         while(n--);
  34. }

  35. void main ()
  36. {       
  37.         unsigned int a=0;
  38.        
  39.         TMOD=0x01;
  40.         TH0=(65536-50000)/256;       
  41.                                                          
  42.         TL0=(65536-50000)%256;       
  43.        
  44.         ET0=1;
  45.         EA=1;
  46.         echo=0;                                //初始化echo电平为低

  47.         while(trig);      //等待初始化指令
  48.        
  49.         echo=0;
  50.         TR0=1;        //启动定时器0
  51.        
  52.         while(1)
  53.         {
  54.                 if(flag)
  55.                 {
  56.                         a=arr[ec];
  57.                         flag=0;
  58.                 }                       
  59.                
  60.                 if(conter>1)                        //如果高电平时间超过2次计时自增,大约10us
  61.                 {
  62.                         echo=1;                        //拉高echo电平
  63.                         if(ec<6)                //判断数组下标是否溢出
  64.                         {
  65.                                 daley_10us(a);        //循环设置拉高电平的时间
  66.                         }
  67.                         else
  68.                         {
  69.                                 ec=0;                                        //数组溢出电标归0
  70.                                 daley_10us(a);        //拉高电平的延时.
  71.                         }
  72.                        
  73.                         echo=0;                                //延时结束时,拉低电平
  74.                         daley_10us(1);        //拉高电平的延时.
  75.                         conter=0;                                //触发信号标志归0
  76.                        
  77.                 }
  78.                 if(trig)         //检测高电平触发信号
  79.                 {
  80.                         conter++;                //对高电平时间进行计时
  81.                 }
  82.                                
  83.         }       
  84.        
  85.        

  86. }
  87. void delaytime() interrupt 1
  88. {
  89.         TH0=(65536-50000)/256;
  90.        
  91.         TL0=(65536-50000)%256;
  92.         if(100==timer)
  93.         {
  94.                 timer=0;
  95.                 ec++;                                //数组下标自增
  96.                 flag=1;
  97.         }
  98.         timer++;
  99.        

  100. }

复制代码



0.png (65.89 KB, 下载次数: 78)

0.png

51单片机模仿HC_SR04超声模块.rar

52.45 KB, 下载次数: 34, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:686697 发表于 2020-2-5 14:56 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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