• 方案介紹
    • 一、前言
    • 二、項目設(shè)計思路
    • 三、HC-SR04 模塊介紹
    • 四、項目完整代碼設(shè)計
    • 五、總結(jié)
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

基于STC89C52單片機(jī)設(shè)計的超聲波測距儀(采用HC-SR04模塊)

10小時前
106
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請聯(lián)系.docx

共1個文件

一、前言

本項目是基于單片機(jī)設(shè)計的超聲波測距儀,主要采用了STC89C52單片機(jī)和HC-SR04超聲波測距模塊。通過LCD1602液晶顯示屏來展示測量的距離信息。

超聲波測距技術(shù)是一種常見的非接觸式測距方法,利用超聲波的傳播速度測量物體與測距器之間的距離。它具有測量范圍廣、精度高、反應(yīng)迅速等特點(diǎn),在自動控制、機(jī)器人導(dǎo)航、無人駕駛等領(lǐng)域得到廣泛應(yīng)用。

本項目選用了STC89C52作為主控芯片,它是一款常見且功能強(qiáng)大的8051系列單片機(jī),具有較強(qiáng)的計算和控制能力,適合用于各種嵌入式系統(tǒng)設(shè)計。

同時,采用了HC-SR04超聲波測距模塊作為測距模塊。HC-SR04模塊能夠向前發(fā)射超聲波信號,并接收回波信號,通過測量發(fā)射到接收之間的時間差來計算出距離。

通過STC89C52單片機(jī)與HC-SR04超聲波測距模塊的連接和控制,可以實時獲取測得的距離,并通過LCD1602液晶顯示屏進(jìn)行顯示。LCD1602液晶顯示屏具有簡單、直觀、易于讀取的優(yōu)點(diǎn),可以方便地展示測量的距離信息。

本項目目的是設(shè)計一款簡單而實用的超聲波測距儀,為用戶提供準(zhǔn)確、可靠的距離測量功能,以滿足不同領(lǐng)域?qū)y距需求的應(yīng)用。

image-20230913142057168

image-20230913142143839

二、項目設(shè)計思路

2.1 硬件設(shè)計

本項目的硬件設(shè)計思路主要包括以下幾個方面:主控芯片選擇、超聲波測距模塊選擇、電源設(shè)計與連接方式。

(1)主控芯片選擇:在本項目中,選用STC89C52單片機(jī)作為主控芯片。STC89C52是一款基于8051架構(gòu)的單片機(jī),具有豐富的外設(shè)資源和強(qiáng)大的計算能力,適合用于嵌入式系統(tǒng)設(shè)計。

(2)超聲波測距模塊選擇:在本項目中,選用HC-SR04超聲波測距模塊作為測距模塊。HC-SR04模塊具有發(fā)送超聲波信號和接收回波信號的功能,能夠準(zhǔn)確測量物體與測距器之間的距離。

(3)電源設(shè)計與連接方式:為了給單片機(jī)和超聲波測距模塊提供穩(wěn)定的工作電源,可以選擇使用直流電源適配器或者電池供電。通常情況下,將電源正極連接到單片機(jī)和超聲波測距模塊的VCC引腳上,將電源負(fù)極連接到GND引腳上。

2.2 軟件設(shè)計

(1)初始化設(shè)置:在程序的開始部分,需要對單片機(jī)進(jìn)行初始化設(shè)置,包括引腳模式設(shè)置、定時器設(shè)置等。

(2)發(fā)送超聲波信號:通過單片機(jī)控制超聲波測距模塊的發(fā)送引腳,發(fā)射一定頻率和持續(xù)時間的超聲波信號。

(3)接收回波信號:單片機(jī)通過控制超聲波測距模塊的接收引腳,監(jiān)聽回波信號并計時,記錄回波信號的持續(xù)時間。

(4)距離計算:根據(jù)回波信號的持續(xù)時間,可以計算出物體與測距器之間的距離。在軟件中進(jìn)行相關(guān)的計算,并將計算結(jié)果保存在變量中。

(5)數(shù)據(jù)顯示:通過LCD1602液晶顯示屏,將測量得到的距離信息顯示出來??梢酝ㄟ^單片機(jī)控制液晶顯示屏的引腳,向其發(fā)送相應(yīng)的數(shù)據(jù)和命令。

2.3 硬件模塊與單片機(jī)的連接方式

將HC-SR04超聲波測距模塊和LCD1602液晶顯示屏連接到STC89C52單片機(jī)的IO口:

HC-SR04模塊引腳連接:

(1)Trig引腳連接到單片機(jī)的P1.0口

(2)Echo引腳連接到單片機(jī)的P1.1口

(3)VCC引腳連接到單片機(jī)的VCC引腳

(4)GND引腳連接到單片機(jī)的GND引腳

LCD1602液晶顯示屏引腳連接:

(1)RS引腳連接到單片機(jī)的P2.0口

(2)RW引腳連接到單片機(jī)的P2.1口

(3)E引腳連接到單片機(jī)的P2.2口

(4)D4引腳連接到單片機(jī)的P2.4口

(5)D5引腳連接到單片機(jī)的P2.5口

(6)D6引腳連接到單片機(jī)的P2.6口

(7)D7引腳連接到單片機(jī)的P2.7口

(8)VCC引腳連接到單片機(jī)的VCC引腳

(9)GND引腳連接到單片機(jī)的GND引腳

三、HC-SR04 模塊介紹

HC-SR04 是一種常用的超聲波測距模塊,能夠通過發(fā)射超聲波脈沖并接收其回波來測量物體與模塊之間的距離。以下是 HC-SR04 超聲波測距模塊的詳細(xì)介紹:

(1)原理:HC-SR04 模塊利用超聲波的回波時間來計算物體與模塊之間的距離。它由兩個主要部分組成:超聲波發(fā)射器和超聲波接收器。發(fā)射器向前方發(fā)射短脈沖的超聲波,然后接收器接收到回波。通過測量發(fā)射和接收之間的時間差,可以計算出物體到模塊的距離。

(2)測量原理:HC-SR04 模塊使用的超聲波是不可聞的高頻聲波,通常工作頻率為40 kHz。模塊通過發(fā)送一個10微秒的脈沖來觸發(fā)超聲波的發(fā)射,然后等待接收回波。當(dāng)接收到回波時,模塊會停止計時,并將測量到的時間轉(zhuǎn)換為距離。

(3)測量范圍:HC-SR04 模塊的測量范圍通常在2cm到400cm之間,具體取決于環(huán)境條件和模塊質(zhì)量。較遠(yuǎn)距離的測量可能會有一定的誤差。

(4)工作電壓:HC-SR04 模塊的工作電壓通常為5V,可以通過連接到微控制器或其他適配器來供電。

(5)接口:HC-SR04 模塊通常使用四個引腳進(jìn)行連接。其中,兩個引腳用于電源供電(VCC 和 GND),一個引腳用于觸發(fā)超聲波發(fā)射(Trig),另一個引腳用于接收超聲波回波并輸出測量結(jié)果(Echo)。

(6)使用方法:使用 HC-SR04 模塊進(jìn)行測距通常需要以下步驟:

  • 將模塊連接到適當(dāng)?shù)碾娫春涂刂破鳌?/li>
  • 發(fā)送一個短脈沖觸發(fā)信號到 Trig 引腳,使模塊發(fā)射超聲波。
  • 檢測 Echo 引腳上的回波信號,并計算回波時間。
  • 根據(jù)回波時間和聲速的關(guān)系,計算出物體到模塊的距離。
  • 可以通過適當(dāng)?shù)乃惴ê托?zhǔn)來提高測量的準(zhǔn)確性。

(7)應(yīng)用領(lǐng)域:HC-SR04 模塊被廣泛應(yīng)用于距離測量、避障、無人機(jī)高度控制、智能車輛導(dǎo)航、自動門控制等領(lǐng)域。它具有簡單易用、成本低廉和較好的測距精度等特點(diǎn),適用于許多電子和機(jī)器人項目。

HC-SR04 超聲波測距模塊利用超聲波的發(fā)射和接收來測量物體到模塊之間的距離。它是一種常用的測距模塊,具有簡單易用、成本低廉和較好的測量精度等特點(diǎn),適用于各種距離測量和避障應(yīng)用。

四、項目完整代碼設(shè)計

#include <reg52.h>
#include <intrins.h>

#define LCD_RS P2_0  // 液晶顯示屏的RS引腳連接到P2.0口
#define LCD_RW P2_1  // 液晶顯示屏的RW引腳連接到P2.1口
#define LCD_E  P2_2  // 液晶顯示屏的E引腳連接到P2.2口
#define LCD_D4 P2_4  // 液晶顯示屏的D4引腳連接到P2.4口
#define LCD_D5 P2_5  // 液晶顯示屏的D5引腳連接到P2.5口
#define LCD_D6 P2_6  // 液晶顯示屏的D6引腳連接到P2.6口
#define LCD_D7 P2_7  // 液晶顯示屏的D7引腳連接到P2.7口

#define TRIG P1_0    // 超聲波測距模塊的Trig引腳連接到P1.0口
#define ECHO P1_1    // 超聲波測距模塊的Echo引腳連接到P1.1口

sbit RS = LCD_RS;
sbit RW = LCD_RW;
sbit E = LCD_E;
sbit D4 = LCD_D4;
sbit D5 = LCD_D5;
sbit D6 = LCD_D6;
sbit D7 = LCD_D7;

void delay(unsigned int time) {
    while (time--) {
        for (int i = 0; i < 120; i++);
    }
}

void lcd_enable() {
    E = 1;
    _nop_();
    E = 0;
}

void lcd_write_cmd(unsigned char cmd) {
    RS = 0;
    RW = 0;
    P0 = cmd;
    lcd_enable();
}

void lcd_write_data(unsigned char dat) {
    RS = 1;
    RW = 0;
    P0 = dat;
    lcd_enable();
}

void lcd_init() {
    lcd_write_cmd(0x38);    // 初始化8位數(shù)據(jù)接口,2行顯示,5x7點(diǎn)陣字符
    lcd_write_cmd(0x0c);    // 開啟顯示,不顯示光標(biāo)
    lcd_write_cmd(0x06);    // 光標(biāo)右移,不移動顯示
    lcd_write_cmd(0x01);    // 清屏
}

void lcd_clear() {
    lcd_write_cmd(0x01);
}

void lcd_print(const unsigned char *str) {
    while (*str) {
        lcd_write_data(*str++);
    }
}

unsigned int measure_distance() {
    unsigned int distance;
    TRIG = 0;   // 發(fā)送觸發(fā)信號
    delay(10);
    TRIG = 1;
    delay(12);
    TRIG = 0;
    while (!ECHO);  // 等待回波信號
    TH0 = 0;    // 初始化定時器初值
    TL0 = 0;
    TR0 = 1;    // 啟動定時器
    while (ECHO);  // 等待回波信號結(jié)束
    TR0 = 0;    // 停止定時器
    distance = TH0 * 256 + TL0; // 計算距離
    distance = distance / 58;   // 將時間轉(zhuǎn)換為距離(單位:厘米)
    return distance;
}

void main() {
    unsigned int distance;
    lcd_init();
    lcd_clear();
    while (1) {
        distance = measure_distance();  // 測量距離
        lcd_clear();
        lcd_print("Distance: ");
        if (distance >= 100) {
            lcd_write_data(distance / 100 % 10 + '0');
            lcd_write_data(distance / 10 % 10 + '0');
            lcd_write_data('.');
            lcd_write_data(distance % 10 + '0');
            lcd_print(" m");
        } else {
            lcd_write_data(distance / 10 % 10 + '0');
            lcd_write_data('.');
            lcd_write_data(distance % 10 + '0');
            lcd_print(" cm");
        }
        delay(200);
    }
}

五、總結(jié)

本項目成功地設(shè)計和實現(xiàn)了一個基于STC89C52單片機(jī)和HC-SR04超聲波測距模塊的超聲波測距儀。實現(xiàn)了距離測量和LCD顯示的功能。這個簡單而實用的設(shè)備可以廣泛應(yīng)用于距離測量和自動控制領(lǐng)域,為生活帶來了便利。通過項目的實施,可以獲得豐富的經(jīng)驗和知識。學(xué)會如何正確地連接硬件設(shè)備,理解和操作單片機(jī)的IO口,以及使用超聲波測距模塊進(jìn)行距離測量。同時,可以提高C語言編程的技巧,掌握LCD1602液晶顯示屏的控制方法。

  • 更多詳細(xì)資料請聯(lián)系.docx
    下載

相關(guān)推薦