久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14647|回復: 2
收起左側

基于單片機的汽車后側防撞報警裝置 倒車雷達設計論文下載

[復制鏈接]
ID:199050 發表于 2017-5-10 12:48 | 顯示全部樓層 |閱讀模式


隨著我國經濟的飛速發展,汽車的需求量急劇增加,現在家家戶戶擁有汽車已經成為現實。但是隨著汽車數量的增加,其引發的事故也不斷在增加。倒車引發的汽車事故也占不小的比重,而倒車時車尾存在的盲區是其主導因素,因此解決倒車盲區是安全駕駛必須要解決的問題。

本設計采用以 STC89C52 單片機為核心的低成本、高精度、微型化數字顯示超聲波測距儀的硬件電路和軟件設計方法。整個電路采用模塊化設計,由主程序、數據處理子程序、顯示子程序等模塊組成。各探頭的信號經單片機綜合分析處理,實現超聲波測距儀的各種功能。在此基礎上設計了系統的總體方案,最后通過硬件和軟件實現了各個功能模塊。相關部分附有硬件電路圖、程序流程圖。

該設計通過模塊的組合和軟件的控制,實現了設計要求的功能。本設計在使用上面方便,成本較低。不但完成了這些功能,還達到了汽車倒車的安全指標。



  

隨著我國經濟的建設、社會的進步、人們生活水平的提高,汽車已經與老百姓的生活密不可分,而其作為重要的交通工具,在人們生活中的作用也越來越重要。但是伴隨著汽車數量的增加,同時也由于駕駛者本身技術的不熟練,或是道路及停車條件的影響,導致了交通事故頻發。在汽車事故中,由倒車引發的比重所占較大。因為在倒車時汽車后視鏡有死角,駕駛員目測距離的誤差、視線模糊等原因使汽車倒車存在極大的安全隱患,因此解決倒車盲區是關乎安全駕駛的首要問題。因此汽車產品家族中“倒車防撞系統”應需而生。通過調查,我們發現很多汽車駕駛員都希望自己的車具有發現汽車尾部障礙物的設備,并能為自己提供駕車提示,以此來減少事故的發生,保證行駛安全。倒車檢測及報警系統的產生不僅滿足了廣大駕駛員的需求,從一定程度上幫助人們解決了這一問題


1   緒論
背景與意義 1.1.1 研究背景

隨著社會的進步,工業經濟的發展,汽車作為一項重要的代步工具,已然成為了人們生活中不可或缺的必需品之一。然而,汽車除了在生活中能為人們帶來便利之外,也同時帶來了巨大的問題[1]。一方面,隨著人們經濟實力的增強,汽車數量激增,不僅使道路交通承受巨大壓力,也使得停車場等公共交通場所變得擁擠不堪,給人們開車、停車增加了難度;另一方面,隨著汽車的普及,學習駕駛技術的人員也大幅增加,這就使得道路上增加了許多新手司機,因車輛碰撞而產生的糾紛變得越來越多。而在這其中,倒車問題就是一個典型的問題。

倒車在汽車駕駛過程中有著重要的作用,我們知道,在停車的時候需要用到倒車,在移位時也需要用到倒車,讓行時或者掉頭而寬度不足時,都需要用到倒車,如果倒車技術不過關,會給人們的開車生活帶來困擾。一方面,倒車需要回轉面積,如果技術不過關,需要的回轉面積就會增大,這樣一是會增加停車時所需面積,減少實際停車數量,同時會增加停車時間,造成停車場擁堵;另一方面,新司機通常不善于掌握停車時的方面角度,也不善于判斷障礙物離車身距離,因此會在停車倒庫時帶來麻煩,不僅浪費時間,也容易發生車輛碰撞事件[2]。為了解決倒車難的問題,人們經過不懈的努力,研制出一些倒車輔助裝置在人們倒車的時候提供幫助,例如:雷達警報系統、后視輔助倒車系統等。這些輔助裝置雖然能夠在一定程度上幫助駕駛人員完成倒車過程,但是也存在一些缺點,因此,能夠研制出一個好的倒車防撞系統就顯得十分重要了。

1.1.2 研究意義
  •         理論意義:倒車測距儀涉及到的是單片機控制領域和超聲波測距相關領域。在完成該課題時,必須在單片機控制方面做大量的研究,包括了單片機的內部軟件設計和單片機的外圍電路設計。
  •         實際意義:能使倒車測距儀廣泛投入生活使用。通過汽車倒車儀的距離提示和蜂鳴器產生不同頻率的聲音警示來提醒駕駛員進行安全倒車,為駕駛員提供倒車的安全性和降低駕駛員倒車的難度,從而減少汽車倒車事故的發生,保證廣大駕駛員的生命財產安全和減少汽車安全事故帶來的損失。
1.2 倒車防撞系統的發展

倒車測距儀也就是倒車雷達,在國際和國內上都有很多,超聲波倒車測距系統是其中的一種比較簡單實惠的倒車測距儀。 在短短的幾年時間里,就從第一代發展到了第五代,并在不斷的繼續發展之中。但無論是如何發展,其結構通常包括幾部分,分別是控制器、超聲波傳感器(俗稱探頭)和顯示器(或蜂鳴器)等[3]。

第一代倒車雷達:倒車時通過喇叭提醒。在 90 年代的時候,人們經常能夠聽到“倒車請注意”這種聲音,這就是第一代倒車輔助系統。在司機開始倒車的時候,蜂鳴器發出這種提醒語句,引起路人的注意。這代產品現在的使用范圍很小,只有少部分的汽車還在使用。這代產品并不能夠算作是真正的倒車輔助系統,它只是引起了周圍人的注意,并沒有真正幫助到駕駛員操作汽車。這種產品價格低廉、技術落后,基本屬于淘汰了的產品。

第二代倒車雷達:蜂鳴器聲音提示。從倒車輔助系統的意義上來講,這才是真正的倒車輔助系統的開始。在倒車時,汽車在遇到障礙物時,蜂鳴器會發出聲音,這種聲音并不是一成不變的,越是急促的蜂鳴器聲音代表障礙物與汽車之間的距離越短。這代倒車輔助系統雖然能夠讓駕駛員知道有障礙物的存在,但由于沒有語音或者是數字的顯示,駕駛員并不能知道障礙物與汽車之間的準確距離,在倒車時對駕駛員幫助的實際意義不大。

第三代倒車雷達:距離顯示在數碼波段上。這代產品比起第二代產品的主要優點就是將具體的距離表示了出來。如果是物體,在 1.8 米開始顯示;如果是人,在 0.9 米左右的距離開始顯示。這一代產品主要有兩種顯示方式,一種是數碼顯示,這種顯示值顯示距離,另一種是波段顯示,通過三種不同顏色表示不同距離,綠色代表安全距離,黃色代表警告距離,而紅色則代表危險距離,此時應該停止倒車[4]。

第四代倒車雷達:液晶熒屏動態顯示。這一代產品在屏幕顯示時出現了動態顯示系統,與之前的產品相比較有了一個質的飛躍。只要汽車掛在倒檔上時,液晶屏幕上就會顯示出汽車的圖案,還會將周圍的障礙物情況也形象的顯示出來。這代產品顯示的圖案清晰漂亮,產品外觀也很美觀,安裝時也很方便。這代產品的優點就是安裝方便、精度較高,但是這代產品的抗干擾能力不強,有時會發生誤報的情況。

第五代倒車雷達:智能軌跡倒車系統。這代產品能夠彌補第四代產品的諸如抗干擾能力不強等缺陷和不足,在外觀上也做到了更加的小巧精致,不僅幫助駕駛員更加方便的操作汽車,也對汽車起到了裝飾的作用。


1.3  研究目的及可行性分析
1.3.1研究目的

本次設計的研究內容是根據超聲波測距原理,設計出合適的電路,并由單片機協調控制整個系統的模塊,來完成超聲波脈沖測距的倒車雷達。在汽車以較低的速度進行倒車時,它可以識別出汽車后面的障礙物,測量出車尾與障礙物之間的距離進行實時顯示,發出聲音報警來提醒駕駛員倒車。本設計有望成為汽車駕駛員,尤其是公共汽車以及貨車駕駛員的好幫手,可以有效的減少甚至避免那些視野不良的公共汽車、集裝箱車、食品車、冷藏車等大型汽車的倒車交通事故,尤其適用于夜間輔助倒車、倒車入庫和進入停車場停車到位。本設計對提高汽車行駛安全性具有較大的意義。

1.3.2可行性分析

倒車雷達一般都是近距離測量,而激光測距和紅外測距主要用于遠程,比如測月球到地球距離,或者遠距離無障礙測距,且成本要比用超聲波大,因為光速為

3×108m/s,而市場上的一般單片機的最高頻率在十幾至幾十兆,假如測量的距離在十米左右,即使單片機別的都不做只用來計數,出射光大約在 0.033µs后返回,要求單片機 CLK 為 1/0.033MHz,也就是說時鐘頻率為 30M 的單片機剛剛發出出射激光的命令,反射光就已經在它的下個 CLK 脈沖來到了,更別提計數了,即使用頻率很高的單片機或者其他器件如 FPGA 等都并不能滿足實際所需要的精度。通常精度與收發間隔中得到的計數脈沖個數成正比,超聲波的速度要比光速小的多,傳播時間就比較容易檢測,能夠滿足倒車雷達在精度上的要求,并且超聲波強度容易控制,方向性好,容易實現定向發射雖然超聲波在空氣中傳播時,能量會緩慢衰減,有個最遠測距范圍,但仍能滿足倒車雷達等近距離測量?傊诔暡y距汽車倒車雷達用起來會更加方便,更加令人放心。


1.4  研究內容與文章結構

1.4.1研究的主要內容

設計一個擁有微控制系統的倒車測距儀,該測距儀在汽車尾部一定距離范圍內能夠對汽車尾部距離尾部障礙物的距離做出顯示和提醒。本設計是使用數碼管顯示距離,蜂鳴器和二極管進行報警。因此研究的基本內容如下:

  • 選擇合適的測距方法使該設備實現其功能;
  • 合理的選擇傳感器使設備達到其功能;
  • 控制系統單片機的合理選擇,使該設備既達到功能又最簡化和成本最低化;
  • 硬件電路設計;
  • 單片機系統編程的設計以及優化;
  • 對設計進行調試以及實際檢驗。

1.4.2需要解決的問題

為了達到課題的要求,在設計中需要解決的問題如下所列:

  •            測距方式的選擇。滿足近距離的小誤差測量,需要采用何種測距方式來實現呢,這是首要的測距方法選取。
  •            單片機的選擇。由于當今的單片機種類很多,每種不同類型的單片機均有不同的側重點,因此需要根據所需來選擇一種比較有優勢的控制中心,使該測距儀更加完善。
  •            報警系統的設計。由于報警系統需要實時性的要求,因此在控制系統設計時必須保證報警系統的快速響應。
  •            傳感器的硬件。一切都應該建立在傳感器采集到信號的基礎上,所以必須保證傳感器在快速反應同時能達到信號的準確性。這些要求能通過硬件電路的設計來實現,因此這部分硬件關系到整個系統的優劣。

1.4.3文章結構

該論文的組織構造主要由以下部分組成:

第一章緒論。在這一章中講述了該課題研究的背景、發展、意義、目的和可行性分析以及研究內容。第二章為系統方案設計。這一章中對整個倒車系統進行設計,其中包括單片機、超聲波測距模塊、聲音報告模塊、蜂鳴器報警模塊等。

第三章為整個系統的硬件設計。這一章中介紹了本設計的整體電路,所選用的最小系統、顯示模塊、超聲波收發模塊等各個模塊的電路以及各個模塊在使用中需要注意的事項和選擇要求。

第四章為整個系統的軟件設計。這一章包括了軟件系統的整體設計和介紹,同時也包括了各個模塊的軟件設計。

第五章為整個系統的調試部分。在這一章中介紹了各個模塊的調試,在調試的時候應該注意的問題,比如調試的順序,如何對調試結果進行分析總結最后再做出修改。

1.5  本章小結

本章是在查閱了相關文獻資料后,對該課題研究的背景和意義、倒車雷達的發展、此次設計的目的和可行性作了分析,并詳細敘述了研究的內容。為本次設計作了充分的前期準備工作,同時為設計的順利進行打下了基礎。

2  系統方案設計

本設計是由控制系統(STC89C52 單片機)作為數據的處理中心和整個系統的控制中心,再由顯示報警系統(數碼管以及揚聲器和蜂鳴器報警模塊)、測距系統(超聲波收發模塊)等來組成整個系統,最后達到設計的目的。單片機是整個系統的核心部件,協調各部分的工作。在這一章中將對整體系統的結構進行介紹,并且對各個部分進行詳細的介紹。

2.1  系統整體方案

倒車檢測及報警系統是由超聲波發射端發射信號、超聲波接收端接收信號,再通過端口送到控制中心及單片機內部進行數據的處理判斷以及最后進行顯示報警等。具體是由單片機控制超聲波收發模塊的 Trig 口產生時間大于 10us 的高頻 TTL 信號來驅動超聲波模塊內部連續發出 8 個 40kHz 的周期脈沖,超聲波收發模塊的 Echo 腳檢測回波信號的脈沖寬度。Echo 腳與單片機的 P11 口相連。當出現回波信號時,計數器便開始計數,在檢測到回波脈沖結束的瞬間,計數器停止計數,得到從發射端到接收端的時間 t 后,利用測距公式 s=(t*340/2)(單位:米)可計算出距離量,同時由顯示器顯示。整個系統的方案框圖如圖 2.1 所示。

1_1.002.jpg

圖 1 系統總體結構框圖

從圖 1 結構框圖可以看出來整個系統的模塊比較少,因此在使用起來比較方便、容易操作,比較有使用價值。



2.2 控制系統介紹

在這一節中將對單片機的發展歷史和功能進行總體介紹,并對本設計使用的

STC89C52 單片的內部結構和功能進行了詳細的介紹。

2.2.1 單片機概要

單片機是一種集成電路芯片,是采用超大規模集成電路技術把具有數據處理能力的中央處理器、只讀存儲器、隨機存儲器、多種端口和中斷系統、定時/計數器等功能一起集成到一塊硅片上,從而構成一個小而完善的微型計算機系統,在工業控制領域應用廣泛。

2.2.2 單片機發展歷史

從 1971 年單片機的問世,發展至今經歷了 SCM、MCU、SOC 三大階段,在早期的單片機及 SCM 都是 4 位或者 8 位的。8051 是其中最成功的單片機之一。但隨著工業的擴展,16 位單片機也開始出現,但早期因為價格昂貴使用較少。到了 90 年代的時候電子產品飛速發展,單片機技術迅速發展,32位的出現很快代替了 16 位。當代單片機系統已經不再只在裸機環境下開發和使用,大量專用的嵌入式操作系統被廣泛應用在全系列的單片機上。而在作為掌上電腦和手機核心處理的高端單片機甚至可以直接使用專用的 Windows 和 Linux 操作系統。

2.2.3 STC89C52

STC89C52[5]是美國 ATMEL 公司生產的低功耗、高性能 CMOS8 位單片機,片內含 8k bytes 的可系統編程的 Flash 只讀程序存儲器。器件采用 ATMEL公司的高密度、非易失性存儲技術生產,兼容標準 8051 指令系統及引腳。它集 Flash 程序存儲器既可在線編程(ISP)也可用傳統方法進行編程及通用 8位微處理器于單片芯片中, ATMEL 公司的功能強大,低價位 STC89C52 單片機可為您提供許多高性價比的應用場合,可靈活應用于各種控制領域。STC89C52 單片機引腳定義圖如下圖 2所示。

主要管腳有:

XTAL1(19 腳)和 XTAL2(18 腳)為振蕩器輸入輸出端口,外接 12MHz 晶振。

RST/Vpd(9 腳)為復位輸入端口,外接電阻電容組成的復位電路。

VCC(40 腳)和 VSS(20 腳)為供電端口,分別接+5V 電源的正負端。

P0~P3 為可編程通用 I/O 腳,其功能用途由軟件定義。

1_1.003.jpg

圖 2 STC89C52 單片機引腳圖主要性能參數:

除此以外 STC89C52 還提供一個 5 向量兩級中斷結構,片內振蕩器及時鐘電路。同時,STC89C52 可降至 0Hz 的靜態邏輯操作,并支持兩種軟件可選的節電工作模式?臻e方式停止 CPU 的工作,但允許 RAM、定時/計數器、串行通信口及中斷系統繼續工作。掉電方式保存 RAM 中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。

2.3  測距系統介紹

目前汽車倒車雷達預警系統測距技術主要有激光、毫米波雷達、攝像系統、紅外線、超聲波等,不同的目標探測方式其工作過程和原理有不同之處,但它們的主要目的都是通過前方返回的探測信息判斷前方車輛和本車間的相對距離,并根據兩車間的危險性程度做出相應的預防措施。下面對五種不同的測距技術方案進行介紹和比較。

2.3.1不同方案介紹

激光測距

激光測距裝置[6]是一種光子雷達系統。目前在汽車上應用較廣的激光測距系統可分為非成象式激光雷達和成象式激光雷達。

非成象式激光雷達根據激光束傳播時間確定距離。它的工作原理是:從高功率窄脈沖激光器發出的激光脈沖經發射物鏡聚焦成一定形狀的光束后,用掃描鏡左右掃描,向空間發射,照射在前方車輛或其他目標上,其反射光經掃描鏡、接收物鏡及回輸光纖,被導入到信號處理裝置內光電二極管,利用計數器計數激光二極管啟動脈沖與光電二極管的接收脈沖間的時間差,即可求得目標距離;成象式激光雷達又可分為掃描成象激光雷達和非掃描成象激光雷達。掃描成象激光雷達把激光雷達同二維光學掃描鏡結合起來,利用掃描器控制激光的射出方向,通過對整個視場進行逐點掃描測量,即可獲得視場內目標的三維信息。

毫米波雷達測距:

毫米波[7]是指波長介于 1~10mm 之間的電磁波,雷達是利用目標對電磁波的反射來發現目標并測定其位置的。

攝像系統測距:

CCD 攝像機是一種用來模擬人眼的光電探測器。利用面陣 CCD 可獲得被測視野的二維圖像,但無法確定與被測物體之間的距離,只使用一個 CCD 攝像機的系統稱為單目攝像系統;為獲得目標三維信息,模擬人的雙目視覺原理,利用間隔固定的兩臺攝像機同時對同一景物成象,通過對這兩幅圖像進行計算機分析處理,即可確定視野中每個物體的三維坐標,這一系統稱為雙目攝像系統[8]。

紅外線測距

紅外線測距[9]和激光、超聲波測距在原理上基本相同,均是根據發射波和反射波的時間間隔來判斷目標距離的,車載儀器通過發射并接收前方物體反射回的紅外線,依據信號的強弱及波長的不同,同時分析時間差,可分析出前方物體的性質及與汽車的距離。

超聲波測距

超聲波[10]簡單的說就是音頻超過了人類耳朵所能夠聽到的范圍。在彈性媒質中,如果波源所激起的縱波的頻率在 20Hz 到 20kHz 之間,就能引起人的聽覺。在這一頻率范圍內的振動稱為聲振動,聲振動所激起的縱波稱為聲波;頻率高于 20kHz 的機械波稱為超聲波;頻率低于 20Hz 的機械波稱為次聲波。與光波不同,超聲波是一種彈性機械波,它可以在氣體、液體和固體中傳播。電磁波的傳播速度為 3x108m/s,超聲波在空氣中的傳播速度約為340m/s(常溫下),其速度與電磁波相差 5 個等級,其速度相對電磁波是非常慢的。

2.3.2優缺點對比

超聲波技術主要用于短距離探測,成本低,制作安裝簡便,適應惡劣環境;紅外線技術一般用于夜間環境,對環境適應性差:微波雷達測距和激光測距相對于超聲波測距來講精度更高,定位更準確"攝像系統技術價格較貴;毫米波雷達技術和激光技術的成本很高,所以運用其原理進行測量的設備價格也是相當高的,因而現在只是在比較高級的轎車中才有所應用。綜合以上考慮和實際應用條件,本系統的測距模塊采用的是第五種方案——超聲波測距,并在超聲波測距技術方案的設計上進行了簡化和改進。

2.4 超聲波測距2.4.1 超聲波測距原理

超聲波測距的方法有多種,如相位檢測法[11]、聲波幅值檢測法和渡越時間檢測法

等。相位檢測法通過測量接收波和發射波的相位差來判斷距離的,其測量精度高,但檢測范圍有限,只適合短距離測量;聲波幅值檢測法是根據反射波的幅值大小 來判斷距離的,優點是電路簡單且成本低,缺點是測量精度不高,抗干擾能力差;渡越時間檢測法是通過接收從超聲波發射到接收到超聲波之間的時間差,來判斷距離的,此檢測法介于兩者之間,電路也比較簡單,且有較遠的測量距離和較高的測量精度,所以得到了較為廣泛的應用?紤]到倒車雷達對測量距離和測量精度的要求,本論文采用渡越時間檢測法來檢測車尾要和障礙物之間的距離,其測距原理如圖 3 所示。

測距時由安裝在相同位置的超聲波發射器和超聲波接收器完成超聲波的發射和接收,由定時器計時。定時器記錄下超聲波往返傳播經歷的時間t(s)。常溫下,超聲波在傳播速度約為 340m/s,所以發射點距障礙物之間的距離為:

L =3 4 0t/2

公式(1)

L 為車尾與障礙物的距離,單位為米;t 為計時器記錄的時間,單位為秒。


1_1.004.jpg

圖3 超聲波測距原理圖

單片機內部定時器的計時,實際上是機器周期 T 的計數,設時鐘頻率 Fosc 取

12MHz,而定時器 TIMB 的計數頻率為系統時鐘頻率的 1 個機器周期,設計數值為 N,則

1_1.005.jpg 1_1.006.jpg

1_1.007.jpg

或                            1_1.008.jpg                   

公式(2)

2.4.2超聲波模塊——HY-SRF05 超聲波模塊

HY-SRF05 超聲波測距模塊可提供 2cm 到 450cm 的非接觸式距離感測功能,測距精度可高達 2mm。模塊包括:超聲波發射器、接收器和控制電路。

基本工作原理:

  •         采用 IO TRIG 觸發測距,給一個至少 10us 的高電平信號;
  •         模塊自動發送 8 40kHz 的方波,自動檢測是否有信號返回;
  •         有信號返回,通過 IO ECHO 輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間。測量距離=(高電平時間*聲速(340m/s/2。

實物圖

實物圖如圖 4 所示,VCC 接 5V 電源,GND 為地線,TRIG 觸發控制信號輸入,

ECHO 回響信號輸出。

1_1.009.jpg

圖 4 實物圖

超聲波時序圖

超聲波時序圖反映了整個超聲波測距模塊的測距是如何進行的,當然也顯示了測距的原理。超聲波時序圖如下圖 5 所示。

1_1.010.jpg

1_1.012.jpg

圖 5 超聲波時序圖

對圖 2.5 的解說:當 Trig 腳發出持續時間為 10us 以上的 TTL 觸發信號,模塊內部便連續發出 8 個 40kHz 的周期電平并檢測回波,一旦檢測到回波信號就通過 Echo 輸出回響信號;仨懶盘柕拿}沖寬度與所測的距離成正比。由此通過發射信號到收到的回響信號時間間隔可以計算得到距離。


2.5 顯示報警系統

在這一節中,將介紹該倒車測距儀的提示方式與報警模式。用數碼管顯示距離障礙物的具體距離的同時加入語言報告來警示駕駛人員,同時由蜂鳴器響叫頻率的不同以此來提醒駕駛人員使其在心里有一定的判斷。

1_1.013.jpg

圖6 顯示模塊圖

語音播報芯片相關說明:

   1_1.014.jpg 1_1.015.jpg

圖7芯片引腳圖

1_1.016.jpg

圖8   語音播報模塊原理圖

2.6  本章小結

在這一章中對整個系統的設計方案和所用器件類型分別進行了介紹。其中超聲波測距模塊是關鍵模塊之一,它關系到測距方法的確定以及最終測距誤差等的產生原因提供了分析切入點。最終確定使用超聲波測距模塊進行距離測量,使用數碼管作為顯示模塊,使用蜂鳴器進行提示報警。

3  系統硬件設計

倒車測距儀由超聲波傳感器(俗稱探頭)、控制器、顯示器等組成,采用超聲波測距方法,在控制器的控制下由傳感器發射超聲波信號,當遇到障礙時,產生回波信號,傳感器接收到回波信號后,經控制器進行數據處理,判斷出障礙物的位置,由顯

示器顯示距離并根據距離發出警報信號,從而達到安全倒車的目的。

3.1   系統總電路圖

根據系統的方案設計,設計出系統的電路框圖如 3.1 所示。以及各個模塊器件的接口性質,運用 protel 軟件[14]畫出系統電路圖如圖 3.2 所示。

               1_1.017.jpg             

3.1.1 系統工作原理

當電池安裝好且位于 PCB 板子上的電源開關已經被按下,系統供電。整個系統的運作為:超聲波在標準空氣中的傳播速度為 331.45 米/秒,約為340 米/秒。單片機通過 P10 口控制超聲波收發模塊的 Trig 腳發出超聲波,模塊內部發射脈沖信號并檢測回波,當接收端一檢測到回波信號計數器就開始計數,回波信號結束則計數完成。數據被送入 STC89C52 中進行處理計算,并將計算結果顯示到數碼管上,同時控制蜂鳴器的鳴叫。

3.1.2 最小系統電路

單片機最小系統包括了單片機、晶振電路、復位電路以及電源電路。下面將會介紹部分電路的設計。

晶振電路:

STC89C52 內部有一個用于構成振蕩器的高增益反相放大器,引腳 X1 和 X2 分別是此放大器的輸入端和輸出端。時鐘可以由內部方式產生或外部方式產生。內部方式的時鐘電路所示,在 X1 和 X2 引腳上外接定時元件,內部振蕩器就產生自激振蕩。

定時元件通常采用石英晶體和電容組成的并聯諧振回路。電容值 30pF,電容值的大

小可對頻率起微調的作用,晶體振蕩頻率為 11.0592MHz。晶振電路如圖 10所示。

1_1.018.jpg


                               圖 10 晶振電路圖

復位電路

復位是單片機的初始化操作。其主要功能是把 PC 初始化為 0000H,使單片機從 0000H 單元開始執行程序。除了進入系統的正常初始化之外,當由于程序運行出錯或操作錯誤使系統處于死鎖狀態時,為擺脫困境,也需按復位鍵重新啟動。RESET 引腳是復位信號的輸入端。復位信號是高電平有效,其有效時間應持續24個振蕩周期(即二個機器周期)以上。整個復位電路包括芯片內、外兩部分。外部電路產生的復位信號(RESET)送至施密特觸發器,再由片內復位電路在每個機器周期的 S5P2 時刻對施密特觸發器的輸出進行采樣,然后才得到內部復位操作所需要的信號。復位電路的電路圖也如上圖 10所示。


3.2 超聲波測距模塊設計

由 STC89C52 的 P10、P11、P12 接口出來,分別接超聲波收發模塊 HY-SRF05 的 Trig、Echo、Out 腳,以此來達到脈沖觸發以及數據傳輸處理的目的。圖 11 是超聲波模塊與單片機連接的電路圖。

1_1.019.jpg

圖 11 超聲波收發模塊電路圖

3.3 蜂鳴器的硬件設計

在這一節中,介紹的是整個系統中的另外一個具有提示功能的器件——有源蜂鳴器。蜂鳴器的具體電路圖如 3.7 所示。由于此次設計使用的是有源蜂鳴器,我們可以知道蜂鳴器需要一個驅動電路,這里用三極管進行驅動。同時在電阻左側接一個上拉電阻到單片機電源端。

1_1.020.jpg

圖 12 蜂鳴器電路圖  

3.4  本章小結

在這一章中我們介紹了 STC89C52 單片機最小系統及其周圍電路的電路設計,其中包括了復位電路、晶振電路、電源電路、顯示器電路和蜂鳴器電路。通過本章節的詳細介紹不僅對硬件設計有了直觀的了解,還對設計中需要注意的地方都一一考慮到了,做到了硬件功能的實現。


4  系統軟件設計

本次設計的軟件設計部分采用 C51 語言進行編程,運用模塊化的程序設計思想,對具有不同功能的模塊程序進行分別編程,其他模塊程序包括:數據處理的程序、顯示程序和蜂鳴器報警程序等,以便移植或調用。這樣使軟件層次結構清晰,有利于軟件的調試和修改,在完全正確之后再進行組裝、調試和燒錄。

4.1  主程序設計
4.1.1 系統軟件實現原理

整個設計的關鍵即是對距離的測量,再通過單片機處理測量得到的數據,就能精確的實現測距。在測距中,各種信號對聲速的影響都將干擾到測距的準確性,其中超聲波的余波信號對整個設計中測距的干擾的影響比較大。超聲波接收回路中的超聲波信號一共有兩種:第一種波信號為余波信號,就是當發射探頭發射出信號之后,超聲波接收探頭馬上就接收到的超聲波信號,實際就是超聲波的發射信號;另一種波信號就是有效信號,即經過障礙物表面反射回來的超聲波回波信號,也是所需要測量的距離數值。

在進行超聲波測距時,由于使用的是超聲波測距模塊 HY-SRF05,按照本系統的

測距需要,需要得到超聲波的傳輸時間 T,進行運算以得到車子與障礙物的距離 S。

如何得到超聲波的傳輸時間 T 呢?

采用單片機的 P10 口與 Trig 連接,控制發射端產生 10us 以上的 TTL 觸發電平;模塊內部自動產生 8 個 40kHz 的脈沖串并檢測回波; P11 口與Echo 口連接,當接收端檢測到回波單片機內部的計數器 T0 就開始計數,回波的寬度就決定了計數值大小,由此便得出超聲波的的傳輸時間 T。

4.1.2系統程序構建

系統設計框圖

超聲波測距系統軟件部分采用模塊化設計思想,將系統分為主程序、初始化處理模塊、中斷檢測模塊、延時處理模塊、數據處理模塊和顯示模塊,其軟件程序系統結構圖如下圖13 所示。

1_1.021.jpg

圖 13系統軟件設計框圖

主程序流程圖:

整個系統的組成在進入主函數后將進行初始化,打開顯示刷新中斷利用中斷進行刷新。再進入測距函數后,每一次測距都是單片機進行掃描實現,同時定時器也在這里開啟。在處理接收到的數據信號后就關閉發射中斷處理完后再開啟中斷,最后記錄下來計數器的時間再由處理數據程序進行計算。最后由操作程序進行相應的操作。根據該軟件系統結構框圖,得到系統的主程序實現流程圖。整個程序的編程環境是在 keil 環境下用 c 語言進行編程。而用 c語言作為編程的主要原因是其編程比較簡單,對編程者要求不是很高;c 語言編出來的程序可讀性很高;編出的程序可以廣泛的進行移植和借用等。圖 14為系統的主程序流程圖。

1_1.022.jpg

圖14主程序流程圖

系統主程序

系統的主程序首先是顯示屏初始化,設置定時器 T0 的工作模式為 MODE1,并且 STC89C52 的定時器計數器為 16 位。延遲一段時間之后,開啟中斷,開啟定時器,位總中斷 EA 置到允許位。在超聲波接收端一接收到回波信號時,計數器就開始計數,直到回波高電平結束;夭ㄐ盘柕膶挾扰c計數值成正比。然后利用計數器得到的值計算超聲波發射和接收之間所用的時間,并調用測距公式對距離進行計算。經過單片機的處理得到的距離 S,送至顯示器,并將距離顯示出來;同時判斷 S 的大小,看蜂鳴器是否鳴叫。之后進行下一次的測距工作。

程序如下:

void main(void)

{

              TMOD=0x11;                               //設T0為方式1,GATE=1;

              TH0=0;

              TL0=0;         

              TH1=0xf8;                               //2MS定時

              TL1=0x30;

              ET0=1;                                                        //允許T0中斷

              ET1=1;                                             //允許T1中斷

              TR1=1;                                             //開啟定時器

              EA=1;                                                                      //開啟總中斷            

              while(1)

              {

                            while(!RX);                            //當RX為零時等待

                            TR0=1;                                          //開啟計數

                            while(RX);                            //當RX為1計數并等待

                            {

                            TR0=0;                                          //關閉計數

                            flag_bofang=1;

                            }

                            Conut();                                          //計算

                            if(Mode==0)

                            {

                            if(abs(S-current_S)>=2)

                            {

                            current_S=S;

                            bofang(Feng,disbuff);

                            }

                            }

              }

}

            

4.2   測距模塊的設計

4.2.1 測距模塊的設計思想

根據回波信號的脈沖寬度得知計時器的數據以及距離公式:距離=(340*時間/2)

(m),可以計算得到小車距離障礙物的距離。

4.2.2測距模塊的程序

void Conut(void)

{

              time=TH0*256+TL0;                //讀出T0的計時數值

              TH0=0;

              TL0=0;                                                          //清空計時器

              S=(time*1.7)/100;     //算出來是CM

              if(Mode==0)                                            //非設置狀態時

              {

                            if((S>=700)||flag==1) //超出測量范圍顯示“-”

                            {            

                                          Feng=0;                                //蜂鳴器報警

                                          flag=0;

                                          disbuff[0]=10;                 //“-”

                                          disbuff[1]=10;                 //“-”

                                          disbuff[2]=10;                 //“-”

                            }

                            else

                            {

                                          //距離小于報警距

                                          if(S<=BJS)

                                          {

                                                        Feng=0;              //報警

                                          }

                                          else  //大于

                                          {

                                                        Feng=1;                            //關閉報警            

                                          }

                                          disbuff[0]=S%1000/100;                            //將距離數據拆成單個位賦值

                                          disbuff[1]=S%1000%100/10;

                                          disbuff[2]=S%1000%10 %10;

                            }

              }

              else

              {

                                          Feng=1;

                                          disbuff_BJ[0]=BJS%1000/100;

                                          disbuff_BJ[1]=BJS%1000%100/10;

                                          disbuff_BJ[2]=BJS%1000%10 %10;

              }

}



4.3  蜂鳴器報警程序
4.3.1報警模塊思想

主程序得到的結果是通過顯示屏顯示,并且還要控制蜂鳴器通過不同頻率的鳴叫來提醒,以及 LED 燈的閃爍。在該設計中,利用的是單片機 I/O 端口引腳來控制。并且通過計數的方式來控制兩個引腳進行高低互換產生控制信號。蜂鳴器報警程序的程序流程圖如圖15 所示。

1_1.023.jpg

圖 15蜂鳴器程序流程圖

4.3.2 蜂鳴器程序

if(S<50)

{buzz=1;

DelayMs(S*50);   buzz=0;

DelayMs(S*5);

}  if(S>50) buzz=1;}

判斷蜂鳴器報警距離是否小于 50cm,若超過 50cm 則蜂鳴器不報警,若小于 50cm 則報警。

4.4 本章小結

本章在上一章硬件電路設計的基礎上進行了系統軟件的設計。首先進行的是整個系統的設計,在設計之前需要明確要達到什么樣的功能怎樣實現這些功能,才能分模塊分別進行設計。因此本章里面包括了系統的總體邏輯關系及軟件控制流程圖;其次,就是需要對各子程序進行設計,設計依據便是硬件電路。因此整個系統的軟件程序劃分為中斷處理程序、測距程序、蜂鳴器程序、等。

5  系統調試及誤差分析

在調試的過程中分硬件調試和軟件調試。其中第一階段為硬件的調試,一般會遇到的情形有:邏輯錯誤、原器件損壞、可靠性差、電源故障等。本設計中使用的是萬用表進行硬件檢測;第二階段為軟件的調試,最初的軟件調試為錯誤檢測,比如編程的錯誤,第二步為進行邏輯錯誤檢查,最后進行整個程序各個部分運行時間的調試。第三節為誤差分析,針對本次設計中出現的誤差分析可能產生的原因,提出改進的方法。

5.1   硬件的調試

硬件調試是一項細心的工作,一定要有耐心。硬件調試工具需要示波器、萬用表等,同時需要主芯片調試開發軟件及相應的仿真器。硬件調試首先要熟悉原理圖原理

和PCB布局,然后根據功能模塊進行相關調試。

5.1.1硬件調試流程

其中硬件調試部分為:

  •            邏輯錯誤:它是由設計錯誤或加工過程中的工藝性錯誤所造成的。這類錯誤包括錯線、開路、短路等。
  •            元器件失效:一是器件本身已損壞或性能不符合要求;二是組裝錯誤造成元件失效,如電解電容、集成電路安裝方向錯誤等。
  •            可靠性差:因其可靠性差的原因很多,如金屬化孔、接插件接觸不良會造成系統時好時壞,經不起振動;走線和布局不合理也會引起系統可靠性差。
  •            電源故障:若樣機由電源故障,則加電后很容易造成器件損壞。電源故障包括電壓值不符合設計要求,電源引線和插座不對,功率不足,負載能力差等。
  •            調試方法:包括多級調試和聯機調試。在調試過程中要針對可能出現的故障認真分析,直至檢查出原因并排除。

5.2   軟件的調試5.2.1 軟件調試的方法

將編制的程序投入實際運行前,用手工或編譯程序等方法進行測試,修正語法錯誤和邏輯錯誤的過程。這是保證計算機信息系統正確性的必不可少的步驟。編完計算機程序,必須送入計算機中測試。軟件調試一般分為以下四個階段:編寫程序并查錯;在C語言的編譯系統中編譯源程序;對程序進行編譯連接,并及時發現程序中存在的錯誤;改正錯誤。

在軟件中調試程序時出現的問題有:

  • 在程序中有的函數名未定義;
  • 在抄錄程序時,少錄入一些字符,如:“{”、“-”等符號而出現錯誤;
  • 有一些函數名錄入時少寫一個字母或順序顛倒;
  • 沒有注意函數名的調用及定義;
  • 芯片引腳定義出錯而導致沒有實驗現象。

在軟件調試過程中,對出現的錯誤進行了認真的分析和修改,多次調試成功后,能夠很好的達到預定的設計效果。  



5.2.2  軟件調試后的結果

編好的程序進行細心的檢查后,再通過 keil 軟件把程序燒進單片機,進行實物演示。把電池安裝好,打開電源開關,同時按下板子上的電源按鈕,顯示屏幕點亮,在系統前方移動障礙物,可以明顯聽見蜂鳴器的鳴叫的頻率發生了變化。但需要注意的是蜂鳴器由于程序設定的限制,只能在 50cm 內的距離進行響叫。屏幕實時顯示了距離障礙物的距離?梢钥吹剑航Y果達到了預期,較為滿意。如圖 5.2 所示。

5.3  誤差分析

5.3.1性能分析

雖然結果和預想的有很大的差距,但總體來說已經基本上達到了要求,理想上超聲波測距能達到5米左右,而我們所能實現的最大距離只有3米,造成這種原因我想有:我采用的是11.0592MHZ的晶振,理論上是按照12MHZ的晶振計算的,所以對系統造成了一定的誤差;沒有考慮環境因素對本次設計的影響,造成測量結果有不小的誤差。

5.3.2 超聲波測距注意問題
  • 超聲波傳播受多次路徑影響。
  • 超聲波發射功率。
  • 余波干擾。
  • 注意干擾。
  • 電源穩定性較差。
  • 測量時出現誤差。
  • 實際測距范圍與被測物表面材料有關。

5.3.3  超聲波測距改善方法
  •         避免路徑影響。第一是超聲波發射間隔時間增長;第二就是超聲波發射模塊做小,同時探頭 T R 平行于電路板,減小其來回反射路徑。
  •         提高發射功率。可以增加測量距離,可以采用變壓器實現升壓。
  •         盡量避免余波的干擾。增加 T/R 之間的安裝距離;軟件解決。在發射完后,延長一段時間再開啟檢測超聲波發射的信號。這就是超聲波存在最小測量距離的主要原因。
  •         避免產生干擾。避免手接觸超聲波電路板。
  •         提高電源的穩定性。
  •         測量距離時,應盡量保證,傳感器軸線與被測物表面垂直。
  •         一般不要測量表面為毛料的物體表面。


5.4  本章小結

在這一章中,對整個設計的硬件和軟件出現的錯誤和問題進行了分析和解決,并對設計出的實物出現誤差的可能原因進行了分析總結,且提出了可能的解決方法。先是對硬件方面的檢驗,隨后是對軟件程序的編寫和調試。其中顯示模塊的調試程序、測距的調試程序、蜂鳴器的調試程序以及對整個程序進行調試。最后完成對整個倒車系統的軟件部分進行調節,調試也是十分重要的一個環節,調試通過才能實現最后的功能。

  

本設計主要介紹了基于 STC89C52 單片機而設計出的一款倒車檢測及報警系統。                    

整個設計中超聲波測距是實現功能的關鍵,把來自超聲波測距模塊的信號傳輸到單片機端口并由單片機內部 CPU 執行相應的處理程序。設計中采用數碼管模塊進行顯示和用蜂鳴器進行報警,其特點是根據距離障礙物的遠近不同,蜂鳴器的變頻鳴叫。整個設計的編程是用 keil 編程軟件來完成的,程序語言采用的是 C 語言,程序內容包括主程序、中斷程序控制觸發高電平的產生、檢測回波并計數、計算距離、蜂鳴器報警、數碼管模塊顯示。本設計完成的汽車倒車檢測及防撞系統操作方便,測距的范圍可以在 2cm-700cm 之間,基本能夠達到設計要求。

另一方面本設計雖然實現了功能,但是還存在一些缺點,如測量精度不高,測量過程會遭受多種因素的影響。因為實際使用的倒車測距儀工作環境多變,尤其是溫度變化對測距的影響,如果將溫度補償加到設計中,系統將更加完善。本系統在程序上比較繁瑣,測距移動的過程中可能反應時間不夠快,因此需要優化其靈敏度。

  

通過本次畢業設計的完成,檢驗了自己大學所學的知識和自己的綜合實踐能力,同時也對自己也有不少提高。更重要的是將自己獨立解決事情的能力提高了,為自己以后的工作積累下了又一筆不菲的寶貴財富。

在這次設計中,首先應該感謝的是我本次設計的導師李向明老師。感謝他給予我的大力幫助和對我畢業設計的精心指導。在整個設計階段,從開始的題目分析到硬件的設計以及后面軟件的設計,李老師都給予了我很大的幫助;在硬件的搭建和調試過程中李老師也幫我進行了問題的分析,并給我提了很多寶貴的意見和建議。在這里我十分感謝我的導師,感謝他對我們盡職盡責。

其次我要感謝實驗室的老師們,感謝他們為我提供了一些硬件和實驗器材的使用。衷心的謝謝你們!當然我更得感謝我父母對我的辛勤付出,是他們讓我有這個機會進入武漢華夏理工學院這所學習氛圍濃厚的理工科大學,使我能用四年的時間安心學習,學習知識,學習做人,學習如何學習。

最后要感謝的是我偉大的母校——武漢華夏理工學院,它為我提供了一個良好的學習環境和優良的教學資源。更要感謝這四年來所有傳授我知識的老師們,感謝他們的無私奉獻,將他們所知道的無私地教導了我們。同時也感謝我身邊的所有朋友在生活和學習上給我的幫助。


原理圖:





程序:
  1. #include //器件配置文件

  2. #include

  3. #include

  4. #include               

  5. //傳感器接口

  6. sbit RX  = P2^3;

  7. sbit TX  = P2^2;

  8. //按鍵聲明

  9. sbit S1  = P3^1;

  10. sbit S2  = P3^2;

  11. sbit S3  = P3^6;



  12. sbit DIAN=P0^5;

  13. //蜂鳴器

  14. sbit Feng= P2^0;



  15. //變量聲明

  16. unsigned int  time=0;

  17. unsigned int  timer=0;

  18. unsigned char posit=0;

  19. unsigned long S=0;

  20. unsigned long BJS=50;//報警距離80CM



  21. unsigned long current_S=0;

  22. char num=0;

  23. //模式 0正常模式 1調整

  24. char Mode=0;

  25. bit  flag=0;



  26. unsigned char const discode[] ={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0x80};              //數碼管顯示碼0123456789-和不顯示



  27. unsigned char disbuff[4]                 ={0,0,0,0};                            //數組用于存放距離信息

  28. unsigned char disbuff_BJ[4]              ={0,0,0,0};//報警信息

  29. sbit W0=P2^4;

  30. sbit W1=P2^5;

  31. sbit W2=P2^6;

  32. sbit W3=P2^7;

  33. //延時100ms(不精確)

  34. void delay(void)

  35. {

  36.     unsigned char a,b,c;

  37.     for(c=10;c>0;c--)

  38.         for(b=38;b>0;b--)

  39.             for(a=130;a>0;a--);

  40. }



  41. //按鍵掃描

  42. void Key_()

  43. {

  44.               //+

  45.               if(S1==0)

  46.               {

  47.                             delay();                 //延時去抖

  48.                             delay();                 //延時去抖

  49.                             flag_bofang=0;

  50.                             while(S1==0)

  51.                             {

  52.                                           P1=P1|0x0f;

  53.                             }

  54.                                           BJS++;              //報警值加

  55.                             if(BJS>=151) //最大151

  56.                             {

  57.                                           BJS=0;

  58.                             }

  59.               }

  60.               //-

  61.               else if(S2==0)

  62.               {

  63.                             delay();

  64.                             delay();                 //延時去抖

  65.                             flag_bofang=0;

  66.                             while(S2==0)

  67.                             {

  68.                                           P1=P1|0x0f;

  69.                             }

  70.                                           BJS--;              //報警值減

  71.                             if(BJS<=1)              //最小1

  72.                             {

  73.                                           BJS=150;

  74.                             }

  75.               }

  76.               //功能

  77.               else if(S3==0)                            //設置鍵

  78.               {

  79.                             delay();

  80.                             delay();                 //延時去抖

  81.                             flag_bofang=0;

  82.                             while(S3==0)

  83.                             {

  84.                                           P1=P1|0x0f;

  85.                             }

  86.                                           Mode++;                            //模式加

  87.                                           num=0;

  88.                             if(Mode>=2)                            //加到2時清零

  89.                             {

  90.                                           Mode=0;

  91.                             }            

  92.               }

  93. }

  94. /**********************************************************************************************************/

  95. //掃描數碼管

  96. void Display(void)                                                      

  97. {

  98.               //正常顯示

  99.               if(Mode==0)

  100.               {

  101.                             num++;

  102.                             if(num==1)

  103.                             {

  104.                                           W3=1;

  105.                                           W0=1;

  106.                                           P0=~discode[disbuff[0]];

  107.                                           DIAN=0;

  108.                                           W1=0;            

  109.                             }

  110.                             else if(num==2)

  111.                             {

  112.                                           W1=1;

  113.                                           P0=~discode[disbuff[1]];

  114.                                           W2=0;

  115.                             }

  116.                             else if(num>=3)

  117.                             {

  118.                                           W2=1;

  119.                                           P0=~discode[disbuff[2]];

  120.                                           W3=0;

  121.                                           num=0;

  122.                             }

  123.               }

  124.               //報警顯示

  125.               else

  126.               {

  127.                             num++;

  128.                             if(num==1)

  129.                             {

  130.                                           W3=1;

  131.                                           P0=~0xCE;                              //11001110

  132.                                           W0=0;

  133.                             }

  134.                             else if(num==2)

  135.                             {

  136.                                           W0=1;

  137.                                           P0=~discode[disbuff_BJ[0]];

  138.                                           DIAN=0;

  139.                                           W1=0;            

  140.                             }

  141.                             else if(num==3)

  142.                             {

  143.                                           W1=1;

  144.                                           P0=~discode[disbuff_BJ[1]];

  145.                                           W2=0;

  146.                             }

  147.                             else if(num>=4)

  148.                             {

  149.                                           W2=1;

  150.                                           P0=~discode[disbuff_BJ[2]];

  151.                                           W3=0;

  152.                                           num=0;

  153.                             }

  154.               }

  155. }

  156. /**********************************************************************************************************/

  157. //計算

  158. void Conut(void)

  159. {

  160.               time=TH0*256+TL0;                //讀出T0的計時數值

  161.               TH0=0;

  162.               TL0=0;                                                          //清空計時器

  163.               S=(time*1.7)/100;     //算出來是CM



  164.               if(Mode==0)                                            //非設置狀態時

  165.               {

  166.                             if((S>=700)||flag==1) //超出測量范圍顯示“-”

  167.                             {            

  168.                                           Feng=0;                                //蜂鳴器報警

  169.                                           flag=0;

  170.                                           disbuff[0]=10;                 //“-”

  171.                                           disbuff[1]=10;                 //“-”

  172.                                           disbuff[2]=10;                 //“-”

  173.                             }

  174.                             else

  175.                             {

  176.                                           //距離小于報警距

  177.                                           if(S<=BJS)

  178.                                           {

  179.                                                         Feng=0;              //報警

  180.                                           }

  181.                                           else  //大于

  182.                                           {

  183.                                                         Feng=1;                            //關閉報警            

  184.                                           }

  185.                                           disbuff[0]=S%1000/100;                            //將距離數據拆成單個位賦值

  186.                                           disbuff[1]=S%1000%100/10;

  187.                                           disbuff[2]=S%1000%10 %10;

  188.                             }

  189.               }

  190.               else

  191.               {

  192.                                           Feng=1;

  193.                                           disbuff_BJ[0]=BJS%1000/100;

  194.                                           disbuff_BJ[1]=BJS%1000%100/10;

  195.                                           disbuff_BJ[2]=BJS%1000%10 %10;

  196.               }

  197. }

  198. /**********************************************************************************************************/

  199. //定時器0

  200. void zd0() interrupt 1                             //T0中斷用來計數器溢出,超過測距范圍

  201. {

  202.               flag=1;                                                                                    //中斷溢出標志

  203. }

  204. /**********************************************************************************************************/

  205. //定時器1

  206. void zd3() interrupt 3                             //T1中斷用來掃描數碼管和計800MS啟動模塊

  207. {

  208.               TH1=0xf8;

  209.               TL1=0x30;                                                        //定時2ms

  210.               Key_();                                                                      //掃描按鍵

  211.               Display();                                                        //掃描顯示

  212.               timer++;                                                        //變量加

  213.               if(timer>=400)                                          //400次就是800ms

  214.               {

  215.                             timer=0;

  216.                             TX=1;                                                    //800MS  啟動一次模塊

  217.                             _nop_();


  218. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整論文下載(word格式,可編輯,帶完整程序):
基于單片機的倒車檢測及報警系統設計.docx (924.96 KB, 下載次數: 93)
回復

使用道具 舉報

ID:199050 發表于 2017-5-10 12:52 | 顯示全部樓層
謝謝

回復

使用道具 舉報

ID:484435 發表于 2020-6-9 19:32 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91不卡在线 | 久久在线精品 | 免费在线日韩 | 一区二区三区在线观看视频 | 欧美激情精品久久久久久变态 | 亚洲成人三级 | 久久精品亚洲欧美日韩久久 | 亚洲综合日韩精品欧美综合区 | 99久久久久久久久 | 欧美成人精品激情在线观看 | 国产精品欧美一区喷水 | 成在线人视频免费视频 | 一区二区三区四区在线 | 日日做夜夜爽毛片麻豆 | 日批av| 草草视频在线播放 | 青草久久免费视频 | 精品欧美一区二区在线观看欧美熟 | 成人国产精品一级毛片视频毛片 | 天天插天天射天天干 | 污污的网站在线观看 | 中文字幕在线一区二区三区 | 久久精品16| 五月婷婷丁香婷婷 | 在线观看免费国产 | 亚洲一区二区三区四区五区中文 | www.成人免费视频 | 麻豆av在线免费观看 | www..99re | 国产成人免费视频网站高清观看视频 | 最新中文字幕在线 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 狠狠的操 | 天天天操操操 | 国产精品福利在线观看 | 成人在线小视频 | 日韩欧美在线一区 | 国户精品久久久久久久久久久不卡 | 一区二区三区四区国产 | 国产精品亚洲一区二区三区在线 | 日韩精品久久久久 |