首页 > 其他 > 详细

51单片机----超声波模块51单片机程序

时间:2019-04-05 15:42:10      阅读:237      评论:0      收藏:0      [点我收藏+]

最近在造小车 需要用到超声波模块 现将调试时用到的代码分享出来。

所用超声波模块为HC-SR04 单片机开发板是吴鉴鹰的

技术分享图片

先理解超声波模块的原理,它有四个接口 Vcc Trig Echo Gnd 。
Vcc接正极 Gnd接地
Trig和Echo随便接两个IO口
然后给Trig口高电平10us以上,超声波模块会自动发出8个40khz的方波,并检测是否有信号返回,有信号返回时就在Echo口输出高电平,持续的时间就是发出信号到接受信号所用的时间。所以计算从发出到接收信号所用的时间,就可以得知声音传播一个来回所花费的时间,在结合声速就可以算出距离了。(这里只是简单的估算,声速还和温度等因素有关)
然后开始写程序。
这里我为了能更好的看到超声波模块是否起作用,加入了单片机上的蜂鸣器,并设置了一个报警距离。

 1 #include<reg52.h>
 2 #include<stdio.h>
 3 #include<intrins.h>
 4 sbit Trig=P2^5;        //控制端 
 5 sbit Echo=P2^4;      //接收端
 6 sbit Beep=P3^4;      //单片机开发板上的蜂鸣器
 7 unsigned char T0RH=0;
 8 unsigned char T0RL=0;
 9 void Start_Buzz(unsigned int frequ)        
10 {
11     unsigned int reload;
12     reload = 65536 - (11059200/12)/(frequ*2); 
13     T0RH = (unsigned char)(reload >>8);      //蜂鸣器定时用 产生方波
14     T0RL = (unsigned char)reload;          //蜂鸣器定时用 产生方波
15 
16     TH1 = 0xFF;//蜂鸣器定时器
17     TL1 = 0xFE;//蜂鸣器定时器
18 
19     ET1 = 1;
20     TR1 = 1;
21 } //启动蜂鸣器 并设置音高
22 void Stop_Buzz()
23 {
24     Beep= 1;
25     ET1 = 0;
26     TR1 = 0;
27 } //关闭蜂鸣器
28 void InterruptTimer0() interrupt 3
29 {
30     TH1 = T0RH;
31     TL1 = T0RL;
32     Beep = ~Beep;
33 } //蜂鸣器中断程序
34 void time_init()
35 {
36     EA=1;
37     TMOD=0x11;
38     TH0 = 0;
39     TL0 = 0; 
40 } //初始化定时器
41 void Delay_us(unsigned char t)
42 {
43     while(--t);
44 }     //大约延时t*2+5us     超声波模块用
45 
46 
47 void timer0()interrupt 1
48 {
49 TH0 = 0;
50 TL0 = 0; 
51 } //中断程序 初始化赋值 重新计数 超声波模块用 计算时间
52  void main()
53  {
54      unsigned int time,distance;
55     Trig=0;
56     Echo=0;
57     time_init();
58      while(1)
59     {
60         Trig=1;
61         Delay_us(5);
62         Trig=0;
63         while(Echo==0);
64         TR0=1;
65         while(Echo);
66         TR0=0;
67         time=TH0*256+TL0;
68         distance=(int)(time*0.017);               //计算路程 单位为cm
69         TH0=0;
70         TL0=0;
71         if(distance<30)                    //如果距离小于30cm 蜂鸣器响
72         {
73             Start_Buzz(4000);             //用于控制蜂鸣器的音高
74         }
75         else 
76         {
77             Stop_Buzz();
78         }
79      }
80  }

才学疏浅 如有不妥欢迎指教 谢谢!

 

51单片机----超声波模块51单片机程序

原文:https://www.cnblogs.com/abyssirides/p/10658841.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!