單片機課程設計報告(實用導盲儀)_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  單片機系統(tǒng)課程設計報告</p><p>  設計題目:實用導盲儀</p><p><b>  Xxxxxx</b></p><p> 專 業(yè)測控技術與儀器</p><p> 學 號Xxxx</p><p> 姓 名Xxxxx</p><p

2、> 小組成員Xxxx</p><p> 指導老師Xxx</p><p> 設計時間2013年8月23日</p><p> 總評成績</p><p><b>  預期性能指標</b></p><p>  設計一個以51單片機開發(fā)板為核心控制器的障礙物檢測報警的導盲系統(tǒng)。</p>

3、<p>  1.超聲波模塊測量范圍障礙要求為0.10~5.00m;</p><p>  2.測量精度為3cm;</p><p>  3.判斷正前方或地面是否有障礙。</p><p>  4.根據(jù)障礙的距離遠近以及類別報警。</p><p><b>  工作原理</b></p><p>&

4、lt;b>  工作原理概述</b></p><p>  1.1超聲波測距的原理</p><p>  1.1.1超聲波的基本理論</p><p>  隨著科技的發(fā)展和社會的進步,人們對于檢測未知世界,開發(fā)未知功能的需求越來越迫切和明顯,新一代科技產(chǎn)品對于人們的關切程度也日益增加。</p><p>  其中,超聲波檢測技術就是為

5、了滿足這些需求而應運而生的一門技術手段。超聲波是一門以物理、電子、機械、以及材料科學為基礎的、各行各業(yè)都要使用的通用技術之一。該技術在國民經(jīng)濟中,對提高產(chǎn)品質量,保障生產(chǎn)安全和設備安全運作,降低生產(chǎn)成本,提高生產(chǎn)效率特別具有潛在能力。超聲技術是通過超聲波的產(chǎn)生、傳播以及接收的物理過程完成的。超聲波具有聚束、定向及反射、投射等特性。按超聲波振動輻射大小不同大致可以分為:用超聲波使物體或物性變化的功率應用,稱之為功率超聲;用超聲波獲取信息,

6、稱為檢測超聲。</p><p>  超聲波是聽覺閾值之外的振動,其頻率范圍在10——10Hz,其中通常的頻率大約在10——3×10之間。超聲波在超聲場(被超聲波充滿的范圍)傳播時,如果超聲波的波長與超聲場相比,超聲場很大,超聲波就像處在一種無限的介質中,超聲波自由地向外擴散;反之,如果超聲波的波長與相鄰介質的尺寸相近,則超聲波受到界面限制不能自由的向外擴散。于是超聲波在傳播過程中有如下的特性和作用。&l

7、t;/p><p>  1.1.2超聲波的傳播速度</p><p>  超聲波在介質中可以產(chǎn)生三中形式的振蕩波:橫波——質點振動方向垂直于傳播方向的波;縱波——質點振動方向與傳播方向一致的波;表面波——質點振動介于縱波和橫波之間,沿表面?zhèn)鞑サ牟?。橫波只能在固體中傳播,縱波能在固體液體中和氣體中傳播,表面波隨深度的增加其衰減很快。為了測量各種狀態(tài)下的物理量多采用縱波形式的超聲波。超聲波的頻率越高,

8、越與光波某些特性相似。</p><p>  1.1.3超聲波的物理性質</p><p>  當超聲波傳播到兩種特性不同的介質的平面上時,一部分被反射;另一部分透射過界面,在相鄰的介質內部繼續(xù)傳播;這樣的兩種情況稱之為超聲波的反射和折射,如圖2.1所示。</p><p>  圖2.1 超聲波的反射和折射</p><p>  1.1.4超聲波對

9、聲場產(chǎn)生的作用</p><p><b>  (1) 機械作用</b></p><p>  超聲波傳播過程中,會引起介質質點交替的壓縮與伸張,構成了壓力的變化,這種壓力的變化將引起機械效應。超聲波引起質點的運動,雖然位移和速度不大,但是與超聲波振動的頻率的平方成正比的質點的加速度卻很大。有時足以達到破壞介質的程度。</p><p><b&g

10、t;  (2) 空化作用</b></p><p>  在流體動力學指出,存在于液體中的微氣泡在聲場的作用下振動,當聲壓達到一定的值時,氣泡將迅速膨脹,然后突然閉合,在氣泡閉合時產(chǎn)生沖擊波,這種膨脹、閉合、振動等一系列動力學過程稱為空化。</p><p><b>  (3) 熱學作用</b></p><p>  如果超聲波作用于介質時

11、被介質所吸收,實際上也就是有能量吸收,同時,由于超聲波的振動,使介質產(chǎn)生強烈的高頻振蕩介質相互摩擦產(chǎn)生熱熱量,這種能量使介質溫度升高。 </p><p>  1.1.5超聲波傳感器</p><p>  超聲波傳感器主要有電致伸縮和磁致伸縮兩類,電致伸縮采用雙壓電陶瓷晶片制成,具有可逆特性。</p><p>  壓電陶瓷片具有如下特性:當在其兩端加上大小和方向不斷

12、變化的交流電壓時,就會產(chǎn)生“壓電效應”,使壓電陶瓷也產(chǎn)生機械變形,這種機械變形的大小以及方向與外加電壓的大小和方向成正。反之,如果由超聲波機械振動作用于陶瓷片使其發(fā)生微小的形變時,那么壓電晶片也會產(chǎn)生與振動頻率相同的微弱的交流信號。超聲波傳感器內部結構如圖2.2所示,外部結構如圖2.3所示。</p><p>  圖 2.2 元件內部結構 圖 2.3 超聲波外部結構</p&

13、gt;<p>  1.1.6超聲波測距系統(tǒng)原理</p><p>  在超聲探測電路中,發(fā)射端得到輸出脈沖為一系列方波,其寬度為發(fā)射超聲的時間間隔,被測物距離越大,脈沖寬度越大,輸出脈沖個數(shù)與被測距離成正比。1.1.7超聲測距方法</p><p>  (1)取輸出脈沖的平均值電壓,該電壓 (其幅值基本固定 )與距離成正比,測量電壓即可測得距離;</p><p

14、>  (2)測量輸出脈沖的寬度,即發(fā)射超聲波與接收超聲波的時間間隔 t,故被測距離為 S=1/2vt。本測量電路采用第二種方案。由于超聲波的聲速與溫度有關,如果溫度變化不大,則可認為聲速基本不變 。如果測距精度要求很高,則應通過溫度補償?shù)姆椒右孕U?。超聲波測距適用于高精度的中長距離測量。因為超聲波在標準空氣中的傳播速度為331.45米/秒,由單片機負責計時,單片機使用12.0M晶振,所以此系統(tǒng)的測量精度理論上可以達到毫米級。&l

15、t;/p><p>  1.1.7超聲波測距的算法設計</p><p>  超聲波在空氣中傳播速度為每秒鐘340米(15℃時)。X2是聲波返回的時刻,X1是聲波發(fā)聲的時刻,X2-X1得出的是一個時間差的絕對值,假定X2-X1=0.03S,則有340m×0.03S=10.2m。由于在這10.2m的距離里,超聲波發(fā)出到遇到返射物返回,其測距原理圖如圖2.4所示。</p>&l

16、t;p>  圖 2.4 測距原理</p><p><b>  原理框圖的說明</b></p><p>  本導盲系統(tǒng)由單片機控制,分別由控制中心、HC—SR04超聲波傳感器模塊、報警模塊等部分構成。以下的系統(tǒng)原理框圖是對系統(tǒng)工作的最基本原則進行詳細說明。</p><p><b>  硬件設計</b></p&g

17、t;<p><b>  器件選型</b></p><p>  1.1超聲波模塊器件選型</p><p>  1.1.1發(fā)射電路部分</p><p>  超聲波發(fā)生器包括超聲波產(chǎn)生電路和超聲波發(fā)射控制電路兩個部分,超聲波發(fā)射探頭其實就是一個電聲轉換器,把電信號轉換成聲波信號。在壓電晶片加上交變電壓,加在其上面的交變電壓的頻率要與它的

18、固有諧振頻率一致。超聲傳感器才有較高的靈敏度。超聲波探頭(“也稱為超聲波換能器”)的型號選用CSB40T(其中心頻率為40KHz)??梢圆捎密浖a(chǎn)生40KHz的超聲波信號,通過輸出引腳輸入至驅動器,經(jīng)過動器驅動后推動探頭產(chǎn)生超聲波。這種方法的特點是充分利用軟件,靈活性好,但是需要設計一個驅動電流為100mA以上的驅動電路。第二種方法是利用超聲波專用發(fā)生電路或通用發(fā)生電路產(chǎn)生超聲波信號,并直接驅動超聲波換能器產(chǎn)生超聲波。這種方法的特點是無

19、需驅動電路,但缺乏靈活性。本次我們采用第一種方法產(chǎn)生超聲波。</p><p>  CD4069反相器支持3路輸入,由其內部結構圖可以了解,引腳14接電源,引腳7接地。單片機由P2.6引腳輸出一連串電流波形為矩形波的電流。經(jīng)過反相器驅動發(fā)射探頭發(fā)射超聲波。</p><p>  圖3.2 CD4069 的外部圖 圖3.3 CD4069的內部結構圖</p>

20、;<p>  1.4.2接收電路部分</p><p>  超聲波接收包括接收探頭,信號放大以及波形變換電路三部分,超聲波接收探頭必須與發(fā)送探頭相同的型號,否則可能導致接收效果甚至不能接收。由于超聲波接收探頭的信號非常弱,所以必須用放大器放大,放大后的正弦波不能被微處理器處理,所以必須經(jīng)過波形變換。本次設計為了降低調試難度,減少成本,提供系統(tǒng)可靠性,所以我們采用了一種用在彩色電視機上面的一種紅外接收檢

21、波芯片CX20106,由于紅外遙控的中心頻率在38KHz,和超聲波的40KHz很接近,所以可以用來做接收電路。CX20106是日本索尼公司的產(chǎn)品,采用單列8引腳的直插式封裝,內部包含自動偏置控制電路、前置放大電路、帶通濾波、峰值檢波、積分比較器、斯密特整形輸出電路,配合少量外接元件就可以對38KHz左右的信號的接收與處理,該芯片內部如圖3.14所示。</p><p>  圖3.4 CX20106內部結構<

22、;/p><p><b>  原理圖及PCB圖</b></p><p>  上圖為本系統(tǒng)所用單片機芯片原理圖以及所需要用的接口的示意圖。</p><p>  上圖為實驗初期時所設計的超聲模塊、語音報警模塊的接口示意圖。因所用設備都為模塊化設備,故只畫出接口示意圖。</p><p>  3.4系統(tǒng)的PCB圖</p>

23、<p><b>  設計體會</b></p><p>  本次課程設計,從選題到設計再到最后一步一步實現(xiàn),一點一點優(yōu)化,都是由我們自行完成。同時,在整個過程中也得到了老師與同學的幫助,為我們解決問題提供了很多的思路,也有很多有價值的意見,為作品品質的進一步提升提供了寶貴意見。</p><p>  通過本次課程設計,首先,是學習到了幾個精神。第一,是團結協(xié)作

24、精神。幾個人的力量一定比一個人的力量大。在設計開始時,就依據(jù)每個人的特點,將整個工作分為硬件設計,軟件設計,論文撰寫三個部分。通過我們的通力合作,圓滿的完成了此次課程設計任務。第二,是刻苦鉆研精神。雖然這只是簡單的課程設計,但對于我們這些“新手”,很多問題并沒有很好的解決辦法,甚至找不到問題的原因。這就需要我們能仔細分析問題,刻苦鉆研,找到問題的根源,對癥下藥,不能輕言放棄。</p><p>  其次,是在本次課

25、程設計中學習到的知識。我主要負責軟件的設計,根據(jù)我們前期提出的目標,在單片機例程的基礎上,編寫軟件。前期,由于經(jīng)驗不足,整個設計過程變成了“邊做邊改”,一次一次的嘗試,沒有堅實的理論基礎作為指導。之后,認識到這個問題之后,從單片機各管腳作用,各寄存器的使用等方面入手,在對單片機有了更深了解的同時,對編程也有了新的認識。在豐富理論知識,構成了小體系之后,再著手實現(xiàn)功能就感覺游刃有余了。</p><p>  最后,在

26、完成課程設計之后,看到自己做的導盲儀能夠幫助“盲人”上下臺階,并能夠提醒“盲人”前方是否有障礙,有一種成就感。同時,也認識到要實現(xiàn)真正的導盲,這是遠遠不夠的。要用電子設備代替眼睛,讓盲人感知這世界,還有很長的路要走。</p><p><b>  軟件設計</b></p><p><b>  軟件框圖</b></p><p>

27、;<b>  流程圖</b></p><p><b>  說明</b></p><p>  本設計系統(tǒng)軟件采用模塊化結構,由主程序﹑定時子程序、預警燈子程序﹑實時中斷子程序、定時中斷子程序、蜂鳴器子程序﹑標定子程序構成。程序流程圖如圖所示。其中:標定功能為本系統(tǒng)的一個特色。</p><p><b>  調試試驗&

28、lt;/b></p><p><b>  試驗驗證方法</b></p><p>  1.1超聲波模塊測距性能試驗驗證方法</p><p>  我們調試使用的超生波模塊是買來的HC—SR04超聲波測距模塊。</p><p>  利用信號源產(chǎn)生頻率為50HZ,占空比為20%的矩形波信號作為觸發(fā)信號。然后,通過示波器觀察

29、在不同的障礙情況下收到的回波信號的脈寬。根據(jù)脈寬與距離的關系即可知道超聲波模塊工作是否正常。</p><p>  1.2標定裝置試驗驗證方法</p><p>  在檢測標定裝著是否工作以及標定的距離是否準確的過程中,只需將系統(tǒng)開啟,首先,以一個適當?shù)木嚯x將傳感器對準障礙物,按下標定按鈕,然后在標定距離的前后進行移動,觀察傳感器電平輸出變化即可判斷標定是否成功。 </p>

30、<p>  1.3系統(tǒng)報警性能試驗驗證方法</p><p>  本功能為系統(tǒng)使用性的核心功能,在現(xiàn)場演示時效果比較理想,現(xiàn)將演示步驟展示如下:將系統(tǒng)佩戴在模擬的盲人身上,以有臺階和行人的樓道為例測試系統(tǒng)。當前方有行人走來時,系統(tǒng)判斷距離在預警范圍之內,就根據(jù)距離不同進行不同的報警,距離越近,警報聲音越急促。在測試臺階時,標定距離起到了很重要的作用,當傳感器距離地面在標定距離附近時,盲人正常行走,不會報警

31、,但是一旦遠或者近(模擬上下臺階)即會出發(fā)系統(tǒng)進行預警,十分敏感。</p><p><b>  遇到問題及解決方法</b></p><p>  在系統(tǒng)功能實現(xiàn)的過程中我們還是遇到了很多的問題,例如如何設計算法能讓報警功能更加準確。我們在實際生活中找到了答案,我們根據(jù)盲人的反映速度和行動能力,算出了傳感器應該設置的預警范圍,使得既不過早預警,又能讓用戶安全躲避障礙。有如

32、關于標定距離,這個問題的提出是為了更好地適應不同的用戶身高和佩戴高度而采取的措施。</p><p><b>  總結分析</b></p><p><b>  性能分析</b></p><p>  1.1超聲波模塊的性能分析</p><p>  為了檢驗超聲波模塊的測距性能,對模塊進行了簡單的測距實驗

33、。 </p><p>  表 6.1 超聲波模塊測距性能</p><p>  從以上看出,整機誤差率不超過0.03%,但是從試驗數(shù)據(jù)來看,在測量距離小于300時誤差很小,而當300以上時,誤差已經(jīng)比較大,雖然誤差率不大,但是在精確測量下是不能容忍的,從設計的方案來看,這個誤差的造成是有多方面原因的。首先,超聲波發(fā)射和接收頭安裝之間有一個夾角,如圖所示6.1所示:</p>

34、<p>  圖 6.1 測量夾角</p><p>  這樣測量的值就是一個斜邊的距離。所以程序中應該進行修正。</p><p>  1.2系統(tǒng)預警性能分析</p><p>  一開始,程序設定的是一旦測得正前方障礙物的距離小于0.5米系統(tǒng)就會發(fā)出預警聲音,并隨著距離的縮短而變得短促,在走廊的現(xiàn)場測試發(fā)現(xiàn)系統(tǒng)能在障礙前及時報警,無論障礙物是墻壁、行人還是

35、門窗、木桿等。不過在</p><p><b>  試驗結果分析</b></p><p>  測距模塊的精度非常好,但由于硬件的限制,精度很難進一步提高。如果采用一體化收發(fā)探頭,可以減小三角誤差。小車基本實現(xiàn)了避障,但由于控制策略的原因,避障的反應時間以及路徑規(guī)劃還有很大提升空間。</p><p><b>  自我評價</b>

36、;</p><p><b>  設計總結</b></p><p>  本實用導盲系統(tǒng)的設計基于單片機原理和傳感器原理,以51單片機為主控芯片,采用HC—SR04產(chǎn)生不測距模塊為核心部件,通過軟件編程制作了一整套結構完整,功能模塊化,反應較為靈敏的導盲系統(tǒng)。經(jīng)過對該系統(tǒng)的測試實驗,實驗結果證明該系統(tǒng)能夠準確地測出障礙物的距離并且能夠準確靈敏地為用戶進行預警。效果顯著,功

37、能完善,實用價值強。</p><p>  但是該導盲系統(tǒng)還存在著許多的不足,比如說只能對正前方一定角度內進行探測,使用的是一路超聲波而不是多路超聲波探測,并且為了簡化,對于斜前方地面的坑和突起物檢測效果比較差。這些都是有待進一步發(fā)展和提高的。盡管后來開發(fā)了標定功能,但是其靈敏度與準確還是受到環(huán)境復雜程序的限制。</p><p>  本次課程設計只有短短的兩周,所以我們雖然設計了電路,但沒有

38、時間自己制板。在調試中,我們采用買來的超聲波模塊對算法和進行了測試。最后,通過自己的努力讓導盲系統(tǒng)能實現(xiàn)正常的基礎的功能。兩周的課程設計,再加上暑假在家準備的時間,在這段時間里,我們一起討論,一起研究,解決了一個又一個起初看來無法逾越的障礙,收獲頗豐。</p><p><b>  進一步改進措施</b></p><p>  系統(tǒng)經(jīng)過測試,預警效果良好。硬件上沒有錯誤,

39、主要瓶頸在于探測模塊的靈敏度以及個數(shù),因為軟件完全靠探測模塊返回的信號作為依據(jù)進行下一步控制的操作,無法確認該信號是否準確.我們認為可以做如下改進:</p><p> ?。?)增加傳感器的種類和個數(shù),讓本系統(tǒng)真正的更加貼近地模仿視覺系統(tǒng),為盲人用戶開發(fā)前所未有的體驗。</p><p> ?。?)增加語音提醒模塊的應用,讓用戶對于障礙物的判斷更加清楚,更加方便使用。</p>&

40、lt;p> ?。?)集成電源模塊,使得系統(tǒng)真正能投入日常的應用。</p><p><b>  附錄 </b></p><p>  # include<reg51.h></p><p>  #include <intrins.H></p><p>  #define uchar un

41、signed char</p><p>  #define uint unsigned int </p><p>  uchar distance_H0,distance_L0,distance_H1,distance_L1;</p><p><b>  //特殊寄存器定義</b></p><p>  sfr CLK_D

42、IV =0x97;</p><p>  //STC MCU IO register define total way</p><p>  sfr P1M1= 0x91;</p><p>  sfr P1M0= 0x92;</p><p>  sfr P3M1= 0xB1;</p><p>  sfr P3M0= 0xB

43、2;</p><p><b>  //IO口引腳說明</b></p><p>  sbit Trig0 =P1^0;</p><p>  sbit Echo0 =P3^2;</p><p>  sbit Trig1 =P0^1;</p><p>  sbit Echo1 =P3^3;</p&

44、gt;<p>  sbit SPK = P1^5;</p><p>  uint range;</p><p>  uint mark=0;</p><p>  sbit key=P3^1;</p><p>  sbit led1_5 =P1^1; </p><p>  sbit led5_10 =P1

45、^2;</p><p>  sbit led10_15 =P1^3;</p><p>  sbit led15_20 =P1^4;</p><p>  void IO_inint(void);</p><p>  void sys_inint(void);</p><p>  void delay_nop(uint t

46、imer);</p><p>  void led_out(void);</p><p>  /*------------------------------------------------</p><p><b>  函數(shù)聲明</b></p><p>  ------------------------------

47、------------------*/</p><p>  void DelayUs2x(unsigned char t);//函數(shù)聲明 </p><p>  void DelayMs(unsigned char t);</p><p>  void IO_inint(void)</p><p><b>  { </b>

48、;</p><p>  CLK_DIV=0x02;//系統(tǒng)時鐘四分之一分頻 </p><p>  P1M1= 0x00; //0000 0000</p><p>  P1M0= 0x1e; //0001 1110</p><p>  P1=0x00; //0000 0000 </p><p>  P

49、3M1= 0x04; //0000 0100</p><p>  P3M0= 0x00; //0000 0000</p><p><b>  }</b></p><p>  //定時中斷初始化設定</p><p>  void sys_inint0(void)</p><p><b&

50、gt;  {</b></p><p>  TMOD=0x10;</p><p><b>  TH0=0;</b></p><p><b>  TL0=0;</b></p><p><b>  TR0=0;</b></p><p><b&

51、gt;  IT0=0;</b></p><p><b>  EX0=0;</b></p><p><b>  EA=1; </b></p><p><b>  }</b></p><p>  void sys_inint1(void)</p><

52、p><b>  {</b></p><p>  TMOD=0x10;</p><p><b>  TH1=0;</b></p><p><b>  TL1=0;</b></p><p><b>  TR1=0;</b></p><

53、p><b>  IT1=0;</b></p><p><b>  EX1=0;</b></p><p><b>  EA=1; </b></p><p><b>  }</b></p><p><b>  //NOP延時</b>

54、</p><p>  void delay_nop(uint timer)</p><p><b>  {</b></p><p>  while(timer--){_nop_();}</p><p><b>  }</b></p><p>  //外部中斷0,用做判斷回波電

55、平 </p><p>  void int0_routine0(void) interrupt 0 </p><p><b>  { </b></p><p><b>  EX1=0;</b></p><p>  distance_H0 =TH0; //取出定時器0的值 &

56、lt;/p><p>  distance_L0 =TL0; //取出定時器0的值 </p><p>  EX0=0; //關閉外部中斷 </p><p><b>  }</b></p><p>  void int0_routine1(void) interrupt 2

57、</p><p><b>  { </b></p><p><b>  EX0=0;</b></p><p>  distance_H1 =TH1; //取出定時器1的值 </p><p>  distance_L1 =TL1; //取出定時器1的值 </p>

58、<p>  EX1=0; //關閉外部中斷 </p><p><b>  }</b></p><p>  void DelayUs2x(unsigned char t)</p><p><b>  { </b></p><p>  while(--t);&l

59、t;/p><p><b>  }</b></p><p>  /*void DelayMs(unsigned char t)</p><p><b>  {</b></p><p>  while(t--)</p><p><b>  {</b></p

60、><p><b>  //大致延時1mS</b></p><p>  DelayUs2x(200);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  */</b></p&

61、gt;<p><b>  //LED輸出控制</b></p><p>  void led_out0(void)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  uint distance0;</

62、p><p>  distance0=distance_H0; //測量結果的高8位</p><p>  distance0<<=8; //放入16位的高8位</p><p>  distance0=distance0|distance_L0; //與低8位合并成為16位結果數(shù)據(jù)</p>

63、;<p>  // distance0*=4; //因為定時器默認為12分頻</p><p>  distance0/=58; //一厘米就是58us</p><p>  if(distance0>2&&distance0<150)//測量距離在2到50厘米時,led1

64、_5亮</p><p><b>  {</b></p><p><b>  led1_5=0;</b></p><p>  for(i=0;i<distance0*20;i++)</p><p><b>  {</b></p><p>  Dela

65、yUs2x(600);</p><p><b>  SPK=!SPK;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b

66、>  {</b></p><p><b>  led1_5=1;</b></p><p><b>  }</b></p><p>  if(distance0>200&&distance0<400)//測量距離在50到100厘米時,led5_10燈亮</p>&l

67、t;p><b>  {</b></p><p>  led5_10=0;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  led

68、5_10=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void led_out1(void)</p><p><b>  {</b></p><p><b>  int i;<

69、/b></p><p>  uint distance1;</p><p>  distance1=distance_H1; //測量結果的高8位</p><p>  distance1<<=8; //放入16位的高8位</p><p>  distance1=di

70、stance1|distance_L1; //與低8位合并成為16位結果數(shù)據(jù)</p><p>  distance1*=4; //因為定時器默認為12分頻</p><p>  distance1/=58; //一厘米就是58us</p><p>  if(distance1>range

71、-60&&distance1<range-20)//有臺階</p><p><b>  {</b></p><p>  led10_15=0;</p><p>  for(i=0;i<200;i++)</p><p><b>  {</b></p><

72、p>  DelayUs2x(400);</p><p><b>  SPK=!SPK;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><

73、;p><b>  {</b></p><p>  led10_15=1;</p><p><b>  }</b></p><p>  /* if(distance1>100&&distance1<150)//測量距離在150到200厘時,led15_20燈亮</p>&l

74、t;p><b>  {</b></p><p>  led15_20=0;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  le

75、d15_20=1;</p><p><b>  }</b></p><p><b>  */</b></p><p>  if(distance1>range+20&&distance1<range+60)//測量距離在150——200厘米時,led15_20燈亮</p><

76、;p><b>  {</b></p><p>  led15_20=0;</p><p>  for(i=0;i<200;i++)</p><p><b>  {</b></p><p>  DelayUs2x(500);</p><p><b>  S

77、PK=!SPK;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  led1

78、5_20=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void led_out1_1(void)</p><p><b>  {</b></p><p>  uint distance;&l

79、t;/p><p>  distance=distance_H1; //測量結果的高8位</p><p>  distance<<=8; //放入16位的高8位</p><p>  distance=distance|distance_L1; //與低8位合并成為16位結果數(shù)據(jù)</p>

80、<p>  distance*=4; //因為定時器默認為12分頻</p><p>  distance/=58; //一厘米就是58us</p><p>  range=distance;</p><p><b>  }</b></p><

81、;p>  void DelayMs(unsigned char t)</p><p><b>  {</b></p><p>  while(t--)</p><p><b>  {</b></p><p><b>  //大致延時1mS</b></p>&

82、lt;p>  DelayUs2x(245);</p><p>  DelayUs2x(245);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //系統(tǒng)主程序</b></p><p> 

83、 void main(void)</p><p><b>  {</b></p><p>  int mark=0;</p><p>  key=1; //按鍵輸入端口電平置高</p><p>  IO_inint();</p><p>  sys_inint0(); </p>&

84、lt;p>  sys_inint1();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  Trig0=1;</b></p><p>  delay_nop(20);</p><p

85、><b>  Trig0=0;</b></p><p>  while(!Echo0);</p><p>  TR0=1; //啟動定時器0 </p><p>  EX0=1; //打開外部中斷1</p><p>  while(TH0<40);<

86、/p><p>  TR0=0; //關閉定時器1</p><p>  TH0=0; //定時器1清零 </p><p>  TL0=0; //定時器1清零</p><p>  led_out0();</p><p><b>  Trig1=1;</b

87、></p><p>  delay_nop(20);</p><p><b>  Trig1=0;</b></p><p>  while(!Echo1);</p><p>  TR1=1; //啟動定時器0 </p><p>  EX1=1;

88、 //打開外部中斷1</p><p>  while(TH1<40);</p><p>  TR1=0; //關閉定時器1</p><p>  TH1=0; //定時器1清零 </p><p>  TL1=0; //定時器1清零</p><p> 

89、 if(!key) //如果檢測到低電平,說明按鍵按下</p><p><b>  {</b></p><p>  DelayMs(10); //延時去抖,一般10-20ms</p><p>  if(!key) //再次確認按鍵是否按下,沒有按下則退出</p><p><b>  {</b&g

90、t;</p><p>  while(!key);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待</p><p><b>  {</b></p><p>  led_out1_1();//釋放則執(zhí)行需要的程序</p><p><b>  mark=1;</b></p><p

91、><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(key)</b></p><p><b>  { </b></p>&l

92、t;p><b>  if(mark)</b></p><p>  led_out1();</p><p><b>  else;</b></p><p><b>  }</b></p><p><b>  }</b></p><p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論