藍橋杯篇---超聲波距離測量頻率測量


文章目錄

  • 簡介
  • 第一部分:超聲波的簡介
  • 工作原理
    • 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.pswp.cn/news/895736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895736.shtml
英文地址,請注明出處:http://en.pswp.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…