蓝桥杯篇---超声波距离测量频率测量


文章目录

  • 简介
  • 第一部分:超声波的简介
  • 工作原理
    • 1.发射超声波
    • 2.接收反射波
    • 3.计算时间差
    • 4.计算距离
  • 硬件连接
    • 1.Trig
    • 2.Echo
  • 示例代码
  • 代码说明
  • 注意事项
    • 1.声速
    • 2.延时精度
    • 3.硬件连接
  • 第二部分:频率测量简介
  • 频率测量原理
    • 1.信号输入
    • 2.计数
    • 3.计算频率
  • 硬件连接
  • 示例代码:使用定时器和外部中断测量频率
  • 代码说明
  • 频率计算公式
  • 注意事项
    • 1.定时器溢出时间
    • 2.信号幅度
    • 3.噪声干扰
    • 4.测量范围
  • 总结


简介

本文简单介绍了IAP15F2K61S2中的超声波距离测量与频率测量。

第一部分:超声波的简介

IAP15F2K61S2 是一款基于8051内核的单片机,常用于超声波测距。超声波测距通过发射超声波并接收反射波,计算时间差来确定距离

工作原理

1.发射超声波

发射超声波:单片机通过IO口触发超声波传感器发射超声波

2.接收反射波

接收反射波:传感器接收反射波并输出信号

3.计算时间差

计算时间差:单片机测量发射到接收的时间差

4.计算距离

计算距离:根据声速和时间差计算距离

硬件连接

1.Trig

Trig:连接单片机IO口,用于触发超声波

2.Echo

Echo:连接单片机IO口,用于接收反射信号

示例代码

以下代码展示了如何在IAP15F2K61S2上实现超声波测距。

#include <reg52.h>#define uchar unsigned char
#define uint unsigned intsbit Trig = P1^0;  // 超声波Trig引脚
sbit Echo = P1^1;  // 超声波Echo引脚void delay_us(uint us) {while (us--);
}void delay_ms(uint ms) {uint i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--);
}void Ultrasonic_Init() {Trig = 0;Echo = 1;
}uint Ultrasonic_Measure() {uint time = 0;Trig = 1;delay_us(10);  // 保持10us高电平Trig = 0;while (!Echo);  // 等待Echo变高while (Echo) {  // 测量高电平时间time++;delay_us(1);}return time;
}void main() {uint distance;Ultrasonic_Init();while (1) {distance = Ultrasonic_Measure() * 0.017;  // 计算距离,单位cmdelay_ms(100);  // 延时100ms}
}

代码说明

  1. delay_us 和 delay_ms:用于微秒和毫秒级延时

  2. Ultrasonic_Init:初始化超声波传感器。

  3. Ultrasonic_Measure:触发超声波并测量反射时间。

  4. main:循环测量距离并计算。

注意事项

1.声速

声速:假设声速为340m/s,实际应用中需根据环境调整。

2.延时精度

延时精度:延时函数的精度会影响测量结果。

3.硬件连接

硬件连接:确保Trig和Echo引脚连接正确。

通过以上代码,你可以在IAP15F2K61S2上实现超声波测距。

第二部分:频率测量简介

IAP15F2K61S2 是一款基于8051内核的单片机,支持通过定时器和外部中断实现频率测量。频率测量通常用于测量周期性信号的频率,例如方波、正弦波等。

频率测量原理

1.信号输入

信号输入:将待测信号连接到单片机的外部中断引脚或定时器输入引脚

2.计数

计数:在固定时间内统计信号的脉冲数量

3.计算频率

计算频率:根据脉冲数量和测量时间计算频率。

硬件连接

将待测信号连接到单片机的 P3.2(INT0)P3.3(INT1) 引脚(外部中断引脚),或者连接到定时器的输入引脚(如 T0 或 T1)

示例代码:使用定时器和外部中断测量频率

以下代码展示了如何使用定时器和外部中断在 IAP15F2K61S2 上实现频率测量。

#include <reg52.h>#define uchar unsigned char
#define uint unsigned intsbit FreqInput = P3^2;  // 待测信号连接到P3.2(INT0)uint pulse_count = 0;    // 脉冲计数
bit measure_flag = 0;    // 测量标志位void Timer0_Init() {TMOD |= 0x02;  // 定时器0,模式2(8位自动重装)TH0 = 0x00;    // 初始值TL0 = 0x00;ET0 = 1;       // 使能定时器0中断EA = 1;        // 使能总中断TR0 = 1;       // 启动定时器0
}void External_Init() {IT0 = 1;  // 设置INT0为下降沿触发EX0 = 1;  // 使能外部中断0EA = 1;   // 使能总中断
}void Timer0_ISR() interrupt 1 {measure_flag = 1;  // 定时器溢出,设置测量标志
}void External_ISR() interrupt 0 {pulse_count++;  // 每次下降沿触发,脉冲计数加1
}void main() {uint frequency = 0;Timer0_Init();     // 初始化定时器0External_Init();   // 初始化外部中断while (1) {if (measure_flag) {  // 如果定时器溢出measure_flag = 0; // 清除标志位frequency = pulse_count * 2;  // 计算频率(假设定时器溢出时间为0.5秒)pulse_count = 0;  // 重置脉冲计数}}
}

代码说明

  1. Timer0_Init:初始化定时器0,设置为模式2(8位自动重装),定时器溢出时间为固定值。

  2. External_Init:初始化外部中断0,设置为下降沿触发。

  3. Timer0_ISR:定时器0中断服务函数,定时器溢出时设置测量标志。

  4. External_ISR:外部中断0服务函数,每次检测到下降沿时增加脉冲计数。

  5. main:主循环中检测测量标志,计算频率并重置计数。

频率计算公式

频率 = 脉冲数 / 测量时间
代码中假设定时器溢出时间为 0.5 秒,因此频率为 pulse_count * 2。

注意事项

1.定时器溢出时间

定时器溢出时间:根据实际需求调整定时器的溢出时间,确保测量精度。

2.信号幅度

信号幅度:待测信号的幅度需要在单片机输入引脚的可接受范围内。

3.噪声干扰

噪声干扰:高频信号可能受到噪声干扰,建议在硬件上添加滤波电路

4.测量范围

测量范围:定时器和外部中断的频率测量范围有限,高频信号可能需要分频处理。

通过以上代码和说明,你可以在 IAP15F2K61S2 上实现频率测量功能。如果需要测量更高频率的信号,可以考虑使用定时器的捕获功能或外部计数器。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了IAP15F2K61S2中的超声波距离测量与频率测量。

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

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

相关文章

CentOS系统docker配置镜像加速registry-mirrors,配置阿里云和道客

1.可用仓库 1.1.阿里云 2022年之后的镜像缺失&#xff08;因为被墙了&#xff09;&#xff0c;但是网速极快 https://g4f7bois.mirror.aliyuncs.com1.2.上海道客 持续更新&#xff0c;但是网速极慢 https://docker.m.daocloud.io2.CentOS配置脚本 注意顺序。阿里云的放前…

DeepSeek24小时写作机器人,持续创作高质量文案

内容创作已成为企业、自媒体和创作者的核心竞争力。面对海量的内容需求&#xff0c;人工创作效率低、成本高、质量参差不齐等问题日益凸显。如何在有限时间内产出高质量内容&#xff1f;DeepSeek写作机器人&#xff0c;一款24小时持续创作的智能工具&#xff0c;为企业和个人提…

【Elasticsearch】simple_query_string

Elasticsearch 的simple_query_string查询是一种灵活且容错性较强的查询方式&#xff0c;它允许用户通过简单的语法构造查询字符串&#xff0c;以实现对文档的搜索。以下是关于simple_query_string查询的详细说明&#xff1a; 1.基本概念 simple_query_string查询是一种基于字…

CPP集群聊天服务器开发实践(五):nginx负载均衡配置

1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天&#xff0c;为了提升并发量最直观的办法需要水平扩展服务器的数量&#xff0c;三台服务器可以容纳六万左右的客户端。 负载均衡器的作用&#xff1a; 把client的请求按照负载均衡算法分发到具体…

MYSQL中的性能调优方法

MySQL性能调优是数据库管理的重要工作之一&#xff0c;目的是通过调整系统配置、优化查询语句、合理设计数据库架构等方法&#xff0c;提高数据库的响应速度和处理能力。以下是常见的MySQL性能调优方法&#xff0c;结合具体的案例进行说明。 1. 优化查询语句 查询语句是数据库…

【论文笔记】Transformer^2: 自适应大型语言模型

Code repo: https://github.com/SakanaAI/self-adaptive-llms 摘要 自适应大型语言模型&#xff08;LLMs&#xff09;旨在解决传统微调方法的挑战&#xff0c;这些方法通常计算密集且难以处理多样化的任务。本文介绍了Transformer&#xff08;Transformer-Squared&#xff09;…

HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?

一、前言 作为现代互联网通信的基石&#xff0c;HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后&#xff0c;都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据&#xff1b;响应则承…

安装 Docker Desktop 修改默认安装目录到指定目录

Docker Desktop安装目录设置 Docker Desktop 默认安装位置 &#xff08;C:\Program Files\Docker\Docker) 是这个 &#xff0c;导致系统盘占用过大&#xff0c;大概2G ; 那么如何安装到其他磁盘呢&#xff1f; 根据docker desktop 官网 Docker Desktop install 我们可以看到&a…

基于实例详解pytest钩子pytest_generate_tests动态生成测试的全过程

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 作为一名软件开发人员&#xff0c;你一定深知有效测试策略的重要性&#xff0c;尤其…

Kotlin Lambda

Kotlin Lambda 在探索Kotlin Lambda之前&#xff0c;我们先回顾下Java中的Lambda表达式&#xff0c;Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能&#xff0c;它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口&…

C#学习之DataGridView控件

目录 一、DataGridView控件常用属性、方法、事件汇总表 1. 常用方法、属性和事件汇总 二、DataGridView 控件的常用方法调用 1. DataBind() 方法 2. Clear() 方法 3. Refresh() 方法 4. Sort() 方法 5. ClearSelection() 方法 6. BeginEdit() 方法 7. EndEdit() 方法…

本地事务简介

本地事务简介 1 事务基本性质 数据库事务的几个特性&#xff1a;原子性(Automicity)、一致性(Consistency)、隔离性或独立性(islation)和持久性(Durability)&#xff0c;简称ACID。 原子性&#xff1a;一系列的操作&#xff0c;其整体不可拆分&#xff0c;要么同时成功&#…

PyQt组态软件 拖拽设计界面测试

PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件&#xff0c;目前实现的功能如下&#xff1a; 支持拖入控件&#xff0c;鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器&#xff0c;修改当前选中控件的属性 拖动框选控件&#xff0c;点选控件 控…

软件评测师复习之计算机网络(4)

目录 (一)1.网络功能和分类2.OSI七层模型3.TCP/IP协议4.传输介质(二)1.通信方式和交换方式2.IP地址3.IPv64.网络规划与设计5.磁盘冗余阵列6.网络存储技术(一) 1.网络功能和分类 计算机网络功能:数据通信、资源共享、负载均衡、高可靠性 按分布范围和拓扑结构划分: 网络分类…

机器学习-1:线性回归

常用的线性回归模型主要有以下这些 简单线性回归多元线性回归多项式回归岭回归套索回归弹性网络回归逐步回归 一.简单的一元线性回归 1.导入必备的库 #导入必备的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection …

SQL SERVER的PARTITION BY应用场景

SQL SERVER的PARTITION BY关键字说明介绍 PARTITION BY关键字介绍具体使用场景排名计算累计求和分组求最值分组内百分比计算分组内移动平均计算分组内数据分布统计分组内数据偏移计算 总结 PARTITION BY关键字介绍 在SQL SERVER中&#xff0c;关键字PARTITION BY主要用于窗口函…

NO.18十六届蓝桥杯备战|循环嵌套|乘法表|斐波那契|质数|水仙花数|(C++)

循环嵌套 循环嵌套的使⽤ while &#xff0c; do while &#xff0c; for &#xff0c;这三种循环往往会嵌套在⼀起才能更好的解决问题&#xff0c;就是我们所说的&#xff1a;循环嵌套。这三种循环都可以任意嵌套使⽤ ⽐如&#xff1a; 写⼀个代码&#xff0c;打印⼀个乘法⼝…

leetcode - hot100 - python - 专题一:哈希

1、两数之和 简单 题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。你可…

JavaEE-SpringBoot快速入门

文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…

【Viper】配置格式与支持的数据源与go案例

Viper 是一个用于 Go 应用程序的配置管理库&#xff0c;支持多种配置格式和数据源。 安装依赖 go get github.com/spf13/viper go get github.com/spf13/viper/remote go get go.etcd.io/etcd/client/v3"github.com/spf13/viper/remote"要写在etcd客户端import里 1…