[文档下载] 超声波模块

[复制链接]
 楼主| deliahouse887 发表于 2024-8-24 01:18 | 显示全部楼层 |阅读模式
超声波模块.pdf (19.78 KB, 下载次数: 7)

  1. #include <reg52.h>

  2. //定义数码管的位选引脚
  3. sbit wei_1 = P1^0;
  4. sbit wei_2 = P1^1;
  5. sbit wei_3 = P1^2;
  6. sbit wei_4 = P1^3;

  7. //定义超声波引脚
  8. sbit Trig = P1^6;//发送波端口
  9. sbit Echo = P1^7;//接收端口


  10. //共阴极数码管段码0~F
  11. unsigned char code smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  12.                                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};


  13. void smg_saomiao(unsigned char weu,unsigned char dat);//声明数码管扫描函数
  14. void delay_ms(unsigned int i);        //声明延时函数       
  15. void startHC(void); //声明触发超声波传感器函数       


  16. void main(void)
  17. {
  18.         float time=0.0,dis=0.0;
  19.         int  num=0;
  20.        
  21.         //选择定时器0、工作模式为1,初始值设定0开始数数,先不开始数数       
  22.         TMOD &= 0xf0;
  23.         TMOD |= 0x01;        //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响       
  24.        
  25.         TH0=0;              //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
  26.         TL0=0;
  27.        
  28.         TR0=0;        //关闭定时器
  29.        
  30.        
  31.         while(1)
  32.         {
  33.                 //超声波测距频率约10Hz,既100ms测量一次
  34.                 if(num>14)
  35.                 {
  36.                         startHC();//发射声波
  37.                        
  38.                         while(Echo==0);//等待模块发射声波
  39.                        
  40.                         TR0=1;        //打开定时器开始计时
  41.                        
  42.                         while(Echo==1 && TF0==0);//等待模块接收碰撞障碍物后反射回来的声波

  43.                         TR0=0;        //关闭定时器停止计时
  44.                        
  45.                         //计算出中间经过多少时间(晶振为11.0592Mhz的计数脉冲时间单位为1.085us,12Mhz为1us)
  46.                         time = (float)(TH0 * 256.0 + TL0)*1.085;    //us为单位
  47.                        
  48.                         //距离 = 速度(340m/s)* 时间/2
  49.                         dis = (float)time * 0.017;//计算得出单位为CM
  50.                        
  51.                         num=0;//将计数变量清零
  52.                         TH0=0;//将定时器的计数值清零
  53.             TL0=0;//将定时器的计数值清零
  54.                 }
  55.                
  56.                 num++;
  57.                
  58.                 //扫描一遍数码管约7ms,7*14=98 约100ms
  59.                 smg_saomiao(1,16);
  60.                 smg_saomiao(2,(int)dis/100);
  61.                 smg_saomiao(3,(int)dis%100/10);
  62.                 smg_saomiao(4,(int)dis%10);
  63.         }
  64. }


  65. /****************************************************************
  66. * 函 数 名       : Delay10us
  67. * 函数功能                   : 延迟10us
  68. * 参数           : 无
  69. * 返回值         : 无
  70. ******************************************************************/
  71. void Delay10us(void) //@11.0592MHz
  72. {
  73.    unsigned char i;
  74.     i = 3;
  75.    while (--i);
  76. }

  77. /****************************************************************
  78. * 函 数 名       : startHC
  79. * 函数功能                   : 触发超声波传感器发出声波
  80. * 参数           : 无
  81. * 返回值         : 无
  82. ******************************************************************/
  83. void startHC(void)
  84. {
  85.         //发送触发信号
  86.         Trig = 0;
  87.         Trig = 1;
  88.         Delay10us();
  89.         Trig = 0;
  90. }

  91. /****************************************************************
  92. * 函 数 名       : delay
  93. * 函数功能                   : 延时函数,i=1时,大约延时1ms
  94. *参数i           : 需要延时的毫秒数
  95. *返回值          : 无
  96. ******************************************************************/
  97. void delay_ms(unsigned int i)
  98. {
  99.         unsigned int n;
  100.   while(i--)
  101.   for(n=0;n<110;n++);               
  102. }

  103. /****************************************************************
  104. * 函 数 名       : smg_saomiao
  105. * 函数功能                   : 驱动4位的共阴数码管
  106. *参数wei         : 选择要点亮的那一位数码管(1~4)
  107. *参数dat         : 显示的段码内容( 0~15 ——> 0~F)
  108. *返回值          : 无
  109. ******************************************************************/
  110. void smg_saomiao(unsigned char wei,unsigned char dat)
  111. {
  112.         //判断要点亮哪一位数码管
  113.    if(wei ==1)
  114.          {
  115.                         wei_1 = 0;
  116.                         wei_2 = 1;
  117.                         wei_3 = 1;
  118.                         wei_4 = 1;                 
  119.          }else if(wei ==2)
  120.          {
  121.                         wei_1 = 1;
  122.                         wei_2 = 0;
  123.                         wei_3 = 1;
  124.                         wei_4 = 1;                 
  125.          }else if(wei ==3)
  126.          {
  127.                         wei_1 = 1;
  128.                         wei_2 = 1;
  129.                         wei_3 = 0;
  130.                         wei_4 = 1;                  
  131.          }else if(wei ==4)
  132.    {
  133.                         wei_1 = 1;
  134.                         wei_2 = 1;
  135.                         wei_3 = 1;
  136.                         wei_4 = 0;                 
  137.          }
  138.          
  139.          P0 = smg[dat];//显示该位数码管的段码内容
  140.          delay_ms(3);//延时3-5ms
  141.          P0 = 0;//熄灭所有段码,即消影
  142. }


呐咯密密 发表于 2024-8-26 16:41 | 显示全部楼层
这个代码是哪个MCU的
AloneKaven 发表于 2024-9-11 22:29 | 显示全部楼层
这个是51的代码吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

1424

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部