液位測量及控制廣泛應(yīng)用于工業(yè)、生活等領(lǐng)域,由于許多測量環(huán)境條件及其惡劣,例如對具有腐蝕性的液體的液位測量。顯然,傳統(tǒng)的液位測量設(shè)備已不能滿要求。因此,一些基于超聲波的非接觸式液位測量控制技術(shù)應(yīng)運而生。本文利用單片機的強大功能,通過硬件和軟件的完美結(jié)合,設(shè)計、實現(xiàn)了一種基于超聲波的液位檢測控制系統(tǒng)。系統(tǒng)由液位測量模塊、數(shù)據(jù)顯示模塊、液位控制模塊、超限報警模塊和參數(shù)設(shè)置模塊組成,通過HC-SR04超聲波測距模塊采集數(shù)據(jù),經(jīng)過單片機進(jìn)行數(shù)據(jù)處理,然后進(jìn)行實時液位顯示,同時發(fā)出液位控制信號和報警控制信號。最后,對所實現(xiàn)的實物進(jìn)行了測試。測試結(jié)果表明系統(tǒng)功能符合設(shè)計要求,能達(dá)到易控制、穩(wěn)定性強、測量精度高、安全性高、功耗低的預(yù)期目的。
目 錄
第一章 緒論 第一節(jié) 課題的提出和意義 一、課題的提出 二、課題的意義 第二節(jié) 國內(nèi)外液位檢測控制技術(shù)的發(fā)展現(xiàn)狀 第三節(jié) 本課題主要研究內(nèi)容 第二章 整體方案設(shè)計 第一節(jié) 方案設(shè)計架構(gòu) 第二節(jié) 超聲波測量技術(shù) 一、超聲波的定義及特性 二、超聲波測距原理 第三節(jié) 本章小結(jié) 第三章 硬件設(shè)計 第一節(jié) 單片機的最小系統(tǒng)組成 第二節(jié) LCD1602液晶顯示模塊 一、LCD1602液晶顯示簡介 二、顯示內(nèi)容 第三節(jié) 設(shè)置模塊 第四節(jié) 報警模塊 第五節(jié) 液位測量模塊 一、HC-SR04簡介 二、引腳接線方式 三、模塊工作原理 第六節(jié) 液位控制模塊 第七節(jié) 本章小結(jié) 第四章 軟件設(shè)計 第一節(jié) 編譯語言與編譯思想 第二節(jié) 軟件設(shè)計 一、總體設(shè)計 二、關(guān)鍵模塊程序設(shè)計 第三節(jié) 本章小結(jié) 第五章 仿真及調(diào)試 第一節(jié) 仿真 第二節(jié) 系統(tǒng)測試 第三節(jié) 本章小結(jié) 結(jié) 論 致 謝 參考文獻(xiàn) 附 錄 一、英文原文 二、英文翻譯 三、源程序
第一章 緒論
第一節(jié) 課題的提出和意義
一、課題的提出 在日常生產(chǎn)生活中,常遇到液位測量及控制問題。比如在一些工業(yè)生產(chǎn)自動化系統(tǒng)中對容器中物料位或者液位的測量,又特別是極其惡劣的環(huán)境下的測量,比如對具有腐蝕性的液體液位的測量,傳統(tǒng)的采用差位分布電極的電極法,通過電脈沖去檢測液位高度,電極長期處于這種環(huán)境中,極易被電解、腐蝕,從而很容易在短時間內(nèi)就失去靈敏性。顯然,在這種檢測環(huán)境對測試設(shè)備的抗腐蝕性要求較高。因此傳統(tǒng)的液位測量設(shè)備已不能滿足現(xiàn)代工業(yè)生產(chǎn)的需要。超聲波液位檢測系統(tǒng)是一種新興的液位測量系統(tǒng),它利用了超聲波傳感技術(shù)的原理,采取一種非接觸檢測方法,能夠?qū)崿F(xiàn)對工業(yè)生產(chǎn)自動化系統(tǒng)中液位、物料位等進(jìn)行檢測。此外,超聲波具有很好的束射性和方向性,一般也不會對人體造成傷害;诔暡ǖ臋z測控制系統(tǒng)具有實施方便、迅速,測量精度高,易于實時控制,所以有非常廣闊的應(yīng)用領(lǐng)域。 隨著人們生活需求和工業(yè)標(biāo)準(zhǔn)的提高,液位檢測技術(shù)愈來愈受到社會的重視,檢測的精度以及實時性要求也愈來愈高,另外還要求檢測系統(tǒng)對被檢測對象具有自動控制功能?梢哉f,在現(xiàn)在以及今后的很長一段時間里,液位的檢測及控制系統(tǒng)的研究也將依然是一個重要的課題。 二、課題的意義 為了改善工人的工作環(huán)境,降低工人的勞動強度,節(jié)省財力、物力,避免資源的浪費,降低工業(yè)生產(chǎn)成本,特別是對某些特殊的生產(chǎn)環(huán)境,比如:易爆、高溫、低溫、毒性、腐蝕性、高壓、低壓、有輻射性、易揮發(fā)等液體的液位進(jìn)行檢測,對于這些對身體健康有一定損害的測量環(huán)境,不易在實地直接進(jìn)行測量及控制,而這種新興的液位測量及控制技術(shù)就顯得特別的重要。 在現(xiàn)代工業(yè)自動化生產(chǎn)系統(tǒng)中,對容器中液體的液位測量及控制是必不可少的。一般情況下,在生產(chǎn)過程中主要是通過液位的檢測來確定容器里原料的剩余量,以保證生產(chǎn)過程中的各環(huán)節(jié)物料平衡,以及為進(jìn)行成本核算提供可靠的依據(jù);另外,在連續(xù)生產(chǎn)情況下,通過液位檢測及控制以保證液位始終在規(guī)定的范圍內(nèi),以保證生產(chǎn)的正常進(jìn)行,也能更好的保證產(chǎn)品產(chǎn)量和產(chǎn)品質(zhì)量。可見,液位測量及控制在現(xiàn)代工業(yè)生產(chǎn)過程中已起著舉足輕重的作用。 僅從液位測量這一方面來講,隨著各行業(yè)的不斷發(fā)展,液位測量已應(yīng)用到愈來愈多的領(lǐng)域,不僅僅是用于各種管道、容器內(nèi)的液位檢測,還用于水庫水渠、江河湖海等水位的檢測。傳統(tǒng)的液位檢測手段在這些領(lǐng)域中已經(jīng)無法達(dá)到所需要的精確性,因此,超聲波液位測量這種測量方式已經(jīng)成為一種新方法被廣泛的應(yīng)用。
第二節(jié) 國內(nèi)外液位檢測控制技術(shù)的發(fā)展現(xiàn)狀
早期的液位檢測大多采用機械原理。近年來,隨著電子技術(shù)應(yīng)用到越來越廣泛的領(lǐng)域,也逐步向液位檢測及控制方向發(fā)展,并且研究出來了一些新的液位檢測技術(shù)。盡管在傳統(tǒng)技術(shù)中也滲透了一些先進(jìn)的電子技術(shù)及計算機技術(shù),在結(jié)構(gòu)和功能上也都有很大提升,但總體來說,目前我國的液位檢測技術(shù)還是比較落后,液位檢測方法也依然有一些不足之處,如果從國外進(jìn)口我們所需的高精度液位檢測設(shè)備,價格又比較高。因此,分析液位檢測控制技術(shù)當(dāng)前國內(nèi)外形勢,發(fā)展屬于我們自己國家的液位檢測技術(shù)就顯得非常重要。目前,國內(nèi)外在液位檢測方面采用的技術(shù)更多的是傳統(tǒng)檢測技術(shù),按其采用的檢測技術(shù)及使用方法分類就已多達(dá)十余種。我們常見的液位檢測技術(shù)有:浮體式液位測量儀表、人工檢尺儀、磁致伸縮液位儀、差壓式液位測量儀表、激光液位儀、雷達(dá)液位儀、超聲波液位測量儀表、伺服式液位測量儀表。 超聲波液位檢測儀是我們最常見的一種,也是所有非接觸式液位檢測儀表中用途最廣、發(fā)展最快的一種。它具有一些其它液位測量技術(shù)無法比擬的優(yōu)點,它可以適應(yīng)腐蝕性強、高壓、低壓、有輻射性、有毒性、高溫、低溫、易揮發(fā)、易爆等特殊環(huán)境,因此,能應(yīng)用的范圍比其它的檢測技術(shù)更廣泛。隨著現(xiàn)在科學(xué)技術(shù)的飛速發(fā)展,液位的檢測方法也變得更先進(jìn),精度也有了很大的提高。尤其是傳感器技術(shù)和單片機技術(shù)的進(jìn)步使得液位檢測技術(shù)得到了更進(jìn)一步的優(yōu)化。超聲波在液位測量中的應(yīng)用愈來愈廣,但從現(xiàn)在的發(fā)展水平看來,超聲波在液位檢測控制系統(tǒng)中的應(yīng)用還存在著一定的限度,因此研究超聲波的液位檢測技術(shù)還有更寬更長的路要走,無論是在技術(shù)領(lǐng)域還是在產(chǎn)業(yè)領(lǐng)域它都具有極其廣闊的發(fā)展空間。 在不遠(yuǎn)的將來,基于超聲波的液位檢測控制技術(shù)將會有更大更廣的應(yīng)用范圍。它不但可以幫助人們解決很多生活中的難題,還可以作為一種科學(xué)探測和研究的手段。
第三節(jié) 本課題主要研究內(nèi)容
本設(shè)計以簡易水槽和水泵搭建實驗?zāi)P,鑒于單片機的液位測量控制裝置具有工作壽命長、測量精確、耗能低、重復(fù)性好等優(yōu)點,設(shè)計以單片機為基礎(chǔ)、超聲波測距為核心的液位測量控制系統(tǒng)。本系統(tǒng)具有液位實時檢測、控制、超限報警等功能。設(shè)計的內(nèi)容包括: 設(shè)計基于超聲波液位檢測控制系統(tǒng)方案,實現(xiàn)液位檢測、數(shù)據(jù)顯示及閉環(huán)控制等功能; 設(shè)計、實現(xiàn)檢測控制器相關(guān)的軟硬件模塊; 實現(xiàn)演示系統(tǒng)開發(fā)。
第一節(jié) 方案設(shè)計架構(gòu)
根據(jù)實際生產(chǎn)生活需要,結(jié)合課題設(shè)計要求,本設(shè)計應(yīng)該具有正常液位范圍設(shè)定、液位測量、超限報警、液位顯示、液位控制五大功能。方案設(shè)計架構(gòu)如圖2.1所示。
1.001.jpg (20.3 KB, 下載次數(shù): 104)
下載附件
2017-5-3 20:51 上傳
圖2.1 液位測量控制系統(tǒng)設(shè)計方案
正常液位設(shè)定在該系統(tǒng)中對應(yīng)輸入設(shè)備,即后文所說的設(shè)置系統(tǒng)?梢酝ㄟ^設(shè)置系統(tǒng)將人的信息傳遞給系統(tǒng),使得系統(tǒng)工作具有一定的目的性。實時液位測量是系統(tǒng)數(shù)據(jù)采集的唯一來源,用HC-SR04 超聲波測距模塊采集的數(shù)據(jù)經(jīng)過單片機處理過后將成為后面液位顯示、超限報警、液位控制等功能實現(xiàn)的重要依據(jù),因此,實時液位測量是系統(tǒng)能否正常工作的關(guān)鍵所在。超限報警是在實時液位與設(shè)定正常液位范圍比較之后做出的反應(yīng),提示相關(guān)工作人員該系統(tǒng)檢測控制的對象正處于一種非正常狀態(tài)(在這里主要指液位過高或過低)。液位顯示是將單片機通過HC-SR04 測距模塊采集回來的實時液位數(shù)據(jù)顯示出來,便于相關(guān)工作人員了解具體情況。液位控制模塊作為該系統(tǒng)唯一的執(zhí)行器,主要功能是通過排水泵和進(jìn)水泵保證液位始終在人為預(yù)先設(shè)定的一個正常范圍內(nèi)。
第二節(jié) 超聲波測量技術(shù)
在第一節(jié)整體方案框圖中可以很明顯的看出,實時液位測量是系統(tǒng)工作的整個流程中的關(guān)鍵部分,因此,與此緊密相關(guān)的超聲波液位測量技術(shù)在這里起著舉足輕重的作用。 一、超聲波的定義及特性 頻率大于20000Hz的聲波稱之為超聲波。 超聲波具有吸收特性、束射特性、聲壓、高功率作用四個基本特性,四個基本特性使超聲波在傳播介質(zhì)中對應(yīng)熱學(xué)、化學(xué)、光學(xué)、力學(xué)和電學(xué)五種效應(yīng)。超聲波的特點是它能在各種媒質(zhì)中傳播;波長短,因而分辨率很好;聲束尖銳,因而聲能比較集中;在不同的介質(zhì)的界面上都會發(fā)生折射、反射、散射等一般現(xiàn)象。利用聲在媒質(zhì)中的衰減、反射、共振、聲速這些現(xiàn)象可以測量物質(zhì)的成分、比重、厚度等?捎糜跍y距、測速、清洗、焊接、碎石、殺菌消毒等。在軍事、醫(yī)學(xué)、農(nóng)業(yè)、工業(yè)上都會有很多的應(yīng)用。利用超聲波脈沖反射回波這一特點可以實現(xiàn)超聲波測距。 二、超聲波測距原理 空氣中的超聲波每秒的傳播距離約為340米,因此,若能測出在介質(zhì)中超聲波的傳播時間,就能計算出超聲波在該介質(zhì)中傳播的距離。超聲波測距就是通過測定超聲波在測量儀與被測對象間的傳播的時間來計算出聲波傳送的距離的。常用的超聲波測距主要采用以下兩種方法: 1、直接式超聲波測距法 測量超聲波發(fā)射器發(fā)射超聲波到超聲波接收器接收到超聲波的時間t1,已知超聲波在傳播介質(zhì)中的傳播速度V,那么超聲波發(fā)射器與被測對象兩者之間的距離S1為:
1.002.jpg (635 Bytes, 下載次數(shù): 107)
下載附件
2017-5-3 20:51 上傳
1.003.jpg (1.34 KB, 下載次數(shù): 97)
下載附件
2017-5-3 20:51 上傳
(式2-1) 2、反射式超聲波測距法 將超聲波發(fā)送器的發(fā)射方向面對被測對象,并發(fā)射超聲波,在發(fā)射超聲波的同時計時開始,超聲波在介質(zhì)中傳播,遇到被測物后就立即反射回來,超聲波接收器在接收到被測對象反射回來的超聲波后計時停止,這樣就可以計算出超聲波從發(fā)射器到被測物間來回傳播的時間t2,超聲波在該傳播介質(zhì)中的傳播速度V已知,從而發(fā)射器到被測物的距離S2可用下式計算出來:
1.004.jpg (1.76 KB, 下載次數(shù): 109)
下載附件
2017-5-3 20:51 上傳
(式2-2)
第三節(jié) 本章小結(jié)
對于任何的系統(tǒng)設(shè)計,整體方案的擬定是極其重要的,就如同一篇文章的提綱。本課題是基于單片機的超聲波檢測控制系統(tǒng)設(shè)計,其中的各個模塊的選定都必須符合實際情況需要,并且最好能保證成本低廉、選材容易。 超聲波測量技術(shù)是本次設(shè)計中的關(guān)鍵所在,由于超聲波具有其傳播距離遠(yuǎn)、能量散失緩慢、方向性強等優(yōu)點,因此常常應(yīng)用于距離的測量。如測距儀和液位測量儀等都可以通過超聲波原理來實現(xiàn)。超聲波測距也廣泛應(yīng)用于倒車?yán)走_(dá)、建筑工地以及井深、液位、管道長度等一些工業(yè)現(xiàn)場,在這些場合利用超聲波測量常常計算簡單、比較快捷,并且容易做到實時控制,能夠保證足夠高的測量精度,因此在測控系統(tǒng)的研制上也得到了極其廣泛的應(yīng)用。本課題就是做一套以AT89C51單片機和超聲波測距模塊為核心的低成本、高精度、微型化、低能耗、具有數(shù)字顯示功能的超聲波液位檢測及控制系統(tǒng)。
第三章 硬件設(shè)計
第一節(jié) 單片機的最小系統(tǒng)組成
所謂單片機的最小系統(tǒng),就是用最少元件組成的能夠工作的單片機系統(tǒng)。MCS-51系列單片機的最小系統(tǒng)至少應(yīng)該包括單片機、時鐘電路、復(fù)位電路、輸入/輸出設(shè)備,如圖3.1所示。
1.005.jpg (21.38 KB, 下載次數(shù): 88)
下載附件
2017-5-3 20:51 上傳
圖3.1 單片機最小系統(tǒng) 在最小系統(tǒng)的時鐘電路中,XTAL1(單片機的19腳)和XTAL2(單片機的18腳)是獨立的輸入、輸出反相放大器,這兩個腳能夠利用石英晶振為單片機配置片內(nèi)振蕩器,此外,也可以直接通過XTAL1 、XTAL2由外部時鐘驅(qū)動。本次設(shè)計中采用的是內(nèi)部時鐘模式,也就是用單片機的內(nèi)部振蕩電路時鐘。在XTAL1 、XTAL2的引腳上分別外接與需要相匹配元件,即一個石英晶體和兩個電容,內(nèi)部振蕩器就可以產(chǎn)生自激振蕩。通常情況下,晶振的值可以在1.2~12MHz 之間任意選擇,在本次設(shè)計中采用的是11.0592M 的石英晶振。通過改變和晶振并聯(lián)的兩個電容的大小可以微調(diào)頻率。如果選用石英晶振,并聯(lián)電容可在20~40pF之間任意選擇,本此設(shè)計使用的是30pF,是單片機設(shè)計中常用的一個經(jīng)典值。 復(fù)位電路在單片機系統(tǒng)中也是非常關(guān)鍵的,當(dāng)單片機死機或程序跑飛時,就需要進(jìn)行復(fù)位操作。MCS-51系列單片機的復(fù)位引腳是RST(第9管腳),當(dāng)RST出現(xiàn)2個10ms或者更長的高電平時,單片機就會執(zhí)行復(fù)位操作。若RST一直為高電平,單片機就將會處于循環(huán)復(fù)位的狀態(tài),當(dāng)然這種情況沒有什么實際的意義。 通常有兩種最基本形式進(jìn)行單片機的復(fù)位操作,即開關(guān)復(fù)位和上電自動復(fù)位,這兩種最基本復(fù)位方式都已包含在圖3.1中。上電自動復(fù)位過程如下:上電瞬間,有極電容兩端電壓是不會變的,由于此時電容負(fù)極和復(fù)位引腳RST相連,所以電壓全部加在電阻上,RST的輸入為高電平,芯片進(jìn)行復(fù)位操作,隨之然后5V電源開始給電容充電,電阻上的電壓慢慢減小,最后約為零,芯片就開始正常工作。將復(fù)位按鍵并聯(lián)在電容的兩端,當(dāng)復(fù)位按鍵沒有按下時電路實現(xiàn)的是以上所說的上電復(fù)位。而在芯片正常工作后,可以通過按下復(fù)位按鍵使RST管腳出現(xiàn)高電平從而實現(xiàn)手動復(fù)位。理論上只要RST 管腳上持續(xù)10ms或者更長的高電平,就可以使單片機進(jìn)行有效復(fù)位操作。以上設(shè)計圖中所示的復(fù)位電阻和電容均為經(jīng)典值,實際應(yīng)用的時候可用同一數(shù)量級合適的電阻和電容替換,設(shè)計時也可根據(jù)自身設(shè)計需要自行計算RC充電時間以選取合適的電阻、電容值,以保證單片機的復(fù)位電路可靠,符合實際需求。
第二節(jié) LCD1602液晶顯示模塊
一、LCD1602液晶顯示簡介 液晶顯示有多種分類方式,常?梢园匆壕э@示器的顯示方式分為字符式、段式、點陣式。除了最簡單的黑白顯示方式外,液晶顯示器還有彩色、多灰度等顯示方式,另外,還可以調(diào)節(jié)芯片的特定引腳電壓控制其顯示對比度。如果根據(jù)驅(qū)動方式來分,還可以分為主動矩陣驅(qū)動(Active Matrix)、單純矩陣驅(qū)動(Simple Matrix)、靜態(tài)驅(qū)動(Static)三種。 根據(jù)實際情況綜合考慮,本次設(shè)計采用的是LCD1602液晶顯示。LCD1602利用液晶的物理特性,用電壓去控制顯示的區(qū)域,有電就有顯示,這樣即可以顯示出與輸出信息相對應(yīng)的圖形。這種液晶顯示器具有厚度薄、易于實現(xiàn)全彩色顯示、適用于大規(guī)模集成電路直接驅(qū)動的特點,目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機、移動通信工具等各個領(lǐng)域。 本次設(shè)計的LCD1602液晶顯示模塊與單片機連接如圖3.2。
1.006.jpg (21.52 KB, 下載次數(shù): 109)
下載附件
2017-5-3 20:51 上傳
圖3.2 LCD1602液晶顯示模塊設(shè)計圖 二 、顯示內(nèi)容 本次設(shè)計的液晶顯示模塊顯示內(nèi)容分為兩行兩列,其內(nèi)容分別為實時液位(DIS)、設(shè)定值的高限(DH)、液位狀態(tài)(U(正常)、H(過高)、L(過低))、設(shè)定值的低限(DL)。
第三節(jié) 設(shè)置模塊
設(shè)置模塊共設(shè)計了四個按鍵,主要任務(wù)是設(shè)定預(yù)設(shè)液位的正常范圍(預(yù)設(shè)正常液位范圍的上、下限)。如圖3.3。
1.007.jpg (13.1 KB, 下載次數(shù): 77)
下載附件
2017-5-3 20:51 上傳
圖3.3 設(shè)置系統(tǒng) Key1:模式(DH或者DL)選擇,用于設(shè)置預(yù)設(shè)正常液位的范圍; Key2:選擇每次改變值的大小,即每次遞增(減)1或者0.1; Key3:遞加; Key4:遞減。
第四節(jié) 報警模塊
報警模塊共設(shè)置兩個燈光報警器。當(dāng)液位超過預(yù)設(shè)范圍的最大值時,led1亮;當(dāng)液位低于預(yù)設(shè)范圍的最小值時,led2亮。如圖3.4所示。
1.008.jpg (6.69 KB, 下載次數(shù): 84)
下載附件
2017-5-3 20:51 上傳
圖3.4 報警系統(tǒng)
第五節(jié) 液位測量模塊
一、HC-SR04簡介 HC-SR04超聲波測距模塊的有效測量距離為2cm-400cm,檢測的精度為1 mm,模塊包括信號控制電路、超聲波接收器和超聲波發(fā)射器。其實物圖如圖3.5,原理圖如圖3.6。
1.009.jpg (21.05 KB, 下載次數(shù): 96)
下載附件
2017-5-3 20:51 上傳
圖3.5 HC-SR04 實物圖
1.010.jpg (27.76 KB, 下載次數(shù): 109)
下載附件
2017-5-3 20:51 上傳
圖3.6 HC-SR04原理圖 HC-SR04電氣參數(shù)如表3.1:
表3.1 HC-SR04電氣參數(shù)
二、引腳接線方式 VCC:供5V電源; Trig:輸入出發(fā)控制信號; Echo:輸出回響信號; GND:接地。
三、模塊工作原理 超聲波測距模塊采用單片機I/O口觸發(fā)測距,給模塊的控制端口一個10us以上的高電平信號,模塊就會啟動工作模式,自動發(fā)送8個40khz的方波,然后在超聲波接收端開始自動檢測是否有返回信號。若有信號返回,就通過一個I/O口輸出高電平,超聲波從超聲波發(fā)射器到被測對象之間來回傳播所用的時間就是這個高電平的保持時間,這個過程時序圖如圖3.7。
1.011.jpg (10.09 KB, 下載次數(shù): 98)
下載附件
2017-5-3 20:51 上傳
圖3.7 HC-SR04模塊工作時序圖
第六節(jié) 液位控制模塊
液位控制模塊分為進(jìn)水系統(tǒng)和排水系統(tǒng)。當(dāng)液位超過預(yù)設(shè)液位范圍的最大值時,排水系統(tǒng)運行,通過微型水泵將槽內(nèi)的水陸續(xù)排除,直到槽內(nèi)液位低于預(yù)設(shè)范圍的最大值;當(dāng)液位低于預(yù)設(shè)液位范圍的最小值時,進(jìn)水系統(tǒng)運行,通過微型水泵向槽內(nèi)加水,直到槽內(nèi)液位高于預(yù)設(shè)范圍的最小值?刂颇K的設(shè)計如圖3.8所示。
1.012.jpg (9.84 KB, 下載次數(shù): 97)
下載附件
2017-5-3 20:51 上傳
1.013.jpg (8.28 KB, 下載次數(shù): 86)
下載附件
2017-5-3 20:51 上傳
a b 圖3.8 液位控制模塊
第七節(jié) 本章小結(jié)
一個大的系統(tǒng)總是可以分為多個模塊的,每個模塊又是這個系統(tǒng)正常實現(xiàn)所有功能不可缺少的部分。在最初的系統(tǒng)設(shè)計中常常用這種化大為小的設(shè)計方式,從而使得設(shè)計過程變得更有條理。特別是每個模塊可以分給不同的人進(jìn)行設(shè)計時,這樣就加快了方案的設(shè)計進(jìn)度。
第四章 軟件設(shè)計
第一節(jié) 編譯語言與編譯思想
匯編語言和C語言是目前單片機的兩種主流編程語言。匯編語言的優(yōu)點是代碼短、程序效率高,但存在可移植性可讀性差的缺點;C語言的優(yōu)點是可移植性好、可讀性好,但存在代碼較長、代碼效率較低的缺點?紤]到本次設(shè)計的超聲波液位測量控制系統(tǒng)要求不太高,本次超聲波液位測量控制系統(tǒng)的設(shè)計采用C語言編寫。 本次軟件設(shè)計采用程序設(shè)計模塊化的思想,對實現(xiàn)不同功能的程序進(jìn)行分段編程,這樣不但使得整個程序有比較清晰的層次和結(jié)構(gòu),而且還很有利于軟件的后期調(diào)試和修改。按本次設(shè)計的需要,單片機主要任務(wù)是發(fā)出控制信號使超聲波模塊開始工作并自動發(fā)出40kHz的脈沖,控制信號驅(qū)動超聲波探頭器發(fā)射超聲波,同時單片機通過一個I/O口檢測回波,該I/O口在有回波時輸出高電平,高電平持續(xù)時間即是超聲波的傳播時間,由此得出超聲波在測距系統(tǒng)與被測物間的往返傳輸時間t,再用前文推導(dǎo)的公式(式2-2) 可求出待測距離S。
第二節(jié) 軟件設(shè)計
單片機液位控制系統(tǒng)的軟件首要功能是控制超聲波的發(fā)射和接收,測量介質(zhì)中超聲波的傳播時間,再根據(jù)介質(zhì)中超聲波的傳輸傳播速度來計算出被測對象與測量儀器之間的距離,并將計算出來的數(shù)據(jù)加上相關(guān)標(biāo)識用LCD1602液晶顯示器顯示出來,同時使單片機輸出控制信號以控制報警系統(tǒng)和液位控制系統(tǒng)。要實現(xiàn)上述功能,軟件具體來說應(yīng)該包含初始化、參數(shù)讀入、超聲波發(fā)射、超聲波傳接收、計時、距離計算、數(shù)據(jù)顯示、超限報警、液位控制等功能模塊。程序設(shè)計流程圖如圖4.1所示。
1.014.jpg (13.68 KB, 下載次數(shù): 95)
下載附件
2017-5-3 20:51 上傳
過高 過低 圖4.1 程序設(shè)計流程圖 二、關(guān)鍵模塊程序設(shè)計 1、超聲波測距子程序 通過測量超聲波模塊與液面的傳播時間來計算液面高度,流程圖如圖4.2。
1.015.jpg (12.63 KB, 下載次數(shù): 90)
下載附件
2017-5-3 20:51 上傳
圖4.2 超聲波測距程序設(shè)計流程圖 測距程序如下: void CJ(void) { Trig=1; //啟動一次檢測模塊 delay_20us(); Trig=0; //停止向檢測模塊Trig端發(fā)送高電平 while(!Echo); //無回波時等待 TR0=1; //計時開始 while(Echo); //有回波是計數(shù)并繼續(xù)等待 TR0=0; time=TH0*256+TL0; /計算超聲波的傳播時間 TH0=0; TL0=0; distance=145.05-time*0.172;// 計算距離,算出來的單位是mm if(distance<=0)distance=0; if(distance>=145.05)distance=145.05; // distance=(int)(distance*100)/100; //強制保留2位小數(shù) } 2、按鍵控制子程序 通過按鍵控制程序?qū)崿F(xiàn)參數(shù)設(shè)定,其中主要是正常液位范圍的設(shè)定。包括設(shè)置參數(shù)的模式選擇、單次遞增(減)值大小(1或0.1)、遞減、遞增。程序如下: float set_distance(float set_dis) { if(!key3) { delay(10); if(!key3) { while(!key3); set_dis=set_dis+b; if(set_dis>=99) set_dis=99; } } …… return set_dis; } 3、顯示子程序 顯示程序?qū)崿F(xiàn)數(shù)據(jù)的實時顯示,包括實時液位,允許的最高液位和最低液位,液位正常與否的狀態(tài)。程序如下: void display(uchar x,uchar y,uchar sz,uint num)//x:位置 y:第幾排 sz:位數(shù) num:值 { uchar a[5]={0}; uchar i=0; uint Temp=num; while(Temp) { a[ i] = Temp%10; Temp = Temp/10; i++; } if(y%2==1) write_Com(0x80+x-1); else write_Com(0xc0+x-1); for(i=sz;i>0;i--) { write_Data(0x30+a[i-1]); } } 4、主程序 主程序通過調(diào)用個子程序?qū)崿F(xiàn)各功能。主程序如下: void main() { uint w; init(); while(1) { w++; if(w==5) { w=0; CJ(); } BJ(); display_Init(); } } 5、延時子程序 在系統(tǒng)編程中,延時程序的應(yīng)用是極其普遍的,按鍵的延時去抖就是一個很好的例子。本次設(shè)計的演示程序如下: void delay(uint x) { uint i,j; for(j=0;j<x;j++)[ size][="" p][p="24," null,="" left][size="12pt]" for(i="0;i
第三節(jié) 本章小結(jié)
程序是一個系統(tǒng)運行必不可少的一部分,如果沒有程序,硬件設(shè)備就如同虛設(shè)。因此,程序的編寫及變得極其重要。本次程序設(shè)計語言選用我們比較熟悉的是C語言,而且編寫過程中又采用了模塊化方法,從而更易于編寫和理解,也有助于后期的修改和調(diào)試。
第五章 仿真及調(diào)試
第一節(jié) 仿真
結(jié)合Protues和Keil軟件,將設(shè)計的程序與電路在電腦上仿真,由于超聲波液位測距模塊沒有相應(yīng)的仿真元件,故超聲波液位測距模塊無法進(jìn)行仿真,現(xiàn)將實時液位設(shè)為一固定值,通過改變設(shè)定正常液位的上下限來實現(xiàn)仿真。 如圖5.1,實時液位為25.0mm,上限為25.5mm,下限為24.5mm,即當(dāng)實時液位在正常液位范圍內(nèi)時,報警系統(tǒng)和水位控制系統(tǒng)均無異常。
1.016.jpg (40.4 KB, 下載次數(shù): 123)
下載附件
2017-5-3 20:51 上傳
圖5.1 仿真(液位正常)
如圖5.2,實時液位為25.0mm,上限為24.5mm,下限為23.5mm,即當(dāng)實時液位高于正常液位范圍內(nèi)時,報警系統(tǒng)led1亮,排水系統(tǒng)啟動。
1.017.jpg (45.14 KB, 下載次數(shù): 79)
下載附件
2017-5-3 20:51 上傳
圖5.2 仿真(液位過高)
通過以上仿真,可以說明編寫的程序是正確的,并且能夠?qū)崿F(xiàn)預(yù)期的所有功能,這也有利于后面的實物功能實現(xiàn)。
第二節(jié) 系統(tǒng)測試
在程序編譯完成并仿真調(diào)試成功和硬件電路制作完成之后,將編譯好的程序下載到本次設(shè)計所用的單片機上,進(jìn)行下一步的綜合調(diào)試。綜合調(diào)試成功后對檢測控制的重復(fù)一致性和誤差進(jìn)行相關(guān)分析,從而進(jìn)一步優(yōu)化該系統(tǒng)的性能,以達(dá)到預(yù)期設(shè)計的檢測及控制要求。硬件實物圖如5.3所示。 現(xiàn)在設(shè)置正常液位下限為80.5mm,上限為99.5mm。 當(dāng)實時液位為72.2mm,即液位小于80.5mm時,系統(tǒng)紅色水位過低報警燈亮啟,并啟動進(jìn)水系統(tǒng),使得液面逐漸升高。實物運行圖5.4。
1.018.jpg (45.1 KB, 下載次數(shù): 92)
下載附件
2017-5-3 20:51 上傳
圖5.3 硬件實物圖
1.019.jpg (44.91 KB, 下載次數(shù): 93)
下載附件
2017-5-3 20:51 上傳
圖5.4 系統(tǒng)調(diào)試圖(一)
當(dāng)實時液位為88.8mm,即液位大于80.5mm且小于99.5時,液位在正常范圍之內(nèi),報警系統(tǒng)和水位控制系統(tǒng)均無異常。實物運行圖如圖5.5。
1.020.jpg (43.68 KB, 下載次數(shù): 84)
下載附件
2017-5-3 20:51 上傳
圖5.5 系統(tǒng)調(diào)試圖(二) 當(dāng)實時液位為110.4mm,大于99.5mm時,系統(tǒng)綠色水位過高報警燈亮啟,并啟動排水系統(tǒng),使得液面逐漸下降,直到在正常液位范圍內(nèi)。實物運行圖如圖5.6。
1.021.jpg (43.83 KB, 下載次數(shù): 90)
下載附件
2017-5-3 20:51 上傳
圖5.6 系統(tǒng)調(diào)試圖(三)
第三節(jié) 本章小結(jié)
在仿真及調(diào)試中總會遇到一些或大或小的問題,在本次設(shè)計的仿真及調(diào)試中主要遇到以下三個問題: 控制電機起停的繼電器不工作。 問題分析及解決方案:記過反復(fù)實驗發(fā)現(xiàn)造成上問題的原因是單片機發(fā)出的控制信號經(jīng)過一個功率放大器后仍然太弱,不足以能夠控制繼電器。于是在之前的基礎(chǔ)上再加一個功率放大器,最后實現(xiàn)了單片機輸出控制信號通過繼電器控制進(jìn)、排水泵的起停。 用一個電源為該系統(tǒng)中所有模塊時,系統(tǒng)不能正常工作。 問題分析及解決方案:查明是水泵負(fù)載過大導(dǎo)致系統(tǒng)出現(xiàn)上述問題。解決辦法是為液位控制模塊單獨供電。并且設(shè)計水泵的額定電壓為3.3V,系統(tǒng)提供的電壓為5V不適合為該水泵供電。 在液位控制系統(tǒng)的作用下,液位在設(shè)置的上限和下限附近時出現(xiàn)抖動(進(jìn)(排)水系統(tǒng)時而運行時而停止、報警燈持續(xù)閃爍)。 問題分析及解決方案:通過反復(fù)試驗觀察發(fā)現(xiàn)是由于液位采集頻率過高,水泵停止時水管中還未排出的那段水返回原來的水槽內(nèi)。以液位在上限處為例:液位從超出設(shè)定上限在排水泵的作用下剛好低于設(shè)定上限時,排水泵停止工作,此時排水管中還未排出的那段水又會在重力作用下回到被測液位的水槽中,導(dǎo)致水槽中的水位再一次上升,從而又會再次啟動排水泵,如此循環(huán)。 解決辦法是通過改變控制程序降低液位采集頻率,增大兩次液位檢測的時間間隔,從而增大兩次水泵控制信號發(fā)出的間隔時間,從而增大這期間水泵的排水量,使得水泵停止后水管中為排出的那段水即使回到水槽中也不會超過設(shè)定的液位上限。
結(jié) 論
本設(shè)計以單片機為核心,利用超聲波測距原理,通過軟件程序的編寫、實物的制作、以及軟硬件的綜合調(diào)試,最終實現(xiàn)系統(tǒng)的液位測量及控制功能。系統(tǒng)的實物包括超聲波發(fā)射及接收模塊、報警模塊、顯示模塊、設(shè)置模塊、液位控制模塊等;在軟件設(shè)計上采用了模塊化的程序設(shè)計思想,提高了程序編寫的效率。本設(shè)計能夠?qū)?cm~400cm的距離內(nèi)進(jìn)行有效的測量,其精度可以達(dá)到1mm,并達(dá)到了低成本、高精度、低功耗、微型化、美觀的預(yù)期設(shè)計目的。可見基于單片機設(shè)計的超聲波液位測量控制系統(tǒng)具有硬件結(jié)構(gòu)簡單、工作可靠等特點。本系統(tǒng)不僅可以用于液位檢測,距離測量,還可廣泛應(yīng)用于諸如移動機器人精確定位等各種檢測控制系統(tǒng)中。
附 錄 一、英文原文
1.022.jpg (77.61 KB, 下載次數(shù): 88)
下載附件
2017-5-3 20:51 上傳
1.023.jpg (49.66 KB, 下載次數(shù): 92)
下載附件
2017-5-3 20:51 上傳
1.024.jpg (55.14 KB, 下載次數(shù): 100)
下載附件
2017-5-3 20:51 上傳
1.025.jpg (68.77 KB, 下載次數(shù): 84)
下載附件
2017-5-3 20:51 上傳
1.026.jpg (56.5 KB, 下載次數(shù): 83)
下載附件
2017-5-3 20:51 上傳
1.027.jpg (68.15 KB, 下載次數(shù): 85)
下載附件
2017-5-3 20:51 上傳
1.028.jpg (76.79 KB, 下載次數(shù): 86)
下載附件
2017-5-3 20:51 上傳
1.029.jpg (40.98 KB, 下載次數(shù): 82)
下載附件
2017-5-3 20:51 上傳
1.030.jpg (95.38 KB, 下載次數(shù): 96)
下載附件
2017-5-3 20:51 上傳
二、英文翻譯 一項超聲波距離測量中可行且精確的確定飛行時間的技術(shù) Tarik Namas and Murat Dogruel Sarajevo國際大學(xué)自然科學(xué)工程系 電子郵箱: mdogruel@ius.edu.ba 摘要——這篇文章提出了一種關(guān)于在空中高精度超聲波距離測量的高效算法的數(shù)字信號處理技術(shù)。開始發(fā)射脈沖和響應(yīng)峰值之間的時差用于確定飛行時間(TOF)。過濾后的峰值響應(yīng)決定于使用Hilbert變換和適當(dāng)?shù)膾佄锞插值處理過的一個特殊的復(fù)雜信號的幅值。該方法有效地消除了接收信號中的噪聲和干擾,使得TOF與接收到的信號強度無關(guān)。實驗結(jié)果表明精度優(yōu)于千分之一。 【關(guān)鍵詞】 超聲波測距 飛行時間 Hilbert變換 拋物線插值 1、簡介 許多科學(xué)和工業(yè)應(yīng)用需要距離測量,一些地方需要非接觸式測量?諝庵械木嚯x通常通過使用超聲波傳感器測量,這類系統(tǒng)價格便宜并能提供很好的性能。 根據(jù)不同的應(yīng)用程序中,有很多使用超聲波技術(shù)來測量距離[1]。 它主要測量原理是根據(jù)估計飛行時間(TOF)來計算距離。接收機和發(fā)射機之間的距離d = v×TOF ,v是聲音在傳播介質(zhì)中的速度(通常情況下是空氣速度) [2]。 一個簡單而快速典型的方法來確定TOF是閾值方法[3],然而,這種方法不是首選,因為由于噪聲和錯誤的振幅,所以接收到的信號并不是固定的。 確定TOF的另一種方法是互相關(guān)技術(shù)[4]。時間在接收和傳輸信號之間的哪個地方互相關(guān)的最大,就在這里取得TOF。 在距離測量中,一個不同的概念就是相移法。通過測量信號發(fā)射和接收之間的相移計算距離[5]。組合這兩個以前的概念被認(rèn)為是第三個甚至更準(zhǔn)確的概念[6]。 我們采用一種新方法確定TOF,即使用時間(樣本)的峰值(接收信號)和開始發(fā)射脈沖的不同響應(yīng)。 避免使用被噪聲影響的閾值水平,超聲波前置放大器的峰值轉(zhuǎn)換成舉行脈沖,從而決定TOF。 2、建議方法。 從理論上講,一個典型雙二階系統(tǒng)的振蕩響應(yīng)如圖1。這個信號大約代表當(dāng)一個發(fā)射機發(fā)射脈沖信號時超聲波接收器接收信號的期望值。
1.031.jpg (15.72 KB, 下載次數(shù): 89)
下載附件
2017-5-3 20:51 上傳
1.032.jpg (16 KB, 下載次數(shù): 87)
下載附件
2017-5-3 20:51 上傳
圖1 超聲換能器的預(yù)期響應(yīng) 圖2 一個典型的超聲收發(fā)短脈沖的實際響應(yīng) 另一方面,超聲波收發(fā)器的實際響應(yīng)是短脈沖,如圖2所示。由于非線性影響,這個形狀足夠接近,但不完全與圖1中的理論情況下相同。 這種方法介紹了輕松、準(zhǔn)確地找到在脈沖開始和響應(yīng)峰值間的時差,可以概括為如下: 1.使用數(shù)據(jù)采集設(shè)備,在延遲之間傳輸大量短脈沖; 2.獲得傳播的信號和收到的信號,確定開始脈沖的樣本; 3.消除噪聲的影響,從接收到的信號Sh [n]獲得的帶通過濾過的信號Sb[n]; 4.找到相應(yīng)的由Sh[n] 到Sb[n] 的Hilbert變換; 5.使用
1.033.jpg (2.73 KB, 下載次數(shù): 80)
下載附件
2017-5-3 20:51 上傳
確定超聲波的包絡(luò)響應(yīng); 6.獲得平滑的包絡(luò)信號,Eb[n],在E上使用零相位正向和反向帶通濾波; 7.在Eb[n]的峰值處應(yīng)用拋物線插值來確定相應(yīng)的拋物線的最大峰值實際樣本的位置; 8.計算實際樣品差別,在脈沖和高峰值獲得相應(yīng)的TOF; 9.找到所有其他脈沖TOF值脈沖序列,找出TOF的平均水平值準(zhǔn)確地確定距離。
3、實驗裝置 實驗的設(shè)置是圖3和圖4所示。使用一個IOtech PCI-DAQboard / 3000產(chǎn)生脈沖序列和獲取響應(yīng)。 操作在最大1 MHz 16位分辨率。發(fā)射脈沖獲得一個數(shù)量10伏特樣本,總寬度為12個微秒。
1.034.jpg (4.82 KB, 下載次數(shù): 94)
下載附件
2017-5-3 20:51 上傳
1.035.jpg (3.93 KB, 下載次數(shù): 93)
下載附件
2017-5-3 20:51 上傳
圖3 一般的實驗設(shè)置 圖4 發(fā)射機和接收機設(shè)置 商業(yè)超聲換能器使用40 KHz的中心頻率,發(fā)射器與接收器相對。如圖5所示。使用MATLAB進(jìn)行重復(fù)的獲取和算法實現(xiàn)。 發(fā)射機和接收機安裝在圖4中使用,所以只有一個模擬輸入通道可以用于發(fā)送和接收信號。另一種替代方法是使用兩個模擬輸入獲取信號和接收信號。在這種情況下不需要使用發(fā)射機和接收機之間的電阻(鏈接點見圖4)。 用于測量羅盤實驗平均誤差為0.05毫米。 因為這項工作中使用的采樣率是1MHz,聲音在空氣中傳播速度大概是330米/秒,這個誤差相當(dāng)于一個采樣間隔是0.33毫米。
1.036.jpg (9.97 KB, 下載次數(shù): 90)
下載附件
2017-5-3 20:51 上傳
圖5 測量系統(tǒng)設(shè)置 4、結(jié)果 在圖6中,10個傳播的脈沖和對應(yīng)的接收信號顯示在一起。圖7顯示了一個放大了的脈沖部分。
1.037.jpg (16.93 KB, 下載次數(shù): 82)
下載附件
2017-5-3 20:51 上傳
1.038.jpg (15.54 KB, 下載次數(shù): 82)
下載附件
2017-5-3 20:51 上傳
圖6 超聲波脈沖序列 圖7 圖6中的一部分放大 根據(jù)所述方法,可以發(fā)現(xiàn)信號的包絡(luò)E如圖8所示。平滑的包絡(luò)信號Eb通過應(yīng)用零相位數(shù)字濾波如圖9所示。
1.039.jpg (17.38 KB, 下載次數(shù): 84)
下載附件
2017-5-3 20:51 上傳
1.040.jpg (16.67 KB, 下載次數(shù): 92)
下載附件
2017-5-3 20:51 上傳
圖8 超聲波響應(yīng)的包絡(luò) 圖9 過濾后的包絡(luò)信號 對于每一個距離測量實驗,都用20個離散的脈沖延時16毫秒。每次測量計算的平均樣本不同。平均各種距離結(jié)果描繪在圖10中,平均樣本差異和實際距離呈現(xiàn)非常準(zhǔn)確的線性關(guān)系。
1.041.jpg (20.71 KB, 下載次數(shù): 98)
下載附件
2017-5-3 20:51 上傳
圖10 平均樣本差異和實際距離之間的線性關(guān)系 表1中,實際的測量距離,平均樣本差異,標(biāo)準(zhǔn)偏差的測量。從中可以看出標(biāo)準(zhǔn)偏差值非常小,表明測量非常粗略。 獲得相應(yīng)的距離測量,平均樣本差異和距離之間形成了一個仿射關(guān)系,在毫米校準(zhǔn)測量系統(tǒng)距離在75.5毫米和146.3毫米之間。 在表2中,實際的距離和相應(yīng)的超聲測量的距離,獲得相應(yīng)的測量誤差。 與用1 MHz超聲波測量一個采樣間隔距離產(chǎn)生0.33毫米的誤差相比,相應(yīng)的測量誤差獲得相當(dāng)小,表明所使用的測量方法的準(zhǔn)確性和魯棒性。
表1 樣本差異和標(biāo)準(zhǔn)差 表2 實際和測量距離
1.042.jpg (20.61 KB, 下載次數(shù): 67)
下載附件
2017-5-3 20:51 上傳
1.043.jpg (20.74 KB, 下載次數(shù): 80)
下載附件
2017-5-3 20:51 上傳
5、結(jié)論 研究提出利用包絡(luò)的峰值時間值的超聲短脈沖響應(yīng)這一新方法計算飛行時間。 提出了實驗裝置搭建方式和算法,一個可行的和準(zhǔn)確的超聲波距離測量系統(tǒng)就可以通過中等大小單片機有效地實現(xiàn),不需要復(fù)雜的電子設(shè)備和其他方法。
參考文獻(xiàn) [1] B. Barshan, “Fast Processing Techniques for Accurate Ultrasonic Range Measurements”, Measurement Science Technology, vol. 11, 2000, pp. 45–50 [2] D. Marioli, “Digital time-of-flight measurements for ultrasonic sensors”, IEEE Trans. Iinst.. & Meas., vol. 41, February 1992, pp. 93-94. [3] R. Queir′os, P. S. Gir?ao, A. Cruz Serra, “Cross-correlation and Sine-Fitting Techniques for High Resolution Ultrasonic Ranging”, IMTC 2006- Instrumentation and Measurement Technology Conference, Sorrento, Italy April 2006,pp.552-556. [4] G. Andria, F. Attivissimo, N. Giaquinto, “Digital signal processing techniques for accurate ultrasonic sensor measurement”, Elsevier Measurement. vol. 30, 2001, pp. 105–114 , Vol. 1. [5] F.E. Gueuning, M. Varlan, C.E. Eug`ene, P. Dupuis, “Accurate Distance Measurement by an Autonomous Ultrasonic System Combining Time-of- Flight and Phase-Shift Methods”, IEEE Trans. Iinst. & Meas., vol. 46, December 1997, pp. 1236–1240. [6] M. Parrila, J.J. Anaya, C. Fritsch, “Digital signal processing techniques for high accuracy ultrasonic range measurements”, IEEE Trans. Iinst. & Meas., vol. 4, August 1991, pp. 759-763.
三、源程序 - #include<reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
-
- sbit key1=P2^0;
- sbit key2=P2^1;
- sbit key3=P2^2;
- sbit key4=P2^3;
-
- sbit M1=P1^0;
- sbit M2=P1^1;
- sbit LED1=P1^2;
- sbit LED2=P1^3;
-
- sbit RS=P2^4;
- sbit RW=P2^5;
- sbit EN=P2^6;
-
- sbit Trig=P1^4;// 定義HC-SR04發(fā)送端
- sbit Echo=P1^5;//定義HC-SR04接收端
-
- bit flag=1,bflag=1;//succeed_flag超聲波測距成功標(biāo)志 flag設(shè)置距離加1或加0.1標(biāo)志
- float distance,DH=99.55,DL=80.55,b;//b加的值大小
-
- uint s,time,disflag;
- uint ff=0,distance_xs,DH_xs,DL_xs;
- uchar cache[4]={0,0,0,0};
-
- void delay(uint x)
- {
- uint i,j;
- for(j=0;j<x;j++)
- for(i=0;i<123;i++);
- }
- void delay_20us()
- {
- uchar a ;
- for(a=0;a<100;a++);
- }
-
- void write_Com(uchar com)
- {
- RW=0;
- RS = 0;
- P0 = com;
- EN = 1;
- delay(2);
- EN = 0;
- }
- void write_Data(uchar date)
- {
- RS = 1;
- P0 = date;
- EN = 1;
- delay(2);
- EN = 0;
- }
-
- void LCD_Init(void)
- {
- write_Com(0x38);
- write_Com(0x0c);
- write_Com(0x06);
- write_Com(0x01);
- }
- void show_char(uchar x,uchar y,char a)
- {
- if(y%2==1)
- write_Com(0x80+x-1);
- else
- write_Com(0xc0+x-1);
-
- write_Data(a);
- }
- int xs(float xs)
- {
- float a;
- a=xs-(int)xs;
- xs=(int)10*a;
- return xs;
- }
-
- void display(uchar x,uchar y,uchar sz,uint num);//x:位置 y:排數(shù) sz:個數(shù) num:數(shù)值
- void display_Init()
- {
- show_char(1,1,'D');
- show_char(2,1,'I');
- show_char(3,1,'S');
- show_char(4,1,':');
- show_char(8,1,'.');
-
- show_char(1,2,'C');
- show_char(2,2,'O');
- show_char(3,2,'N');
- show_char(4,2,':');
-
-
- // show_char(10,1,'D');
- show_char(11,1,'H');
- show_char(12,1,':');
- show_char(15,1,'.');
-
- // show_char(10,2,'D');
- show_char(11,2,'L');
- show_char(12,2,':');
- show_char(15,2,'.');
-
- switch ( ff ) //判斷進(jìn)水放水情況
- {
- case 0:show_char(7,2,'U');;break;//無操作
- case 1:show_char(7,2,'H');;break;//放水
- case 2:show_char(7,2,'L');;break;//進(jìn)水
- }
- distance_xs=xs(distance);
- DH_xs=xs(DH);
- DL_xs=xs(DL);
- display(5,1,3,distance);
- display(9,1,1,distance_xs);
-
- display(13,1,2,DH);
- display(16,1,1,DH_xs);
-
- display(13,2,2,DL);
- display(16,2,1,DL_xs);
-
- }
- void display(uchar x,uchar y,uchar sz,uint num)//x:位置 y:第幾排 sz:位數(shù) num:值
- {
- uchar a[5]={0};
- uchar i=0;
- uint Temp=num;
- while(Temp)
- {
- a[i] = Temp%10;
- Temp = Temp/10;
- i++;
- }
-
- if(y%2==1)
- write_Com(0x80+x-1);
- else
- write_Com(0xc0+x-1);
-
- for(i=sz;i>0;i--)
- {
- write_Data(0x30+a[i-1]);
- }
-
- }
- //按鍵控制函數(shù)
- float set_distance(float set_dis)
- {
-
- if(!key3)
- {
- delay(10);
- if(!key3)
- {
- while(!key3);
- set_dis=set_dis+b;
- if(set_dis>=99)
- set_dis=99;
- }
- }
- if(!key4)
- { delay(10);
- if(!key4)
- {
- while(!key4);
- set_dis=set_dis-b;
- if(set_dis<=0)
- set_dis=0;
- }
- }
- if(!key1)
- { delay(10);
- if(!key1)
- {
- while(!key1);
- flag=~flag;
- }
- }
- if(!key2)
- { delay(10);
- if(!key2)
- {
- while(!key2);
- bflag=~bflag;
- }
- }
- return set_dis;
- }
-
- void CJ(void)
- {
- Trig=1; //啟動一次檢測模塊
- delay_20us();
- Trig=0; //停止向檢測模塊Trig端發(fā)送高電平
- while(!Echo); //當(dāng)接收為零時等待
- TR0=1; //開啟計數(shù)
- while(Echo); //當(dāng)接收為1計數(shù)并等待
- TR0=0;
- time=TH0*256+TL0; //檢測 所需時間
- TH0=0;
- TL0=0;
- distance=145.05-time*0.172;// 計算距離,算出來的單位是mm
- // distance=(int)(distance*100)/100; //強制保留2位小數(shù)
- }
-
- void BJ()
- {
- if(flag)
- {
- DH=set_distance(DH);if(DH<DL)DL=DH;
- }
- else
- {
- DL=set_distance(DL);if(DL>DH)DH=DL;
- }
- if(bflag)
- {
- b=1.00;
- }
- else
- {
- b=0.10;
- }
- if(distance>DH)
- {
- LED1=1;
- LED2=0;
- M1=1;
- M2=0;
- ff=1;
- }
- else if(distance<DL)
- {
- LED2=1;
- LED1=0;
- M2=1;
- M1=0;
- ff=2;
- }
- else
- {
- M1=0;
- M2=0;
- LED1=0;
- LED2=0;
- ff=0;
- }
- }
- void init()
- {
- TMOD=0x01; //高T0工作方式為方式1,GATE=1
- TH0=0;
- TL0=0;
- ET0=1; //允許T0中斷
- EA=1; // 開啟總中斷
- M1=0;
- M2=0;
- LED1=0;
- LED2=0;
- LCD_Init();
- delay(5);
- display_Init();
- }
- void main()
- {
- uint w;
- init();
- while(1)
- {
- w++;
- if(w==5)
- …………限于本文篇幅 余下代碼請從51hei論壇下載附件…………
復(fù)制代碼
完整文檔下載 WORD格式 可編輯:
基于單片機的超聲波液位檢測系統(tǒng)設(shè)計.doc
(4.15 MB, 下載次數(shù): 252)
2017-5-3 11:54 上傳
點擊文件名下載附件
sr-c04,1602 下載積分: 黑幣 -5
|