蓝桥杯单片机学习总结(Day15 超声波测距)

news2024/9/22 13:28:29

开启超声波模块测距方法:

        X20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。当CX20106A接收到40KHz的信号时(第五脚200K的电阻决定了其频率为40KHz),会在OUT脚输出一个低电平下降脉冲。这个信号甚至可以接到单片机的外部中断引脚,作为中断信号的输入,若需要发送超声波信号,那么我们就需要产生8个40KHz的信号(40KHz周期就是25us,由于是个奇数,所以取周期为24us,半个周期12us);

sbit TX=P1^0;  //超声波发送端
sbit RX=P1^1;  //超声波接收端

void Send_Wave()
{
    int i;
    for(i=0;i<=7;i++)  //发送8个脉冲
        {
        TX=1;  //发送
        Delay12us();
        TX=0;
        Delay12us();
        }
}

实例代码与解释: 

        

#include <STC15F2K60S2.H>
#include "intrins.h"
#include "absacc.h"

sbit TX = P1 ^ 0; //发射引脚
sbit RX = P1 ^ 1; //接收引脚

code unsigned char tab[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
unsigned char buf[8] = {10, 10, 10, 10, 10, 10, 10, 10}; //段
bit flag;//更新标志位

void send_wave(void);
void display(void);

//12us延时,@11.0592MHz
void Delay12us()		
{
	unsigned char i;

	_nop_();
	_nop_();
	_nop_();
	i = 30;
	while (--i);
}

//定时器0初始化+开启中断
void Timer0Init(void)		//2毫秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x9A;		//设置定时初值
	TH0 = 0xA9;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA = 1;
  ET0 = 1;  //打开定时器0中断
}

void main(void)
{
    unsigned int dist;
    unsigned int time = 0;

	Timer0Init();
    TH1 = 0;
	TL1 = 0;//计时器1计时,此处定时器0为定时扫描的作用
    
    while(1)
    {
        if(flag)
        {
            flag = 0;
            send_wave(); //发送方波信号

			//计算接收所发送的方波信号的时间
            TR1 = 1;  //启动计时
            while((RX == 1) && (TF1 == 0));  //等待收到脉冲,没有计满溢出
            TR1 = 0;  //关闭计时

            //发生溢出
            if(TF1 == 1)
            {
                TF1 = 0;
                dist=9999;  //无返回
            }
            else
            {
                /**  计算时间方法  */
                time = TH1;
                time <<= 8;
                time |= TL1;
                dist= (unsigned int)(time * 0.017); //计算距离
            }
            TH1 = 0;//初始化
            TL1 = 0;
        }
        /** 数据处理*/
        buf[5] = dist/ 100;
        buf[6] = dist% 100 / 10;
        buf[7] = dist% 10;
    }
}

//定时器0中断服务函数
void Timer0_Proc()  interrupt 1 
{
    static unsigned int ms = 0;
    display();  //2ms执行一次
    if(++ms== 200)
    {
        flag = 1;
        ms = 0;
    }
}

//显示函数
void display(void)
{
    static unsigned char com = 0;
    P2 = ((P2 & 0x1f) | 0xe0);
    P0 = 0xff;
    P2 &= 0x1f;

    P2 = ((P2 & 0x1f) | 0xc0);
    P0 = (1 << com);
    P2 &= 0x1f;

    P2 = ((P2 & 0x1f) | 0xe0);
    P0 = tab[buf[com]];
    P2 &= 0x1f;

    P2 = ((P2 & 0x1f) | 0xA0);
    P0 = 0x00;
    P2 &= 0x1f;

    if(++com == 8)
    {
        com = 0;
    }
}

//TX引脚发送40KHz方波信号驱动超声波发送探头
//使用软件延时注意RC振荡器频率
void send_wave(void)
{
    unsigned char i = 8;  //发送8个脉冲

    do
    {
        TX = 1;
        Delay12us();
        TX = 0;
        Delay12us();
    }
    while(i--);
}

        实验总结: 

        需要持续接收信号的、持续扫描的已经可以总结出一个模板,那就是使用Timer0定时器的定时扫描,中断函数内的定时扫描标志flag,主函数内判断等操作共同构成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA打开终端报错Cannot open Local Terminal命令行功能

idea项目中不能打开命令行功能 IDEA打开终端报错Cannot open Local Terminal 意思是打开命令行发生错误 idea上配置shell终端&#xff0c;命令行页面 打开右上角 File–> setting–> Tools–> 终端 找到Shell 路径 文本框中原本是是powershell.exe&#xff0c;现在…

Java | Leetcode Java题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; public class Solution extends VersionControl {public int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVers…

企业专线和家庭宽带的区别

企业专线&#xff08;也称为商业互联网服务&#xff09;与家庭宽带在多个方面存在区别&#xff0c;这些差异主要体现在网络性能、服务质量、价格、合同条款以及支持服务上。以下是两者的主要区别&#xff1a; 1、网络质量和速度&#xff1a; 企业专线通常提供更稳定、更快的网络…

虚拟机Ubuntu20.04 利用串口调试机械臂

虚拟机Ubuntu20.04 利用串口调试机械臂 串口库问题 由于机械臂使用的是串口进行驱动控制&#xff0c;在python中相关的串口库为serial和pyserial两个&#xff0c;这里我曾踩过雷同时安装了serial与pyserial两个库&#xff0c;导致报错如下所示&#xff1a; AttributeError: m…

Apache Tomcat文件包含漏洞复现(详细教程)

1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;其安装后会默认开启ajp连接器&#xff0c;方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和…

责任链模式的应用与解析

目录 责任链模式责任链模式结构责任链模式适用场景责任链模式优缺点练手题目题目描述输入描述输出描述题解 责任链模式 责任链模式&#xff0c;亦称职责链模式、命令链&#xff0c;是一种行为设计模式&#xff0c;允许你将请求沿着处理者链进行发送。收到请求后&#xff0c;每…

韩顺平0基础学java——第36天

p715-735 反射调用速度慢 反射调用优化-关闭访问检查 1. Method和Field、Constructor对象都有setAccessible() 方法2. setAccessible作用是启动和禁用访问安全检查的开关 3&#xff0e;参数值为true表示反射的对象在使用时取消访问检查&#xff0c;提高反射的效率。参数值 为…

Redis核心技术与实战学习笔记

Redis核心技术与实战学习笔记 最近想沉下心来看下redis&#xff0c;买了蒋德钧老师的《Redis 核心技术与实战》,这里记录一些学习笔记 希望能够坚持下去有想一起学习的童鞋&#xff0c;可以点击跳转到文章尾部获取学习资源,仅供学习不要用于任何商业用途!!! redis知识全景图 …

2024-07-22 Unity AI行为树1 —— 框架介绍

文章目录 1 行为树2 行为树驱动方式3 行为树结点分类3.1 控制节点3.2 执行节点 4 行为树与状态机比较 本文章参考 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 行为树 ​ 行为树&#xff08;Behavior Tree&#xff0c;BT&#xff09;在游戏 AI 中是一种用于控制…

精益管理意识与企业战略规划的匹配度如何评估?

众所周知&#xff0c;精益管理不仅要求企业在生产运营过程中实现资源的最大化利用&#xff0c;同时也强调企业战略规划的精准性和前瞻性。因此&#xff0c;评估精益管理意识与企业战略规划的匹配度&#xff0c;对于企业的长期发展至关重要。具体方法如深圳天行健企业管理咨询公…

springboot 项目整合 AI (文心一言)

百度智能云网址&#xff1a;https://cloud.baidu.com/?fromconsole 注册——个人认证——登录成功 第一步&#xff1a;点击千帆大模型平台 ​ 第二步&#xff1a;点击应用接入——创建应用 ​ 第三步&#xff1a;点击接口文档——API列表——可以点击指定模型进行查看调…

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.4数据架构

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

hamcrest 断言框架使用示例和优势分析

引言 在软件测试领域&#xff0c;断言是验证代码行为是否符合预期的关键环节。Hamcrest 断言框架&#xff0c;以其独特的匹配器&#xff08;Matcher&#xff09;概念和清晰的失败信息&#xff0c;赢得了广泛的赞誉。尽管 Python 标准库中没有内置的 Hamcrest 库&#xff0c;但…

【前端新手小白】学习Javascript的【开源好项目】推荐

目录 前言 1 项目介绍 1.1 时间日期类 1.2 网页store类 1.3 事件类 1.4 Number类 1.5 String类 1.6 正则验证类 1.7 ajax类 1.8 data数据类 1.9 browser浏览器类 2 学习js-tool-big-box开源项目时有哪些收获 2.1 你可以这样做 2.2 如果你需要使用本项目 2.3 你…

开局一个启动器:从零开始入坑ComfyUI

前几天刷某乎的时候看到了一位大佬写的好文&#xff0c;可图 IP-Adapter 模型已开源&#xff0c;更多玩法&#xff0c;更强生态&#xff01; - 知乎 (zhihu.com) 久闻ComfyUI大名&#xff0c;决定试一下。这次打算不走寻常路&#xff0c;不下载现成的一键包了&#xff0c;而是…

矩估计与最大似然估计的通俗理解

点估计与区间估计 矩估计与最大似然估计都属于点估计&#xff0c;也就是估计出来的结果是一个具体的值。对比区间估计&#xff0c;通过样本得出的估计值是一个范围区间。例如估计一个人的年龄&#xff0c;点估计就是最终直接估计年龄为50岁&#xff0c;而区间估计是最终估计的…

Qt源码交叉编译带openssl的Qt版本

一.背景 近期项目由于对接的后台服务是https的&#xff0c;之前交叉编译的Qt是不带openssl的&#xff0c;为了能支持https&#xff0c;必须要重新编译Qt。 二.环境 环境准备&#xff1a; Ubuntu版本 &#xff1a;18.04&#xff1b; openssl 版本&#xff1a;1.1.1.g&#xff1b…

go-kratos 学习笔记(5) 删除hellword从新生成服务

go-kratos 删除hellword模版里的服务&#xff0c;从新生成服务users 直接删除api/helloword 目录&#xff0c;在api目录下新建 users目录&#xff1b;使用命令生成新的proto #项目根目录执行 kratos proto add api/users/user.protobuf generate生成的user.proto需要根据自己…

CCS光源的高输出TH2系列平面光源

光源在机器视觉系统中起着重要作用&#xff0c;不同环境、场景及应用合适光源都不一样&#xff0c;今天我们来看看高输出TH2系列平面光源。它可以对应高速化的生产线&#xff0c;为提高生产效率做出贡献。 TH2系列光源的特点&#xff1a; 1、实现了更高一级的高亮度 实现了更…

Ubuntu22.04系统安装nodejs 14 保姆级教程

下载软件包 从NodeSource 的官方源下载并安装 Node.js 14.x 版本的软件包&#xff0c;适用于 Debian 和 Ubuntu 系统&#xff1a; curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 更新软件源 更新软件源 sudo apt-get update 下载bodejs14 下载nodejs14 sud…