前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C51 单片机开发超声波测距传感器控制 LED 灯

C51 单片机开发超声波测距传感器控制 LED 灯

作者头像
码农UP2U
发布2024-07-04 14:05:46
480
发布2024-07-04 14:05:46
举报
文章被收录于专栏:码农UP2U码农UP2U

闲话:人情势利古犹今,谁识英雄是白身。这句话说的是哪两个人呢?

上篇文章整理了关于超声波测距传感器 HC-SR04 这个模块,本篇文章来完成一个它的基本编程。

0x01:功能分析和编程思路

本篇文章来完成一个简单的功能,让超声波测距传感器来控制 LED 灯的变化。

当测距小于 10cm 时让 LED1 亮、LED2 灭,当测距大于 10cm 的时候让 LED1 灭、LED2 亮。按这个思路的话,在常态下是 LED2 亮着、LED1 是灭的。

要完成这个功能的话,会用到超声波测距传感器,让它发波、收波,然后还要用到定时器,让它记录发波和收波之间的时间间隔。这样就可以来完成距离的测算了。

0x02:代码实现

首先我们来生成要给 10us 的延时,因为发送通过 TRIG 发送高电平来让超声波测距传感器发波需要 10us 的高电平。使用 STC-ISP 生成的代码如下:

代码语言:javascript
复制
void Delay10us()  //@11.0592MHz
{
 unsigned char i;

 i = 2;
 while (--i);
}

接着我们来定义一个启动 TRIG 的函数,代码如下:

代码语言:javascript
复制
void startHC()
{
    TRIG = 0;
    TRIG = 1;
    Delay10us();
    TRIG = 0;
}

上面的代码中就完成了给 TRIG 引脚 10us 高电平的功能。

接着我们来定义一个初始化计时器的函数,代码如下:

代码语言:javascript
复制
void Timer0Init()
{
    TMOD &= 0xF0;
 TMOD |= 0x01;
    TL0 = 0;
    TH0 = 0;
}

最后我们来完成整个功能的主要逻辑,代码如下:

代码语言:javascript
复制
void main()
{
    double time = 0.0;
    double dis = 0.0;
    
    while (1)
    {
        Timer0Init();
        
        startHC();

        while (ECHO == 0);

        TR0 = 1;

        while (ECHO == 1);

        TR0 = 0;

        time = (TH0 * 256 + TL0) * 1.085; 
        
        dis = time * 0.017;
        if (dis < 10) 
        {
            LED1 = 0;
            LED2 = 1;
        }
        else
        {
            LED1 = 1;
            LED2 = 0;
        }
    }
}

上面变量 time 用来记录时间,dis 用来保存计算距离的结果。注意,定时器 TL0 和 TH0 最后记录的是经过了多少个机器周期,而一个机器周期对于我们的芯片而言是 1.085 微秒,因此单位微秒,这里要注意。而距离的单位是厘米,也需要注意。

因此,声音的距离是 340m/s 要转换成 0.034cm/us,也就是 0.034厘米每微秒。

最后来看一下演示,注意 LED 灯的变化:

我是一个程序员,了解 C、PHP、Java、ASM、Python,有 信安、CISP 证书,写小白也能看得懂的文章,感谢关注!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农UP2U 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01:功能分析和编程思路
  • 0x02:代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档