汽車防撞報警器的設計_第1頁
汽車防撞報警器的設計_第2頁
汽車防撞報警器的設計_第3頁
汽車防撞報警器的設計_第4頁
汽車防撞報警器的設計_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、汽車防撞報警器的設計【摘 要】 本設計主要應用AT89S52作為控制核心,與顯示器、驅動電路等相結合的系統(tǒng)。利用單片機AT89S52作為報警裝置的控制器,能充分發(fā)揮AT89S52的數(shù)據(jù)處理和實時控制功能。使系統(tǒng)工作于最佳狀態(tài),提高系統(tǒng)的靈敏度。其優(yōu)點是體積小、使用方便、硬件電路簡單,軟件功能完善,控制系統(tǒng)可靠,具有一定的使用和參考價值。該系統(tǒng)利用超聲波實現(xiàn)對汽車的測距,利用單片機的實時控制和數(shù)據(jù)處理功能完成系統(tǒng)的控制?!娟P鍵詞】單片機;AT89S52;超聲波Design of automotive anti-collision alarm【Abstract】The design of the

2、main application AT89S52 as the control, and display driver integrated circuits and other systems. MCU AT89S52 using the controller as an alarm device that can give full play to AT89S52 of data processing and real-time control functions. Make the system work in the best condition, improve the system

3、 sensitivity. The advantage is small, easy to use, simple hardware circuit, software, functional, and reliable control system has some value in use and reference. The use of ultrasound to achieve collision avoidance alarm on the car's distance. Real-time control of single-chip computer and data

4、processing functions to complete control of the system.【Keywords】SCM;AT89S52;Ultrasonic目 錄第一章 緒論131.1 課題研究的背景和意義131.2 汽車防撞報警器的發(fā)展現(xiàn)狀13第二章 汽車防撞報警器的原理和總體設計162.1 汽車防撞報警器的原理162.1.1 壓電式超聲波傳感器簡介172.2 汽車防撞報警器的總體設計方案18第三章 硬件設計193.1 超聲波發(fā)射模塊與接收模塊193.3單片機控制系統(tǒng)203.4顯示模塊21第四章 軟件設計234.1 軟件的設計要求234.2 軟件設計的總體結構框圖234.3

5、 各個程序的流程圖234.3.1 主流程圖244.3.2 發(fā)射接收模塊流程244.3.3 中斷程序流程254.4 部分程序26第五章 調試425.1 測距模塊的調試425.2 調試結果445.3 誤差分析45第六章 設計總結476.1 設計功能分析476.2 心得體會47致謝48參考文獻49附錄一:汽車防撞報警器電路圖50附錄二:汽車防撞報警器PCB圖51附錄三:所用元件清單52第一章 緒論隨著我國社會經濟的高速發(fā)展,交通運輸業(yè)日益興旺,汽車的數(shù)量逐漸增加。交通擁擠狀況也日趨嚴重,撞碰車事件屢屢發(fā)生,造成了很大的人身傷亡和經濟損失,汽車駕駛員也越來越擔心車的安全了。針對這種情況,設計一種響應快

6、,可靠性高且較為經濟的汽車防撞報警系統(tǒng)勢在必行,超聲波測距法是最常見的一種距離測距方法,本設計介紹用AT89S52單片機控制的汽車防撞報警系統(tǒng)。該裝置將單片機的實時控制及數(shù)據(jù)處理功能與超聲波的測距技術、傳感器技術相結合,可檢測汽車運行中前方障礙物與汽車的距離及汽車車速。通過數(shù)字顯示裝置顯示距離,并由發(fā)聲電路根據(jù)距離遠近情況發(fā)出警告聲。1.1 課題研究的背景和意義科技的飛速發(fā)展拉動了經濟的飛躍,私家車逐漸走近了千家萬戶。但隨著車輛的增加,停車難的問題也凸顯出來。狹小的停車場地常常令有車一族感到苦惱,稍有不慎,車輛就可能與他人車輛或障礙物發(fā)生碰撞,造成損失。雖然車輛都有后視鏡,但由于角度問題,不可

7、避免的存在著后視盲區(qū),并不能有效的解決碰撞問題。汽車防撞報警器是汽車倒車或者泊車時使用的安全輔助裝置,它可以通過聲音、燈光指示或是屏幕顯示等手段告知駕駛者車輛周圍的障礙物情況,令駕駛者及時調整車輛行進方向以便于規(guī)避,解除了駕駛者不便于直接目測與障礙物間距離的困擾,大大的提高了駕駛的安全性??梢哉f,汽車防撞報警器是車輛必不可少的應用設備之一。1.2 汽車防撞報警器的發(fā)展現(xiàn)狀通常,汽車防撞報警器由超聲波傳感器(俗稱探頭)、控制器和顯示器(或蜂鳴器)等部分組成。汽車防撞報警器一般采用超聲波測距原理,在控制器的控制下,由傳感器發(fā)射超聲波信號,當遇到障礙物時,產生回波信號,傳感器接收到回波信號后經控制器

8、進行數(shù)據(jù)處理、判斷出障礙物的位置,由顯示器顯示距離并發(fā)出其他警示信號,得到及時警示,從而使駕駛者倒車時做到心中有數(shù),使倒車變得更輕松。在幾年的時間里,隨著技術發(fā)展和用戶需求的變化,汽車防撞報警器經過了大致六代的發(fā)展。 第一代:倒車時通過喇叭提醒 。當車輛倒車時會發(fā)出“倒車請注意”的提醒聲音,這就是汽車防撞報警器的第一代產品?,F(xiàn)在只有小部分車輛還在使用。只要司機掛上倒檔,它就會響起,提醒周圍的人注意。從一定意義上說,它對駕駛者并沒有直接的幫助,不是真正的汽車防撞報警器。它價格便宜,使用性能不高,已被市場淘汰。第二代:采用蜂鳴器不同聲音提示駕駛員。這是汽車防撞報警器系統(tǒng)的真正開始。倒車時,如果車后

9、1.8米-1.5米處有障礙物,蜂鳴器就會開始工作,發(fā)出警報聲。蜂鳴聲越急,表示車輛離障礙物越近。但由于沒有語音提示,也沒有距離顯示,司機即使知道有障礙物,卻不能確定障礙物離車有多遠,對駕駛員幫助也不是太大。第三代:數(shù)碼波段顯示具體距離或者距離范圍。這代產品比第二代進步很多,可以顯示車后障礙物離車體的距離。如果是物體,在1.8米開始顯示;如果是人,在0.9米左右的距離開始顯示。這一代產品有兩種顯示方式,數(shù)碼顯示產品顯示距離數(shù)字,而波段顯示產品由三種顏色來區(qū)別:綠色代表安全距離,黃色代表警告距離,紅色代表危險距離,必須停止倒車。 第三代產品把數(shù)碼和波段組合在一起,雖然比較實用,但安裝在車內不太美觀

10、。第四代:液晶熒屏動態(tài)顯示。這一代產品有一個質的飛躍,特別是屏幕顯示開始出現(xiàn)動態(tài)顯示系統(tǒng)。不用掛倒檔,只要發(fā)動汽車,顯示器上就會出現(xiàn)汽車圖案以及車輛周圍障礙物的距離,色彩清晰漂亮,外表美觀,可以直接粘貼在儀表盤上,安裝很方便。不過液晶顯示器外觀雖精巧,但靈敏度較高,抗干擾能力較差,誤報也較多。第五代:魔幻鏡汽車防撞報警器。結合了前幾代產品的優(yōu)點,采用了最新仿生超聲雷達技術,配以高速電腦控制,可全天候準確地測知2米以內的障礙物,并以不同等級的聲音提示和直觀的顯示提醒駕駛員。魔幻鏡汽車防撞報警器可以把后視鏡、汽車防撞報警器、免提電話、溫度顯示和車內空氣污染顯示等多項功能整合在一起,并設計了語音功能

11、。因為其外形就是一塊倒車鏡,所以可以不占用車內空間,直接安裝在車內后視鏡的位置。而且顏色款式多樣,可以按照個人需求和車內裝飾選配。第六代:整合影音系統(tǒng)。它在第五代產品的基礎上新增了很多功能,屬于第六代產品,是專門為高檔轎車生產的。從外觀上來看,這套系統(tǒng)比第五代產品更為精致典雅;從功能上來看,它除了具備第五代產品的所有功能之外,還整合了高檔轎車具備的影音系統(tǒng),可以在顯示器上觀看DVD影像。價格較高。汽車防撞報警器對于駕駛者的巨大作用,使得它成為各種車輛上的必備品。第二章 汽車防撞報警器的原理和總體設計2.1 汽車防撞報警器的原理用來測距的方式多種多樣。短距離測距可以使用尺子等刻度工具,遠距離可以

12、使用激光測距等方法,而超聲波測距一般應用與中短距離測量。本設計的工作原理便是超聲波測距原理。超聲波因其頻率下限大約等于人的聽覺上限而得名。它方向性好,穿透能力強,易于獲得較集中的聲能,在水中傳播距離遠,在醫(yī)學、軍事、工業(yè)、農業(yè)上有很多的應用。聲波的傳播速度與溫度有關。由于超聲波也是一種聲波,如果在測距過程中環(huán)境溫度與常溫差距較大,則必須考慮溫度。下表列出了幾種不同溫度下的聲速。在使用時,如果溫度變化不大,則可認為聲速是基本不變的。如果測距精度要求很高,則應通過溫度補償?shù)姆椒右孕U?。聲速確定后,只要測得超聲波往返的時間,即可求得距離。表2-1 聲速與溫度的關系溫度()-30-20-100102

13、030100聲速(米/秒)313319325333338344349386超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在常溫空氣中(20)的傳播速度為(V)為340m/s(實際速度為344m/s,這里取整數(shù)),根據(jù)計時器記錄的時間(T),就可以計算出發(fā)射點距障礙物的距離(S)。S=340T/2這就是所謂的時間差測距法。為了以超聲波作為檢測手段,必須產生超生波和接收超聲波。完成這種功能的裝置就是超聲波傳感器。超聲波傳感器有發(fā)送器和接收器,但一個超聲波傳感器也可具有發(fā)送和接收聲波的雙重作用。

14、常用的超聲波傳感器可以分為二大類,一是用電氣方式產生超聲波,如壓電式、磁致伸縮式超聲波發(fā)生器;二是用機械方式產生超聲波,有加爾統(tǒng)笛、液哨和氣流旋笛等。下面我們主要介紹本設計所使用的壓電式超聲波傳感器。2.1.1 壓電式超聲波傳感器簡介壓電式超聲波傳感器的主要組成部分是壓電晶片。當壓電晶片受發(fā)射電脈沖激勵后產生振動,即可發(fā)射聲脈沖,是逆壓電效應。當超聲波作用于晶片時,晶片受迫振動引起的形變可轉換成相應的電信號,是正壓電效應。前者用于超聲波的發(fā)射,后者即為超聲波的接收。超聲波傳感器一般采用雙壓電陶瓷晶片制成。這種超聲傳感器需要的壓電材料較少,價格低廉,且非常適用于氣體和液體介質中。在壓電陶瓷上加有

15、大小和方向不斷變化的交流電壓時,根據(jù)壓電效應,就會使壓電陶瓷晶片產生機械變形,這種機械變形的大小和方向在一定范圍內是與外加電壓的大小和方向成正比的。也就是說,在壓電陶瓷晶片上加有頻率為 f0交流電壓,它就會產生同頻率的機械振動,這種機械振動推動空氣等媒介,便會發(fā)出超聲波。如果在壓電陶瓷晶片上有超聲機械波作用,這將會使其產生機械變形,這種機械變形是與超聲機械波一致的,機械變形使壓電陶瓷晶片產生頻率與超聲機械波相同的電信號。圖2-1 壓電式超聲波傳感器結構圖壓電式超聲波發(fā)生器實際上是利用壓電晶體的諧振來工作的,超聲波發(fā)生器內部結構如圖2-1所示,它有兩個壓電晶片和一個共振板,當它的兩極外加脈沖信號

16、,其頻率等于壓電晶片的固有振蕩頻率時,壓電晶片將會發(fā)生共振,并帶動共振板振動,便產生超聲波。反之,如果兩電極間未外加電壓,當共振板接收到超聲波時,將壓迫壓電晶片作振動,將機械能轉化為電信號,這時它就成為超聲波傳感器。壓電陶瓷晶片有一個固定的諧振頻率,即中心頻率 f0。發(fā)射超聲波時,加在其上面的交變電壓的頻率要與它的固有諧振頻率一致。這樣,超聲傳感器才有較高的靈敏度。當所用壓電材料不變時,改變壓電陶瓷晶片的幾何尺寸,就可非常方便的改變其固有諧振頻率。利用這一特性可制成各種頻率的超聲傳感器。2.2 汽車防撞報警器的總體設計方案按照系統(tǒng)設計的功能具體要求,初步設定汽車防撞報警器系統(tǒng)由單片機控制模塊、

17、顯示模塊、鍵盤模塊、超聲波發(fā)射模塊、超聲波接收模塊,一共五個模塊構成。單片機控制系統(tǒng)使用51單片機系列的AT89S52單片機作為控制器,該型號單片機工作性能穩(wěn)定,操作簡單,比較適合本系統(tǒng)。發(fā)射線路由單片機輸出端驅動超聲波發(fā)送。圖2-2 系統(tǒng)設計框圖硬件電路的設計主要由超聲波發(fā)射電路、超聲波接收電路、單片機控制系統(tǒng)和顯示電路四部分組成。第三章 硬件設計本汽車防撞報警器系統(tǒng)主要有主機和探頭兩部分組成。主機電路包括發(fā)射電路、接收電路、計數(shù)顯示電路三部分。單片機采用AT89S52。采用12MHz高精度的晶振,以獲得較穩(wěn)定時鐘頻率,減小測量誤差。單片機用P1.0端口控制發(fā)射和停止輸出超聲波換能器所需的4

18、0KHz的方波信號,利用外中斷0口監(jiān)測超聲波接收電路輸出的返回信號。顯示電路采用簡單實用的3位共陰LED數(shù)碼管,段碼用ZLG7289驅動。 3.1 超聲波發(fā)射模塊與接收模塊超聲波發(fā)射模塊包括超聲波產生電路和超聲波發(fā)射控制電路兩個部分,超聲波探頭選用壓電式,可采用軟件發(fā)生法和硬件發(fā)生法產生超聲波。前者利用軟件產生40KHz的超聲波信號,通過輸出引腳輸入至驅動器,經驅動器驅動后推動探頭產生超聲波。這種方法的特點是充分利用軟件,靈活性好,但需要設計一個驅動電流在100mA以上的驅動電路。第二種方法是利用超聲波專用發(fā)生電路或通用發(fā)生電路產生超聲波信號,并直接驅動換能器產生超聲波。這種方法的優(yōu)點是無須驅

19、動電路,但缺乏靈活性。本設計采用第二種方法產生超聲波發(fā)射信號。40KHz的超聲波是利用LC震蕩電路振蕩產生的。其振蕩頻率計算式如公式3-1為: (3-1)其中L=6.8mH,C=2200pF,計算得結果約等于40KHz。超聲波接收模塊包括超聲波接收探頭、信號放大電路及波形變換電路三部分。超聲波探頭必須采用與發(fā)射探頭對應的型號,關鍵是頻率要一致,本設計采用發(fā)生端同型號的壓電式超聲波傳感器,否則將因無法產生共振而影響接收效果,甚至無法接收。由于經探頭變換后的正弦波電信號非常弱,因此必須經放大電路放大。由于是汽車報警器系統(tǒng)所測距離在兩米左右所以采用兩級放大,用LF353實現(xiàn)。第一級放大100倍,第二

20、級放大50倍總計放大5000倍,這樣不僅放大增益足夠大,可以適合小信號的需求,而且信號增益也能夠變化,適應信號變化范圍大的需求。放大后的交流信號經LM567鎖相環(huán)鎖定后向CPU發(fā)中斷申請。在中斷服務程序中,讀取時間計數(shù)器的計數(shù)值,并通過計算算出雷達與障礙物的距離。接收探頭將超聲波調制脈沖變?yōu)榻蛔冸妷盒盘?,經運算放大器兩極放大后加至LM567。LM567是帶有鎖相環(huán)的音頻譯碼集成塊,LM567內部的壓控振蕩器的中心頻率,接收電路如圖4.2所示。電容C7決定其鎖定帶寬。調節(jié)R10在發(fā)射的載頻上,則LM567輸入信號大于25mV,輸出端8腳由高電平躍變?yōu)榈碗娖?,作為中斷請求信號,送至單片機處理。選頻

21、放大電路的作用是僅允許一定頻率的信號通過并放大,而其他頻率的信號將被阻斷或衰減。只要把選頻放大電路工作的中心頻率設定為40 KHz,就可以把其他頻率的干擾信號清除或衰減,同時把40 KHz的回波信號進行放大。本設計中,將超聲波發(fā)射模塊與接收模塊集成與一個電路板上,如圖所示: 圖3-1 超聲波發(fā)射與接收模塊3.3 單片機控制系統(tǒng)本設計控制系統(tǒng)中所用使用的單片機型號為AT89S52,下面就其功能特點及其結構作些簡單介紹。AT89S52是美國ATMEL 公司所生產的一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用其公司高密度非易失性存儲器技術制造,片上Flash允許

22、程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。AT89S52單片機具有很高的性價比,可以靈活應運于眾多控制領域中。主要性能參數(shù):·與MCS-51產品指令系統(tǒng)兼容 ·4K字節(jié)可編程閃爍存儲器 ·壽命:1000寫/擦循環(huán)·數(shù)據(jù)保留時間:10年·全靜態(tài)工作:0Hz-24Hz·三級程序存儲器鎖定·128*8位內部RAM·32可編程I/O線·兩個16位定時器/計數(shù)器·5個中斷源 ·可編程串行通道·低功耗的閑置和掉電模式·片內振蕩器和時鐘電路 圖3-2 AT89S52簡圖3.4 顯

23、示模塊出于功能及性價比的考慮,顯示模塊中所用使用的顯示器為LCD1062液晶顯示器。以下對其進行一些說明。 圖3-3 LCD1602液晶顯示器簡圖 圖3-4 LCD1602液晶顯示器實物圖  引腳說明引腳符號功能說明1VSS一般接地2VDD接電源(+5V)3V0液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。4RSRS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。5R/WR/W為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。6EE(或EN)端為

24、使能(enable)端,寫操作時,下降沿使能。讀操作時,E高電平有效7DB0低4位三態(tài)、 雙向數(shù)據(jù)總線 0位(最低位)8DB1低4位三態(tài)、 雙向數(shù)據(jù)總線 1位9DB2低4位三態(tài)、 雙向數(shù)據(jù)總線 2位10DB3低4位三態(tài)、 雙向數(shù)據(jù)總線 3位11DB4高4位三態(tài)、 雙向數(shù)據(jù)總線 4位12DB5高4位三態(tài)、 雙向數(shù)據(jù)總線 5位13DB6高4位三態(tài)、 雙向數(shù)據(jù)總線 6位14DB7高4位三態(tài)、 雙向數(shù)據(jù)總線 7位(最高位)(也是busy flag)15BLA背光電源正極16BLK背光 電源負極表3-1LCD1602液晶顯示器引腳說明鍵盤模塊和供電單元略第四章 軟件設計4.1 軟件的設計要求本系統(tǒng)的設計

25、要求是利用超聲波測距原理設計一個汽車防撞報警器。要求通過設計能夠測量出并顯示車與障礙物之間的距離,并能在距離小于一定的值的時候根據(jù)設定的值進行聲光報警。4.2 軟件設計的總體結構框圖圖4-1 系統(tǒng)模塊框圖系統(tǒng)初始化模塊:即系統(tǒng)剛上電的時候對系統(tǒng)的各個引腳的電平分配和對各寄存器的初值賦值。數(shù)碼管顯示模塊:通過該模塊的設計能夠讓所測得的距離等信息顯示在數(shù)碼管上。按鍵掃描模塊:此模塊用來通過鍵盤控制系統(tǒng)的工作。發(fā)射接收控制模塊:發(fā)射控制模塊是軟件控制超聲波發(fā)射電路發(fā)射。超聲脈沖啟動定時器工作,同時啟動接收電路工作,當接收電路有信號輸入時,對輸入信號進行處理。運算結果處理模塊:運算結果處理模塊將多次所

26、測的時間進行處理,進行軟件取大值工作,根據(jù)公式計算出距離,然后再對計算得出的結果進行修正處理,數(shù)據(jù)處理后送至數(shù)碼管顯示模塊。聲光報警模塊:當所測距離小于一定值時,通過聲光報警來提醒使用者。4.3 各個程序的流程圖本節(jié)講述的是各個程序流程圖的設計,包括:主程序流程圖、測距程序流程圖、距離處理流程圖、語音播報程序流程圖、LED顯示程序流程圖、中斷程序流程圖。4.3.1 主流程圖圖4-2 主程序流程圖工作時,微處理器AT89S52先把P1.0置0,啟動超聲波傳感器發(fā)射超聲波,同時啟動內部定時器T0開始計時。要檢測返回信號必須在啟動發(fā)射信號后1.4ms才可以檢測,這樣就可以抑制輸出得干擾。當超聲波信號

27、碰到障礙物時信號立刻返回,微處理器不停的掃描INT0引腳,如果INT0接收的信號由高電平變?yōu)榈碗娖?,此時表明信號已經返回,微處理器進入中斷關閉定時器。再把定時器中的數(shù)據(jù)經過換算就可以得出超聲波傳感器與障礙物之間的距離。然后再根據(jù)現(xiàn)場的情況進行聲光報警。4.3.2 發(fā)射接收模塊流程主程序調用測量子程序,計算子程序,顯示子程序完成一個測量周期。測量子程序如下:圖4-3 測量子程序流程圖考慮到在測量的距離超過一定限度后誤差會變大,可以在大于一定距離后采用軟件修正,補償實際測的數(shù)據(jù),當然這要在調試中收集大量的實際測試數(shù)據(jù)后在單片機中設置。當計算時為了提高計算精度可以用計算計數(shù)脈沖個數(shù)來提高計算精度,改

28、進后的公式如公式4-1: (4-1)其中N表示為計數(shù)脈沖個數(shù),v為超聲波在空氣中的速度,f為計數(shù)頻率也即單片機的晶振頻率。4.3.3 中斷程序流程在中斷程序中,當有中斷產生也即接收到超聲波信號就馬上關閉中斷與定時器,并進行距離計算與判斷的工作。圖4-4 中斷程序流程圖時間計測:超聲波從發(fā)射到接收的間隔時間的測定是由單片機內部的計數(shù)器T0來完成的。在調試過程中出現(xiàn)的發(fā)送部分與接收部分的直接串擾問題是由于換能器之間的距離不大,有部分聲波未經被測物就直接繞射到接收換能器上。從發(fā)射開始一直到“虛假反射波”結束這段時間,通過控制觸發(fā)器不能觸發(fā),也即超聲波發(fā)射后不是馬上的接收,而是要經過一段時間的等待再接

29、收,使不會發(fā)中斷申請,可有效躲避干擾,但也會形成所謂的“盲區(qū)”。本系統(tǒng)的盲區(qū)通過計算在24cm左右。4.4 部分程序#include <AT89x51.H>/器件配置文件#include <intrins.h>#define RX P3_1#define TX P3_2#define LCM_RW P2_1 /定義LCD引腳#define LCM_RS P2_0#define LCM_E P2_2sbit BUSY = P07;#define LCM_Data P0#define buzzer P2_3#define LED P3_6#define LCD_COMMAN

30、D0 / Command#define LCD_DATA1 / Datasfr DBPort = 0x80;sbit DQ = P37; /溫度傳送數(shù)據(jù)IO口unsigned int TempBuffer7;unsigned int temp_value,xiaoshu; /溫度值#define Busy 0x80 /用于檢測LCM狀態(tài)字中的Busy標識void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigne

31、d char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Delay400Ms(void);void Decode(unsigned char ScanCode);void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);unsigned char c

32、ode mcustudio ="Temp: " /unsigned char code email = "NAME:Zhu Kailun "unsigned char code Cls = " "unsigned char code Distance = "Distance: "unsigned char code ASCII15 = '0','1','2','3','4','5','6','7&

33、#39;,'8','9','.','-','M'static unsigned char DisNum = 0; /顯示用指針 unsigned int time=0; unsigned long S=0; bit flag =0; unsigned char disbuff4 = 0,0,0,0,;/寫數(shù)據(jù)void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /檢測忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E

34、= 0; /若晶振速度太高可以在這后加小的延時LCM_E = 0; /延時LCM_E = 1;/寫指令void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC為0時忽略忙檢測if (BuysC) ReadStatusLCM(); /根據(jù)需要檢測忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;/讀數(shù)據(jù)unsigned char ReadDataLCM(void)LCM_RS = 1; LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_

35、E = 1;return(LCM_Data);/讀狀態(tài)unsigned char ReadStatusLCM(void)LCM_Data = 0xFF; LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy); /檢測忙信號return(LCM_Data); 等待繁忙標志void wait(void)P0 = 0xFF;doLCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 1;while (BUSY = 1);LCM_E = 0;void w_dat(unsig

36、ned int dat)wait();LCM_E = 0;P0 = dat;LCM_RS = 1;LCM_RW = 0;LCM_E = 1;LCM_E = 0;void w_cmd(unsigned int cmd)wait();LCM_E = 0;P0 = cmd;LCM_RS = 0;LCM_RW = 0;LCM_E = 1;LCM_E = 0;void w_string(unsigned int addr_start, unsigned int *p)w_cmd(addr_start | 0x80);while (*p != '0')w_dat(*p+);void w_d

37、ata(unsigned int addr_start, unsigned int dat)w_cmd(addr_start | 0x80);w_dat(dat%100/10 + '0');w_dat(dat%10 + '0');void LCMInit(void) /LCM初始化LCM_Data = 0;WriteCommandLCM(0x38,0); /三次顯示模式設置,不檢測忙信號Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); Write

38、CommandLCM(0x38,1); /顯示模式設置,開始要求每次檢測忙信號WriteCommandLCM(0x08,1); /關閉顯示WriteCommandLCM(0x01,1); /顯示清屏WriteCommandLCM(0x06,1); / 顯示光標移動設置WriteCommandLCM(0x0F,1); / 顯示開及光標設置/按指定位置顯示一個字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1i

39、f (Y) X |= 0x40; /當要顯示第二行時地址碼+0x40;X |= 0x80; /算出指令碼WriteCommandLCM(X, 1); /發(fā)命令字WriteDataLCM(DData); /發(fā)數(shù)據(jù)/按指定位置顯示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)unsigned char ListLength; ListLength = 0;Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1while (DDataListL

40、ength>0x19) /若到達字串尾則退出if (X <= 0xF) /X坐標應小于0xFDisplayOneChar(X, Y, DDataListLength); /顯示單個字符ListLength+;X+;LCD_Wait(void)LCM_RS=0;LCM_RW=1;_nop_();LCM_E=1;_nop_(); LCM_E=0;return DBPort;void LCD_Write(bit style, unsigned char input)LCM_E=0;LCM_RS=style;LCM_RW=0;_nop_();DBPort=input;_nop_();/注意

41、順序LCM_E=1;_nop_();/注意順序LCM_E=0;_nop_();LCD_Wait();void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!='0')LCD_Write(LCD_DATA,*str);str+;void delay_18B20(unsigned int i)while(i-)

42、;void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ復位 delay_18B20(8); /稍做延時 DQ = 0; /單片機將DQ拉低 delay_18B20(80); /精確延時 大于 480us DQ = 1; /拉高總線 delay_18B20(14); x=DQ; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay_18B20(20);unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i

43、-) DQ = 0; / 給脈沖信號 dat>>=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0x80; delay_18B20(4); return(dat); void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsi

44、gned char t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉換delay_18B20(100); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度delay_18B20(100);a=ReadOneChar(); /讀取溫度值低位b=ReadOneChar(); /讀取溫度值高位x

45、iaoshu=a&0x0f;temp_value=b<<4;temp_value+=(a&0xf0)>>4; void temp_to_str() /溫度數(shù)據(jù)轉換成液晶字符顯示 TempBuffer0=temp_value/10+'0' /十位 TempBuffer1=temp_value%10+'0' /個位 TempBuffer2=0x2e; TempBuffer3=xiaoshu*10/16+'0'/小數(shù) TempBuffer4=0xdf; /溫度符號 TempBuffer5='C'

46、TempBuffer6='0' /5ms延時void Delay5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);/400ms延時void Delay400Ms(void)unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA-)TempCycB=7269;while(TempCycB-); void Conut(void) time=TH0*256+TL0; TH0=0; TL0=0; LED=1; /rsd=0; S=(time*1.7)/100;

47、 /算出來是CM if(S<50)&(S>30) buzzer=0; LED=0; Delay400Ms(); /延時 buzzer=1; LED=1; else if(S<30)&(S>1) buzzer=0; LED=0; Delay5Ms(); /延時 Delay5Ms(); /延時 Delay5Ms(); /延時 Delay5Ms(); /延時 buzzer=1; LED=1; if(S>=700)|flag=1) /超出測量范圍顯示“-” flag=0; DisplayOneChar(11, 1, ASCII11); DisplayOne

48、Char(12, 1, ASCII10);/顯示點 DisplayOneChar(13, 1, ASCII11); DisplayOneChar(14, 1, ASCII11); DisplayOneChar(15, 1, ASCII12);/顯示M else disbuff0=S%1000/100; disbuff1=S%1000%100/10; disbuff2=S%1000%10 %10; DisplayOneChar(11, 1, ASCIIdisbuff0); DisplayOneChar(12, 1, ASCII10);/顯示點 DisplayOneChar(13, 1, ASCI

49、Idisbuff1); DisplayOneChar(14, 1, ASCIIdisbuff2); DisplayOneChar(15, 1, ASCII12);/顯示M void zd0() interrupt 1 /T0中斷用來計數(shù)器溢出,超過測距范圍 flag=1; /中斷溢出標志 void StartModule() /啟動模塊 TX=1; /啟動一次模塊 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

50、 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; void delayms(unsigned int ms)unsigned char i=100,j;for(;ms;ms-)while(-i)j=10;while(-j);void main(void)unsigned char TempCyc;Delay400Ms(); /啟動等待,等LCM講入工作狀態(tài)LCMInit(); /LCM初始化Delay5Ms(); /延時片刻(可不要)DisplayListChar(0, 0, mcustudio);ReadDataLCM();/測試用句無意義for (TempCyc=0; TempCyc<10; TempCyc+)Delay400Ms(); /延時DisplayListChar(0, 1, Distance);DisplayListChar(11, 1, Cls);ReadTemp(); /開啟溫度采集程序 temp_to_str(); /溫度數(shù)據(jù)轉換成液晶字符GotoXY(8,0); Print(TempBuffer); /顯示溫度while(1) TMOD=0x01; /設T0為方

溫馨提示

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

評論

0/150

提交評論