蓝桥杯篇---超声波距离测量频率测量
文章目录
- 简介
- 第一部分:超声波的简介
- 工作原理
- 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}
}
代码说明
-
delay_us 和 delay_ms:用于微秒和毫秒级延时。
-
Ultrasonic_Init:初始化超声波传感器。
-
Ultrasonic_Measure:触发超声波并测量反射时间。
-
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; // 重置脉冲计数}}
}
代码说明
-
Timer0_Init:初始化定时器0,设置为模式2(8位自动重装),定时器溢出时间为固定值。
-
External_Init:初始化外部中断0,设置为下降沿触发。
-
Timer0_ISR:定时器0中断服务函数,定时器溢出时设置测量标志。
-
External_ISR:外部中断0服务函数,每次检测到下降沿时增加脉冲计数。
-
main:主循环中检测测量标志,计算频率并重置计数。
频率计算公式
频率 = 脉冲数 / 测量时间
代码中假设定时器溢出时间为 0.5 秒,因此频率为 pulse_count * 2。
注意事项
1.定时器溢出时间
定时器溢出时间:根据实际需求调整定时器的溢出时间,确保测量精度。
2.信号幅度
信号幅度:待测信号的幅度需要在单片机输入引脚的可接受范围内。
3.噪声干扰
噪声干扰:高频信号可能受到噪声干扰,建议在硬件上添加滤波电路。
4.测量范围
测量范围:定时器和外部中断的频率测量范围有限,高频信号可能需要分频处理。
通过以上代码和说明,你可以在 IAP15F2K61S2 上实现频率测量功能。如果需要测量更高频率的信号,可以考虑使用定时器的捕获功能或外部计数器。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了IAP15F2K61S2中的超声波距离测量与频率测量。
相关文章:
蓝桥杯篇---超声波距离测量频率测量
文章目录 简介第一部分:超声波的简介工作原理1.发射超声波2.接收反射波3.计算时间差4.计算距离 硬件连接1.Trig2.Echo 示例代码代码说明注意事项1.声速2.延时精度3.硬件连接 第二部分:频率测量简介频率测量原理1.信号输入2.计数3.计算频率 硬件连接示例代…...
ML.Net二元分类
ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ML.NET是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…...
vite让每个scss文件自动导入某段内容
写了如下一个scss函数,希望自动导入到每个scss文件里面 vite.config.ts里面如下配置 import fs from fsconst filePath resolve(__dirname, ./src/assets/css/index.scss);const Minxcss fs.readFileSync(filePath, utf8); css: {preprocessorOptions: {scss: {…...
分享一个使用的音频裁剪chrome扩展-Ringtone Maker
一、插件简介 铃声制作器是一个简单易用的 Chrome 扩展,专门用于制作手机铃声。它支持裁剪音频文件的特定片段,并将其下载为 WAV 格式,方便我们在手机上使用。无论是想从一段长音频中截取精彩部分作为铃声,还是对现有的音频进行个…...
基于Python的Optimal Interpolation (OI) 方法实现
前言 Optimal Interpolation (OI) 方法概述与实现 Optimal Interpolation (OI) 是一种广泛应用于气象学、海洋学等领域的空间数据插值方法。该方法通过结合观测数据与模型预测数据,最小化误差方差,从而实现对空间数据的最优插值。以下是OI方法的一般步骤…...
初学 mybatis
前言 回顾之前 不使用 mybatis 框架,我们是怎么通过Java 操作数据库的 "jdbc" 前提:使用maven 构建的项目 1 添加 关于jdbc 的依赖,以及辅助操作数据库的 commons-dubli jar包 截取 前后端项目 2 添加配置文件里面内容有&…...
机器学习:k均值
所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&…...
保姆级GitHub大文件(100mb-2gb)上传教程
GLF(Git Large File Storage)安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…...
1.【BUUCTF】[SUCTF 2019]EasyWeb
进入题目页面如下 给出源码开始代码审计 <?php // 定义一个名为 get_the_flag 的函数,该函数主要处理文件上传逻辑 function get_the_flag(){// 构造用户上传文件的目录,目录名是 "upload/tmp_" 加上客户端 IP 地址的 MD5 哈希值$userdir…...
CloudberryDB(七)二级索引
在CloudberryDB中,二级索引的概念与PostgreSQL中的类似。但是,由于分布式特性,创建和使用二级索引需要考虑一些额外的因素。以下是关于二级索引的一些要点: 1. **创建索引**:在Greenplum中,可以使用CREATE…...
P1878 舞蹈课(详解)c++
题目链接:P1878 舞蹈课 - 洛谷 | 计算机科学教育新生态 1.题目解析 1:我们可以发现任意两个相邻的都是异性,所以他们的舞蹈技术差值我们都要考虑,4和2的差值是2,2和4的差值是2,4和3的差值是1,根…...
何须付费免费它不香吗
聊一聊 又是一年开学季。 开学了发一些应时期的小软件。 今天给大家分享一款学校班级课程表工具。 这款工具可以投放在学校电子大屏上。 支持学校的白板软件。 软件介绍 学校班级课程表 工具界面清爽,信息能一目了然。 虽然看感觉功能简单,但每个…...
ELK组成及实现原理
ELK是由三个主要组件组成的日志处理和搜索平台,分别是: Elasticsearch:Elasticsearch 是一个基于Lucene构建的开源搜索引擎,提供强大的搜索、分析功能。它负责存储和索引所有数据,并提供实时搜索能力。数据可以通过HTT…...
【Vue3源码解析】响应式原理
源码环境搭建 【Vue3源码解析】应用实例创建及页面渲染-CSDN博客 写文章时的Vue 版本: "version": "3.5.13",针对单个包进行开发环境打包、测试。 pnpm run dev reactivityreactive 创建响应式对象 packages/reactivity/src/reactive.ts …...
servlet中的ServletContext
设置、获取ServletContext配置信息 与ServletConfig不同的是,所有Servlet共享一份ServletContext 在web.xml中设置配置信息 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"https://jakarta.ee/xml/ns/jakartaee"x…...
第1825天 | 我的创作纪念日:缘起、成长经历、大方向
目录 缘起一、成为创作者的初心(一)好记性不如烂笔头(二)文档可以帮助多个人解决同一个问题(三)加深自己对问题的理解,对技术的研究 二、实战项目中的经验分享(一)项目背…...
如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题
在安装Qt时,遇到了一些问题,尤其是在Mac上安装Qt后,发现Qt Creator没有出现在应用程序中。通过一些搜索和操作,最终解决了问题。以下是详细的记录和解决方法。 1. 安装Qt后未显示Qt Creator 安装完成Qt后,启动应用程…...
Java 设计模式之迭代器模式
文章目录 Java 设计模式之迭代器模式概述UML代码实现Java的迭代器 Java 设计模式之迭代器模式 概述 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 UML Iterator:迭代器接口ÿ…...
登录演示和功能拆解
登录演示和功能拆解 表单基础校验实现 1. 基础双向绑定 <template><el-form><el-form-item label"账号"><el-input v-model"formData.username" /></el-form-item><el-form-item label"密码"><el-inpu…...
DeepSeek深度求索API多线程批量写原创文章软件-ai痕迹极低
DeepSeek是一款由国内人工智能公司研发的大型语言模型,拥有强大的自然语言处理能力,能够理解并回答问题,还能辅助写代码、整理资料和解决复杂的数学问题。 与OpenAI开发的ChatGPT相比,DeepSeek不仅率先实现了媲美OpenAI-o1模型的…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
