【Protues仿真】基于AT89C52單片機的超聲波測距

目錄

1 HCSR04超聲波測距傳感器

1.1 基本參數

1.2 引腳說明

1.3 工作原理(時序圖)

2 基于AT89C52單片機的超聲波測距電路原理圖

2.1 硬件連接說明

2.2 工作原理

3 基于AT89C52單片機的超聲波測距控制程序

3.1.1 初始化設置

3.1.2 超聲波測距原理

3.1.3 顯示功能

3.1.4 注意事項

3.1.6 實現程序

3.1.7 _nop_()函數


摘要:

本文介紹基于AT89C52單片機的HC-SR04超聲波測距系統實現方案。HC-SR04模塊工作電壓5V,測量范圍2-400cm,精度±3mm,通過40kHz超聲波實現測距。系統硬件連接包括單片機與傳感器的Trig、Echo引腳對接,以及LCD顯示模塊。軟件采用定時器測量回波高電平時間,按距離=時間×0.017cm/μs公式計算距離值,并通過LCD實時顯示。程序實現包含初始化、超聲波觸發、時間測量和顯示功能,測量周期建議大于60ms。該系統具有結構簡單、成本低的特點,適合短距離測距應用,若需提高精度可增加溫度補償算法。

1 HCSR04超聲波測距傳感器

HC-SR04 是一款非常經典的低成本超聲波測距模塊,通過發射超聲波并接收回波來測量前方障礙物的距離。

1.1 基本參數

參數

數值/說明

工作電壓

DC 5V

工作電流

< 15mA

測距范圍

2cm ~ 400cm(理論)

測距精度

±3mm(典型)

工作頻率

40kHz

觸發信號

10μs 高電平脈沖

回波信號

高電平持續時間表示距離

測量角度

~15° 錐形波束

尺寸

約 45 × 20 × 15 mm

1.2 引腳說明

引腳

名稱

功能說明

VCC

電源

接 5V

GND

接地

Trig

觸發

輸入觸發信號

Echo

回波

輸出回波信號(5V)

注意:Echo 引腳輸出的是 5V 信號,如果接 3.3V 單片機(如 ESP8266/ESP32),建議加電阻分壓或電平轉換器,避免燒壞 GPIO。

1.3 工作原理(時序圖)

1 向Trig 引腳發送一個 ≥10μs 的高電平脈沖;

2 模塊自動發射 8 個 40kHz 超聲波脈沖;

3 Echo 引腳輸出高電平,持續時間與超聲波往返時間成正比;

4 距離計算公式:

距離(cm)=(Echo高電平時間/2)*聲音傳播速度

2 基于AT89C52單片機的超聲波測距電路原理圖

功能:AT89C52控制HC-SR04超聲波傳感器和LCD顯示

2.1 硬件連接說明

HC-SR04 VCC → 5V

HC-SR04 GND → GND

HC-SR04 Trig → P2.0

HC-SR04 Echo → P2.1

LCD數據線 → P0口

LCD RS → P2.2

LCD RW → P2.3

LCD EN → P2.4

2.2 工作原理

首先,給Trig引腳一個至少10us的高電平脈沖,然后模塊會自動發送8個40kHz的超聲波脈沖,并檢測回波。

當檢測到回波時,Echo引腳會輸出高電平,高電平的持續時間就是超聲波從發射到返回的時間。

距離 = (高電平時間 * 聲速(340m/s)) / 2

注意:由于聲速隨溫度變化,但這里我們忽略溫度補償,使用340m/s。

3 基于AT89C52單片機的超聲波測距控制程序

如上圖所示,示波器中黃色線表示Trig引腳信號,用于產生至少10us的高電平脈沖。藍色線表示Echo引腳會輸出高電平,高電平的持續時間與測量距對應。

    1. 程序功能說明

3.1.1 初始化設置

配置LCD顯示

初始化定時器0用于測量時間間隔

3.1.2 超聲波測距原理

向TRIG引腳發送至少10μs的高電平脈沖

超聲波模塊自動發送8個40kHz的脈沖

檢測ECHO引腳的高電平持續時間

根據時間計算距離:距離 = (時間 × 聲速) / 2

3.1.3 顯示功能

在LCD上顯示測量得到的距離值

3.1.4 注意事項

測量周期最好大于60ms,以防止發射信號對回響信號的影響

實際應用中可能需要添加溫度補償以提高精度

如果測量環境復雜,可能需要添加濾波算法

3.1.6 實現程序

//庫函數與位定義
#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned char// LCD引腳定義
sbit LCD_RS = P2^2;
sbit LCD_RW = P2^3;
sbit LCD_EN = P2^4;// HC-SR04引腳定義
sbit TRIG = P2^0;
sbit ECHO = P2^1;// 全局變量
uint distance = 0;
uint time = 0;// LCD延時函數
void lcd_delay(uint ms) {uint i, j;for(i = 0; i < ms; i++)for(j = 0; j < 120; j++);
}// LCD寫命令函數
void lcd_write_cmd(uchar cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;P0 = cmd;LCD_EN = 1;lcd_delay(1);LCD_EN = 0;lcd_delay(1);
}// LCD寫數據函數
void lcd_write_data(uchar dat) {LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;LCD_EN = 1;lcd_delay(1);LCD_EN = 0;lcd_delay(1);
}// LCD初始化函數
void lcd_init() {lcd_write_cmd(0x38); // 16x2顯示,5x7點陣,8位數據接口lcd_write_cmd(0x0C); // 顯示開,光標關,閃爍關lcd_write_cmd(0x06); // 寫入新數據后光標右移lcd_write_cmd(0x01); // 清屏lcd_delay(2);
}// 顯示字符串函數
void lcd_display_string(uchar *str) {while(*str != '\0') {lcd_write_data(*str++);}
}// 顯示數字函數
void lcd_display_number(uint num) {uchar i;uchar digits[4];if(num > 999) {digits[0] = num / 1000 + '0';digits[1] = (num % 1000) / 100 + '0';digits[2] = (num % 100) / 10 + '0';digits[3] = num % 10 + '0';for(i = 0; i < 4; i++) {lcd_write_data(digits[i]);}}else if(num > 99) {digits[0] = num / 100 + '0';digits[1] = (num % 100) / 10 + '0';digits[2] = num % 10 + '0';for(i = 0; i < 3; i++) {lcd_write_data(digits[i]);}}else if(num > 9) {digits[0] = num / 10 + '0';digits[1] = num % 10 + '0';for(i = 0; i < 2; i++) {lcd_write_data(digits[i]);}}else {lcd_write_data(num + '0');}
}// 定時器0初始化
void timer0_init() {TMOD = 0x01; // 定時器0工作方式1TH0 = 0;TL0 = 0;ET0 = 1; // 允許定時器0中斷EA = 1;  // 開啟總中斷
}// 超聲波測距函數
uint ultrasonic_measure() {TRIG = 1;_nop_();//空格起延時作用_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TRIG = 0;while(!ECHO); // 等待ECHO變高TR0 = 1; // 啟動定時器0while(ECHO); // 等待ECHO變低TR0 = 0; // 停止定時器0time = TH0 * 256 + TL0;//計時TH0 = 0;TL0 = 0;// 計算距離 (cm) = (時間 * 聲速) / 2// 聲速 = 340m/s = 0.034cm/μs// 定時器每計數1次為1μsdistance = time * 0.017; // 簡化計算: 0.034/2 = 0.017return distance;
}// 主函數
void main() {lcd_init();timer0_init();lcd_write_cmd(0x80); // 設置LCD顯示位置lcd_display_string("Distance:");while(1) {distance = ultrasonic_measure();lcd_write_cmd(0x89); // 設置顯示位置lcd_display_number(distance);lcd_display_string("cm   ");// 延時一段時間再進行下一次測量lcd_delay(5);}
}// 定時器0中斷服務函數
void timer0_isr() interrupt 1 {// 定時器溢出處理TH0 = 0;TL0 = 0;
}

3.1.7 _nop_()函數

_nop_()是8051單片機中的一個內聯函數,它產生一個NOP(空操作)指令,消耗一個機器周期的時間。在12MHz晶振的系統中,一個NOP指令執行時間為1μs。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96563.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LLM - Agent核心架構:四大“身體”部件

文章目錄一、Agent核心架構&#xff1a;四大“身體”部件1. 核心大腦&#xff1a;大型語言模型&#xff08;LLM&#xff09;2. 記憶系統&#xff1a;短期與長期記憶3. 工具箱&#xff08;Toolkit&#xff09;&#xff1a;從“思想家”到“行動家”4. 驅動循環&#xff08;Engin…

html-docx-js 導出word

2025.08.23今天我學習了如何將html頁面內容導出到word中&#xff0c;并保持原有格式&#xff0c;效果如下&#xff1a;代碼如下&#xff1a;1&#xff1a;列表頁面按鈕<el-button type"warning" plain icon"el-icon-download" size"mini" cli…

Science Robotics 通過人機交互強化學習進行精確而靈巧的機器人操作

機器人操作仍然是機器人技術中最困難的挑戰之一&#xff0c;其方法范圍從基于經典模型的控制到現代模仿學習。盡管這些方法已經取得了實質性進展&#xff0c;但它們通常需要大量的手動設計&#xff0c;在性能方面存在困難&#xff0c;并且需要大規模數據收集。這些限制阻礙了它…

Dism++備份系統時報錯[句柄無效]的解決方法

當使用Dism進行系統備份時遇到“[句柄無效]”的錯誤&#xff0c;這通常是由于某些文件或目錄的句柄無法正確訪問或已被占用所導致。以下是一種有效的解決方法&#xff1a;一、查看日志文件定位日志文件&#xff1a;首先&#xff0c;打開Dism軟件所在的目錄&#xff0c;并找到其…

華為/思科/H3C/銳捷操作系統操作指南

好的,這是一份針對 華為(VRP)、思科(IOS/IOS-XE)、H3C(Comware)和銳捷(Ruijie OS) 這四大主流網絡設備廠商操作系統的對比操作指南。本指南將聚焦于它們的共性和特性,幫助你快速掌握多廠商設備的基本操作。 四大網絡廠商操作系統綜合操作指南 一、 核心概念與模式對…

一文讀懂 DNS:從域名解析到百度訪問全流程

目錄 前言 一、什么是 DNS&#xff1f;—— 互聯網的 “地址簿” 為什么需要 DNS&#xff1f; DNS 的核心參數 二、DNS 解析原理&#xff1a;遞歸與迭代的協作 1. 兩種核心查詢方式 2. 完整解析流程&#xff08;以www.baidu.com為例&#xff09; 緩存清理命令 三、DNS …

初試Docker Desktop工具

文章目錄1. 概述2. 下載3. 安裝4. 注冊5. 登錄6. 啟動7. 容器8. 運行容器8.1 運行容器的鏡像8.2 獲取示例應用8.3 驗證Dockerfile文件8.4 拉取Alpine精簡鏡像8.5 創建鏡像8.6 運行容器8.7 查看前端9. 訪問靜態資源9.1 本地靜態資源9.2 創建服務器腳本9.3 修改Dockerfile文件9.4…

百度披露Q2財報:營收327億,AI新業務收入首超百億

8月20日&#xff0c;百度發布2025年第二季度財報&#xff0c;顯示季度總營收327億元&#xff0c;百度核心營收263億元&#xff0c;歸屬百度核心凈利潤74億元&#xff0c;同比增長35%。受AI驅動&#xff0c;涵蓋智能云在內的AI新業務收入增長強勁&#xff0c;首次超過100億元&am…

【字母異位分組】

思路 核心思路&#xff1a;使用排序后的字符串作為鍵&#xff0c;將原始字符串分組 鍵的選擇&#xff1a;對于每個字符串&#xff0c;將其排序后得到標準形式作為鍵分組存儲&#xff1a;使用哈希表&#xff0c;鍵是排序后的字符串&#xff0c;值是對應的原始字符串列表結果構建…

高防cdn如何緩存網頁靜態資源

為什么需要優化網頁靜態資源的緩存&#xff1f; 網頁靜態資源包括圖片、CSS、JavaScript等文件&#xff0c;它們通常體積大、訪問頻繁。在網頁訪問過程中&#xff0c;如果每次都從源服務器請求這些靜態資源&#xff0c;會導致網絡延遲和帶寬消耗。而優化網頁靜態資源的緩存&am…

使用Pandas進行缺失值處理和異常值檢測——實戰指南

目錄 一、缺失值處理 1.1 缺失值的識別 1.2 刪除缺失值 1.3 填充缺失值 二、異常值檢測 2.1 異常值的定義 2.2 常用檢測方法 IQR&#xff08;四分位數間距&#xff09;法 Z-score&#xff08;標準分數&#xff09;法 三、實戰案例&#xff1a;基因表達數據預處理 四…

B.30.01.1-Java并發編程及電商場景應用

摘要 本文深入探討了Java并發編程的核心概念及其在電商系統中的實際應用。從基礎并發機制到高級并發工具&#xff0c;結合電商業務場景中的典型問題&#xff0c;如高并發秒殺、庫存管理、訂單處理等&#xff0c;提供了實用的解決方案和最佳實踐。 1. Java并發編程基礎 1.1 并發…

怎樣避免游戲檢測到云手機?

以下是一些可能避免游戲檢測到云手機的方法&#xff1a;云手機可能會因網絡配置等因素出現一些異常網絡行為&#xff0c;如網絡延遲的規律性變化等&#xff0c;在使用云手機玩游戲時&#xff0c;盡量保持網絡行為的穩定性和自然性&#xff0c;避免短時間內頻繁切換網絡連接&…

文件上傳 --- uploadlabs靶場

目錄 1 前端和js校驗 抓包改包 2 . 2.1 .htaccess&#xff08;偽靜態&#xff09; 2.2 %00截斷 &#xff08;php5.2&#xff09; 2.3 user_init_ 2.4 3 圖片碼防御 4 競爭型漏洞 思路&#xff1a; 容易出現的問題: 1 前端和js校驗 關閉JS的代碼&#xff0c;上傳PHP…

漢化版本 k6 dashboard

目前官方提供的 dashboard 只有英文版本&#xff0c;國內使用不方便&#xff0c;因此 fork 了下官方倉庫&#xff0c;添加了漢化版本 https://github.com/kinghard7/xk6-dashboardhttps://github.com/kinghard7/xk6-dashboard安裝 xk6 構建程序&#xff1a;go install go.k6.i…

視覺識別:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、標準RTSP地址格式

視覺識別:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、標準RTSP地址格式 ffmpeg-python 核心概念 常用過濾器(Filters) 高級操作 視頻截幀轉換圖片示例 參考 ultralytics.YOLO(You Only Look Once) 1. 模型加載 2. 訓練模型 (`train()`) 標準YAML格式示例 3. 預測 (…

浙江龍庭翔新型建筑材料有限公司全屋定制:暢享品質生活新境界!

在消費升級的時代浪潮中&#xff0c;浙江龍庭翔新型建筑材料有限公司以卓越的產品質量和創新的服務理念&#xff0c;重新定義全屋定制的內涵&#xff0c;為追求高品質生活的消費者打造理想家居。公司秉承"匠心質造&#xff0c;樂享生活"的核心價值觀&#xff0c;將環…

鷹角網絡基于阿里云 EMR Serverless StarRocks 的實時分析工程實踐

一、客戶背景與業務挑戰 1.1 客戶介紹 鷹角網絡&#xff08;HYPERGRYPH&#xff09; 成立于2017年&#xff0c;總部位于上海&#xff0c;是中國知名游戲研發與發行公司&#xff0c;代表產品包括現象級手游《明日方舟》及《泡姆泡姆》《來自星辰》《終末地》等。公司依托阿里云…

LWIP的IP 協議棧

IP 協議棧 下面的分析把上文對 IPv4 概念的說明與 lwIP 中的具體實現代碼對應起來&#xff0c;便于將理論與實現對照理解。分析覆蓋&#xff1a;輸入處理、路由與轉發、輸出與報文構建、分片/重組、校驗和與各種配置點&#xff08;hook、選項、統計等&#xff09;。目錄&#x…

高并發短信網關平臺建設方案概述

本方案涵蓋了架構設計、技術選型、核心功能、高可用保障以及實施路徑,旨在構建一個能夠應對千萬級日吞吐量、穩定、安全、可擴展的現代短信網關平臺。 高并發短信網關平臺建設方案 一、 項目概述與目標 1.1 項目背景 為滿足公司業務(如用戶注冊、登錄、交易驗證、營銷通知…