單片機(jī)的課程設(shè)計(jì)(綜合應(yīng)用實(shí)例)課件_第1頁(yè)
單片機(jī)的課程設(shè)計(jì)(綜合應(yīng)用實(shí)例)課件_第2頁(yè)
單片機(jī)的課程設(shè)計(jì)(綜合應(yīng)用實(shí)例)課件_第3頁(yè)
單片機(jī)的課程設(shè)計(jì)(綜合應(yīng)用實(shí)例)課件_第4頁(yè)
單片機(jī)的課程設(shè)計(jì)(綜合應(yīng)用實(shí)例)課件_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第13章 單片機(jī)的課程設(shè)計(jì)(綜合應(yīng)用實(shí)例) 13.1 紅外接收器件TL1838 近年來(lái)隨著計(jì)算機(jī)在社會(huì)各領(lǐng)域的滲透,單片機(jī)的應(yīng)用正在不斷地走向深入,同時(shí)也帶動(dòng)傳統(tǒng)的控制、檢測(cè)等工作日益更新。傳統(tǒng)的遙控器大多采用無(wú)線電遙控技術(shù),隨著科技的進(jìn)步,紅外線遙控技術(shù)的進(jìn)一步成熟,紅外遙控也逐步成為了一種被廣泛應(yīng)故不同房間的家用電器可使用通用的遙控器而不會(huì)產(chǎn)生相互干擾;電用的通信和遙控手段。為了方便實(shí)用,傳統(tǒng)的家庭電器逐漸采用紅外線遙控。工業(yè)設(shè)備中,在高壓、輻射、有毒氣體、粉塵等有害環(huán)境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。紅外遙控的特點(diǎn)是不影響周邊環(huán)境、不干擾其它電器設(shè)備。由于其無(wú)法穿

2、透墻壁,路調(diào)試簡(jiǎn)單,只要按給定電路連接無(wú)誤,一般不需任何調(diào)試即可投入工作;編解碼容易,可進(jìn)行多路遙控。紅外遙控雖然被廣泛應(yīng)用,但各產(chǎn)商的遙控器不能相互兼容。當(dāng)今市場(chǎng)上的紅外線遙控裝置一般采用專用的遙控編碼及解碼集成電路,但編程靈活性較低,且產(chǎn)品多相互綁定,不能復(fù)用,故應(yīng)用范圍有限。而本文采用單片機(jī)進(jìn)行遙控系統(tǒng)的應(yīng)用設(shè)計(jì),遙控裝置將同時(shí)具有編程靈活、控制范圍廣、體積小、功耗低、功能強(qiáng)、成本低、可靠性高等特點(diǎn),因此采用單片機(jī)的紅外遙控技術(shù)具有廣闊的發(fā)展前景。13.1.1 概述 1. 基于單片機(jī)的紅外遙控系統(tǒng)概述 當(dāng)今社會(huì)科學(xué)技術(shù)的發(fā)展與日俱增,人們生活水平也是日益提高,為了減少人們的工作量,所以對(duì)

3、各種家用電器、電子器件的非人工控制的要求越來(lái)越高,針對(duì)這種情況,設(shè)計(jì)出一種集成度比較高的控制體系是必然的?,F(xiàn)代科技的飛速發(fā)展在許多危險(xiǎn)、不可近場(chǎng)合也對(duì)遠(yuǎn)程控制提出了越來(lái)越高的要求。單片機(jī)是指一個(gè)集成在一塊芯片上的完整計(jì)算機(jī)系統(tǒng)。盡管他的大部分功能集成在一塊小芯片上,但是它具有一個(gè)完整計(jì)算機(jī)所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會(huì)具有外存。同時(shí)集成諸如通訊接口、定時(shí)器,實(shí)時(shí)時(shí)鐘等外圍設(shè)備。而現(xiàn)在最強(qiáng)大的單片機(jī)系統(tǒng)甚至可以將聲音、圖像、網(wǎng)絡(luò)、復(fù)雜的輸入輸出系統(tǒng)集成在一塊芯片上。單片機(jī)的集成度很高,它體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化、使用方便等突出特點(diǎn),尤其耗

4、電少,又可使供電電源體積小、質(zhì)量輕。所以特別適用于“電腦型產(chǎn)品”,它的應(yīng)用已深入到工業(yè)、農(nóng)業(yè)、國(guó)防、科研、教育以及日常生活用品(家電、玩具)等各種領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒(méi)有單片機(jī)的蹤跡。單片機(jī)特別適合把它做到產(chǎn)品的內(nèi)部,取代部分老式機(jī)械、電子零件或元器件??墒巩a(chǎn)品縮小體積,增強(qiáng)功能,實(shí)現(xiàn)不同程度的智能化。 紅外線是一種光線,具有普通光的性質(zhì),可以以光速直線傳播,強(qiáng)度可調(diào),可以通過(guò)光學(xué)透鏡聚焦,可以被不透明物體遮擋等等。特別制造的半導(dǎo)體發(fā)光二極管,可以發(fā)出特定波長(zhǎng)(通常是近紅外)的紅外線,通過(guò)控制二極管的電流可以很方便的改變紅外線的強(qiáng)度,以達(dá)到調(diào)制的目的,因此,在現(xiàn)代電子工程應(yīng)用中,紅外線常

5、常被用做近距離視線范圍內(nèi)的通訊載波。使用紅外線做信號(hào)載波的優(yōu)點(diǎn)很多:成本低、傳播范圍和方向可以控制、不產(chǎn)生電磁輻射干擾,也不受干擾等等。因此被廣泛地應(yīng)用在各種技術(shù)領(lǐng)域中。由于紅外線為不可見(jiàn)光,因此對(duì)環(huán)境影響很小,再由紅外光波長(zhǎng)遠(yuǎn)小于無(wú)線電波的波長(zhǎng),所以紅外線遙控不會(huì)影響其他家用電器,也不會(huì)影響臨近的無(wú)線電設(shè)備。最典型的應(yīng)用就是家電遙控器。紅外線遙控不具有像無(wú)線電遙控那樣穿過(guò)障礙物去控制被控對(duì)象的能力,所以,在設(shè)計(jì)家用電器的紅外線遙控器時(shí),不必要像無(wú)線電遙控器那樣,每套(發(fā)射器和接收器)要有不同的遙控頻率或編碼(否則,就會(huì)隔墻控制或干擾鄰居的家用電器)。同類產(chǎn)品的紅外線遙控器,也可以有相同的遙控

6、頻率或編碼,而不會(huì)出現(xiàn)遙控信號(hào)“串門”的情況。這對(duì)于大批量生產(chǎn)以及在家用電器上普及紅外線遙控提供了極大的方面。本設(shè)計(jì)主要研究并設(shè)計(jì)一個(gè)基于單片機(jī)的紅外發(fā)射及接收系統(tǒng),實(shí)現(xiàn)對(duì)溫度控制的隔離控制??刂葡到y(tǒng)主要是由 MCS-51 系列單片機(jī)、集成紅外發(fā)射遙控器、紅外接收電路、LCD 顯示電路,溫度控制電路等部分組成,發(fā)射遙控信號(hào)經(jīng)紅外接收處理傳送給單片機(jī),單片機(jī)根據(jù)不同的信息碼控制溫度報(bào)警,并完成相應(yīng)的狀態(tài)指示(如圖13-1)。按鍵編碼和調(diào)制紅外發(fā)射紅外接收解碼并響應(yīng)紅外遙控器紅外接收?qǐng)D13-1 紅外線遙控系統(tǒng)框圖 2. 本設(shè)計(jì)方案思路 本設(shè)計(jì)主控芯片采用目前比較通用的MCS-51系列單片機(jī)。此類單

7、片機(jī)的運(yùn)算能力強(qiáng),軟件編程靈活,自由度大,市場(chǎng)上比較多見(jiàn),價(jià)格便宜且技術(shù)比較成熟容易實(shí)現(xiàn)。紅外傳輸利用載波對(duì)信號(hào)進(jìn)行調(diào)制從而減少信號(hào)傳輸過(guò)程中的光波干擾,提高數(shù)據(jù)傳輸效率。由遙控器將鍵盤(pán)信息及系統(tǒng)識(shí)別碼等數(shù)據(jù)調(diào)制在紅外載波上經(jīng)紅外發(fā)射頭發(fā)射出去。接收方由紅外一體化接收頭實(shí)現(xiàn)對(duì)接收信號(hào)的放大解調(diào)并還原為數(shù)據(jù)流,經(jīng)由單片機(jī)解碼后對(duì)相關(guān)IO口進(jìn)行操作。 3. 研發(fā)方向和技術(shù)關(guān)鍵 1) 合理設(shè)計(jì)硬件電路,使各模塊功能協(xié)調(diào); 2) 紅外接收信號(hào)的脈沖波形; 3) 紅外接收信號(hào)的編解碼; 4) 單片機(jī)對(duì)IO口的操作; 4. 主要技術(shù)指標(biāo) 1) 遙控最遠(yuǎn)距離8到10m 2) 工作頻率為 38KHz,即紅外發(fā)

8、射和接收的載頻為 38KHz; 4) 接收端可顯示受控狀態(tài)以及輸入控制數(shù)據(jù)。圖13-2 系統(tǒng)總體結(jié)構(gòu)框圖1. 紅外遙控發(fā)射部分 紅外遙控發(fā)射部分為常見(jiàn)的普通遙控器。 2. 紅外遙控接收部分紅外遙控接收電路框圖見(jiàn)圖13-3。紅外接收端普遍采用價(jià)格便宜,性能可靠的一體化紅外接收頭(VS1838B , 它接收紅外信號(hào)頻率為38KHz ,周期約26s)。它能同時(shí)對(duì)信號(hào)進(jìn)行放大、檢波、整形,得到TTL 電平的編碼信號(hào)。紅外接收頭收到信號(hào)后單片機(jī)立即產(chǎn)生中斷,開(kāi)始接收紅外信號(hào)。接收到的信號(hào)經(jīng)單片機(jī)解碼得到用戶遙控信息并轉(zhuǎn)至IO口執(zhí)行,同時(shí)單片機(jī)還完成對(duì)處于工作狀態(tài)的設(shè)備進(jìn)行計(jì)數(shù)并顯示。2) 二進(jìn)制信號(hào)的解

9、調(diào)二進(jìn)制信號(hào)的解調(diào)由一體化紅外接收頭VS1838B來(lái)完成,它把接收到的紅外信號(hào)(圖13-4 中波形D)經(jīng)內(nèi)部處理并解調(diào)復(fù)原,在輸出腳輸出圖13-4中波形E,VS1838B 的解調(diào)可理解為:在輸入有脈沖串時(shí),輸出端輸出低電平,否則輸出高電平??芍苯优c單片機(jī)串行輸入口及外中斷相聯(lián),以實(shí)現(xiàn)隨時(shí)接收遙控信號(hào)并產(chǎn)生中斷,然后由單片機(jī)對(duì)編碼還原。 3) 二進(jìn)制信號(hào)的解碼 二進(jìn)制信號(hào)的解碼由接收單片機(jī)來(lái)完成,它把紅外接收頭送來(lái)的二進(jìn)制編碼波形通過(guò)解碼,還原出發(fā)送端發(fā)送的數(shù)據(jù)。如圖13-4,把波形解碼還原成原始二進(jìn)制數(shù)據(jù)信息101。圖13-4 紅外接收頭接收及輸出波形13.1.3 硬件設(shè)計(jì) 1. 主控芯片AT

10、89C51 AT89C51是美國(guó)ATMEL公司生產(chǎn)的低功耗,高性能CMOS8位單片機(jī),片內(nèi)含4k bytes的可系統(tǒng)編程的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集Flash程序存儲(chǔ)器既可在線編程(ISP)也可用傳統(tǒng)方法進(jìn)行編程。 2. 紅外發(fā)射紅外發(fā)送器大多是使用Ga、As等材料制成的紅外發(fā)射二極管,其能夠通過(guò)的LED電流越大,發(fā)射角度越小,產(chǎn)生的發(fā)射強(qiáng)度就越大;發(fā)射強(qiáng)度越大,紅外傳輸距離就越遠(yuǎn),傳輸距離正比于發(fā)射強(qiáng)度的平方根。 通常,紅外遙控器將遙控信號(hào)(二進(jìn)制脈沖碼)調(diào)制在40KHz(周期為26.3ms)的載波上,

11、經(jīng)緩沖放大后送至紅外發(fā)光二極管,產(chǎn)生紅外信號(hào)發(fā)射出去。在紅外數(shù)據(jù)發(fā)射過(guò)程中,由于發(fā)送信號(hào)時(shí)的最大平均電流需幾十mA(對(duì)應(yīng)mW級(jí)發(fā)射功率),所以需要三極管放大后去驅(qū)動(dòng)紅外光發(fā)射二極管(又稱電光二極管)。單片機(jī)通過(guò)軟件編程將調(diào)制好的脈沖信號(hào)從P3口第6腳(P3.5)將數(shù)據(jù)輸出 1) 紅外信號(hào)接收電路VS1838B是用于紅外遙控接收的小型一體化接收頭,它的主要功能包括放大,選頻,解調(diào)幾大部分,要求輸入信號(hào)需是已經(jīng)被調(diào)制的信號(hào)。經(jīng)過(guò)它的接收放大和解調(diào)會(huì)在輸出端直接輸出原始信號(hào)的反相信號(hào)。其不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號(hào)兼容的所有工作,而體積和普通的塑封三極管大小一樣,從

12、而使電路達(dá)到最簡(jiǎn)化!靈敏度和抗干擾性都非常好。它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸,中心頻率38.0kHz。接收器對(duì)外只有3個(gè)引腳,如圖13-5所示,從左至右依次為OUT、GND、VCC。紅外接收頭電路圖如圖13-6所示,OUT腳(1號(hào)腳)與單片機(jī)IO口直接相連。圖13-5 VS1838B引腳紅外接收頭內(nèi)部放大器的增益很大,很容易引起干擾,依次在接收頭的供電腳上必須加上濾波電容。故紅外接收部分電路如圖13-6所示。圖13-6 紅外接收頭電路 13.1.4 制作過(guò)程仿真調(diào)試電路如圖13-7所示。圖13-7 紅外仿真調(diào)試電路圖實(shí)物制作樣品如圖13-8所示。 圖13-8 實(shí)物制作樣品圖 實(shí)物演示效

13、果圖如圖13-9所示。 圖13-9 實(shí)物演示效果圖溫度控制規(guī)則:當(dāng)前實(shí)際溫度大于設(shè)定最高溫度,LED燈發(fā)出警告。當(dāng)前實(shí)際溫度小于設(shè)定最少溫度,LED燈發(fā)出警告。由于目前的遙控裝置大多對(duì)某一設(shè)備進(jìn)行單獨(dú)控制,而在本設(shè)計(jì)中的紅外遙控電路設(shè)計(jì)了多個(gè)控制按鍵,可以對(duì)不同的設(shè)備,也可以對(duì)同一設(shè)備的多個(gè)功能進(jìn)行控制。系統(tǒng)可通過(guò)設(shè)定發(fā)射及接收程序中的識(shí)別碼及識(shí)別反碼達(dá)到不同遙控器間相互區(qū)分,對(duì)識(shí)別碼、識(shí)別反碼、控制碼和控制碼反碼的判定一方面消除了非遙控信號(hào)的紅外干擾,另一方面降低了誤操作發(fā)生的幾率。經(jīng)過(guò)測(cè)試,設(shè)計(jì)結(jié)果完全達(dá)到課題任務(wù)要求。 但是本電路也有不完善的地方, 由于時(shí)間、水平和經(jīng)驗(yàn)有限,在信號(hào)解碼、

14、抗干擾及功耗控制等方面仍有不足之處,有改進(jìn)的余地。例如設(shè)計(jì)中可通過(guò)增加紅外線發(fā)射功率進(jìn)而增加遙控距離,改進(jìn)信號(hào)編碼方式以提高數(shù)據(jù)的傳輸速度,使用小型單片機(jī)以降低功耗等。另外在系統(tǒng)的調(diào)試方面,由于時(shí)間和設(shè)備的原因,只進(jìn)行了短距離的調(diào)試,更多參數(shù)有待進(jìn)一步的調(diào)試。在設(shè)計(jì)過(guò)程中,通過(guò)大量的查閱資料,認(rèn)真研究教材,對(duì)單片機(jī)有了更為深刻的理解,在編寫(xiě)軟件時(shí),須仔細(xì)的分析硬件電路及所要達(dá)到的功能,然后設(shè)計(jì)程序流程,編寫(xiě)代碼。整個(gè)過(guò)程培養(yǎng)了我的耐性和刻苦鉆研的精神。這次設(shè)計(jì)對(duì)于我們組來(lái)說(shuō),既是一次機(jī)遇,又是一次挑戰(zhàn)。通過(guò)這次的設(shè)計(jì),我學(xué)到了很多東西。通過(guò)自己的實(shí)踐,增強(qiáng)了動(dòng)手能力,掌握了系統(tǒng)的分析解決問(wèn)題的

15、方法。通過(guò)實(shí)際工程設(shè)計(jì)也使我了解到書(shū)本知識(shí)和實(shí)際應(yīng)用的差別。在實(shí)際應(yīng)用中遇到很多的問(wèn)題,這都需要我對(duì)問(wèn)題進(jìn)行具體的分析,并一步一步地去解決它。13.1.5 源程序代碼#include#include#include 18b20.h#define uchar unsigned char#define uint unsigned int uchar m,k1,k2; uchar c,c1,c2,c3,t1,t2,t3,b;uint temp; uint temp_h=350,temp_l=250;void delay(uchar x); /x*0.14MSvoid display(uchar *t

16、ab1,uchar *tab2);void IR_IN();/* */*寫(xiě)指令數(shù)據(jù)到LCD */*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */* */*/void lcd_wcmd(uchar cmd) LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; P0 = cmd; LCD_EN = 1; delay(50); LCD_EN = 0; delay(50); /*/* */*寫(xiě)顯示數(shù)據(jù)到LCD */*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */* */*/void lcd_wdat(uchar dat) LCD_RS = 1; LCD_RW

17、= 0; LCD_EN = 0; P0 = dat; LCD_EN = 1; delay(50); LCD_EN = 0; delay(50);/*/void display(uchar *tab1,uchar *tab2) lcd_wcmd(0 x80); /設(shè)置顯示位置為第一行的第1個(gè)字符 m = 0; while(tab1m != 0) /顯示字符 lcd_wdat(tab1m); m+; lcd_wcmd(0 x90); /設(shè)置顯示位置為第二行第1個(gè)字符 m = 0; while(tab2m != 0) lcd_wdat(tab2m); /顯示字符 m+; /*延時(shí)函數(shù)*/void d

18、elay(unsigned char x) /x*0.14MS uchar i; while(x-) for (i = 0; i=temp_h|temp=temp_l)led=0;else led=1;/else if(temp=tem_tl)/ 默認(rèn)45度,繼電器動(dòng)作,等到溫度降到35,繼電器恢復(fù) / led=1;/*紅外數(shù)據(jù)接收和處理*/void IR_IN() interrupt 0 using 0 unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN=1) EX0 =1; return; /確認(rèn)IR信號(hào)出現(xiàn) while (!IRIN)

19、/等IR變?yōu)楦唠娖?,跳過(guò)9ms的前導(dǎo)低電平 信號(hào)。 delay(1);for (j=0;j4;j+) /收集四組數(shù)據(jù) for (k=0;k=30) EX0=1; return; /0.14ms計(jì)數(shù)過(guò)長(zhǎng)自動(dòng)離開(kāi)。 /高電平計(jì)數(shù)完畢 IRCOMj=IRCOMj 1; /數(shù)據(jù)最高位補(bǔ)“0” if (N=8) IRCOMj = IRCOMj | 0 x80; /數(shù)據(jù)最高位補(bǔ)“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3) EX0=1; return; IRCOM5=IRCOM2 & 0 x0F; /取鍵碼的低四位 IRCOM6=IRCOM2 4; /

20、右移4次,高四位變?yōu)榈退奈?if(IRCOM59) IRCOM5=IRCOM5+0 x37; else IRCOM5=IRCOM5+0 x30; if(IRCOM69) IRCOM6=IRCOM6+0 x37; else IRCOM6=IRCOM6+0 x30;/* (顯示編碼之后,測(cè)試譯碼,將編碼轉(zhuǎn)變成功能鍵) */ if(IRCOM5=C & IRCOM6=0) /遙控器中的0按鍵的編碼是0 x0C,當(dāng)接收的編碼是0 x0c時(shí)顯示1 c=1;b+;if(b=4)b=0; if(IRCOM6=5 & IRCOM5=E) c=3;b+;if(b=4)b=0; if(IRCOM6=0 & IRC

21、OM5=8) c=4;b+;if(b=4)b=0; if(IRCOM6=1 & IRCOM5=C) c=5;b+;if(b=4)b=0; if(IRCOM6=5 & IRCOM5=A) c=6;b+;if(b=4)b=0; if(IRCOM6=4 & IRCOM5=2) c=7;b+;if(b=4)b=0; if(IRCOM6=5 & IRCOM5=2) c=8;b+;if(b=4)b=0; if(IRCOM6=4 & IRCOM5=A) c=9;b+;if(b=4)b=0; if(IRCOM6=1 & IRCOM5=6) c=0;b+;if(b=4)b=0; / if(IRCOM6=0 &

22、IRCOM5=7) k1+;k2=0; if(IRCOM6=1 & IRCOM5=5) k2+;k1=0; if(IRCOM6=0 & IRCOM5=9) k2=0;k1=0; /* 測(cè)試譯碼end */ cdis210=IRCOM5; cdis29=IRCOM6; if(k10 & k2=0) if(b=1)t1=c;cdis229=c+0 x30; if(b=2)t2=c;cdis2210=c+0 x30; if(b=3)t3=c;cdis2212=c+0 x30;temp_h=t3+t2*10+t1*100;b=0; if(k20 & k1=0) if(b=1)t1=c;cdis329=

23、c+0 x30; if(b=2)t2=c;cdis3210=c+0 x30; if(b=3)t3=c;cdis3212=c+0 x30;temp_l=t3+t2*10+t1*100;b=0; EX0 = 1; /*/main() IRIN=1; /I/O口初始化 lcd_init(); /初始化LCD IE = 0 x81; /允許總中斷中斷,使能 INT0 外部中斷TCON = 0 x01; /觸發(fā)方式為脈沖負(fù)邊沿觸發(fā) while(1) /if(k10)b=0;lcd_wcmd(0 x01); /清除LCD的顯示內(nèi)容 cdis220=temp_h/100+0 x30; /顯示十位cdis22

24、1=temp_h/10%10+0 x30; /顯示個(gè)位cdis223=temp_h%10+0 x30; /顯示0.1cdis229=-;cdis2210=-;cdis2212=-; while(1) display(cdis21,cdis22);if(k1=0)break;warr(); if(k20)b=0;lcd_wcmd(0 x01); /清除LCD的顯示內(nèi)容cdis320=temp_l/100+0 x30; /顯示十位cdis321=temp_l/10%10+0 x30; /顯示個(gè)位cdis323=temp_l%10+0 x30; /顯示0.1cdis329=-;cdis3210=-;

25、cdis3212=-; while(1) display(cdis31,cdis32);if(k2=0)break;warr(); if(k2=0 & k1=0)lcd_wcmd(0 x01); /清除LCD的顯示內(nèi)容while(1)temp=ReadTemperature(); /讀溫度cdis19=temp%1000/100+0 x30; /顯示十位cdis110=temp%100/10+0 x30; /顯示個(gè)位cdis112=temp%10+0 x30; /顯示0.1display(cdis1,cdis2);if(k2!=0 | k1!=0)break;warr(); /end main

26、#include 18b20.h#define uchar unsigned char #define uint unsigned intsbit DATA = P14; /DS18B20接入口/*延時(shí)子函數(shù)*/void Ddelay(uint num)while(num-) ;/*/*DS18b20設(shè)置*/Init_DS18B20() /傳感器初始化 uchar x=0; DATA = 1; /DQ復(fù)位 Ddelay(10); /稍做延時(shí) DATA = 0; /單片機(jī)將DQ拉低 Ddelay(80); /精確延時(shí) 大于 480us /450 DATA = 1; /拉高總線 Ddelay(20

27、); x=DATA; /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 Ddelay(30);/讀一個(gè)字節(jié)ReadOneChar()uchar i=0;uchar dat = 0;for (i=8;i0;i-) DATA = 0; / 給脈沖信號(hào) dat=1; DATA = 1; / 給脈沖信號(hào) if(DATA) dat|=0 x80; Ddelay(8); return(dat);/寫(xiě)一個(gè)字節(jié)WriteOneChar(unsigned char dat) uchar i=0; for (i=8; i0; i-) DATA = 0; DATA = dat&0 x01; Ddelay(1

28、0); DATA = 1; dat=1; Ddelay(8);/讀取溫度int ReadTemperature()uchar a=0;uchar b=0;int t=0;float tt=0;Init_DS18B20();WriteOneChar(0 xCC); / 跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(0 x44); / 啟動(dòng)溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0 xCC); /跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(0 xBE); /讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度a=ReadOneChar();/低位b=ReadOneChar(

29、);/高位t=b;t=8;t=t|a;t=t*0.625; return(t);/*/13.2 超聲波測(cè)距 隨著我國(guó)經(jīng)濟(jì)與社會(huì)的發(fā)展,交通安全日益成為人們不能忽視的問(wèn)題。由于人口的大幅增長(zhǎng),機(jī)動(dòng)車輛的大量增加,使得路況越來(lái)越復(fù)雜,車輛和行人所面臨的危機(jī)也越來(lái)越大。根據(jù)中國(guó)汽車協(xié)會(huì)發(fā)布的數(shù)據(jù),隨著中國(guó)經(jīng)濟(jì)的高速發(fā)展和居民生活水平的不斷提高,居民擁有汽車的數(shù)量已經(jīng)有爆炸性上漲的趨勢(shì)。隨著汽車保有量的迅速增加以及城市市區(qū)的密集化, 目前公路上、停車場(chǎng)上的汽車越來(lái)越多, 交通也越來(lái)越擁擠,使得出現(xiàn)越來(lái)越多的交通事故,嚴(yán)重威脅著人民群眾的生命和財(cái)產(chǎn)安全。 由于道路空間的有限性,駕車穿行、拐彎、倒車等總次

30、數(shù)不斷增長(zhǎng),但是汽車駕駛員視野又是非常有限,故而碰撞和拖掛的事故時(shí)有發(fā)生,夜間因?yàn)橐曇暗脑?,使得撞車事故更為頻發(fā)。因此汽車迫切的需要一種能夠?qū)崟r(shí)測(cè)距,并且能夠給駕駛員提供警示的器件,汽車防撞報(bào)警器的研究有著很重要的現(xiàn)實(shí)意義和應(yīng)用價(jià)值。如何利用現(xiàn)代高科技,開(kāi)發(fā)出一種可用于汽車上的防撞報(bào)警器,具有很重要的現(xiàn)實(shí)意義。這種報(bào)警系統(tǒng)應(yīng)該能夠?qū)崟r(shí)的測(cè)量車輛之間的距離,并且將所測(cè)得的數(shù)據(jù)顯示在表盤(pán)上,以便于駕駛員根據(jù)路況進(jìn)行判斷。而且一旦車輛之間的距離超過(guò)了警戒距離,報(bào)警器應(yīng)該立即采取警示措施,即采取蜂鳴器響,LED燈亮的形式對(duì)駕駛員發(fā)送警告敦促駕駛員立即采取應(yīng)變措施,能夠有效的解除駕駛員停車和起動(dòng)車輛時(shí)

31、前后左右探視所引起的困擾,并幫助駕駛員克服視野不足以及操縱困難的矛盾,大大的提高了行車出行安全性。該系統(tǒng)的硬件部分主要有單片機(jī)模塊,超聲波測(cè)距模塊,1602顯示模塊和報(bào)警模塊。軟件部分利用C語(yǔ)言編程,嚴(yán)格定義了單片機(jī)和各部分電路的接口。并且將軟件分成幾個(gè)模塊編寫(xiě),極大的降低了難度和減少了時(shí)間。主要有超聲波發(fā)射程序,距離計(jì)算程序,1602顯示程序等,通過(guò)主程序來(lái)分別調(diào)用以完成測(cè)距和報(bào)警的目標(biāo)。通過(guò)對(duì)報(bào)警系統(tǒng)的研究設(shè)計(jì),進(jìn)一步熟悉單片機(jī)系統(tǒng)的原理和應(yīng)用,對(duì)C語(yǔ)言程序開(kāi)發(fā)流程有更透徹的理解,并且在將程序與報(bào)警器硬件結(jié)合起來(lái)的過(guò)程中,強(qiáng)化了動(dòng)手能力,強(qiáng)化了理論結(jié)合實(shí)際的能力,培養(yǎng)了獨(dú)立思考和獨(dú)立解決問(wèn)

32、題的能力。13.2.1 系統(tǒng)設(shè)計(jì)與分析 1. 超聲波的測(cè)距原理 超聲波是人耳聽(tīng)不到的一種聲波,是一種頻率高于20KHz的聲波。通常頻率高于20KHz的超聲波不僅波長(zhǎng)短、方向性好、能夠成射線定向傳播、縱向分辨率比較高、對(duì)色彩和光照度不敏感、對(duì)外界光線和電磁場(chǎng)不敏感,碰到界面就會(huì)有顯著反射,而且能在有灰塵、煙霧、有毒等各種環(huán)境中穩(wěn)定工作。它方向性好,穿透能力強(qiáng),易于獲得較集中的聲能在水中傳播距離遠(yuǎn),可用于測(cè)距,測(cè)速,清洗,焊接,碎石、殺菌消毒等。在醫(yī)學(xué)、軍事、工業(yè)、農(nóng)業(yè)上有很多的應(yīng)用。 因此在本設(shè)計(jì)中采用超聲波發(fā)射器來(lái)實(shí)現(xiàn)測(cè)距的功能,經(jīng)綜合比較,基于超聲波的汽車防撞報(bào)警系統(tǒng)的設(shè)計(jì)中,采用的是超聲波

33、頻率為40KHz的超聲波傳感器。 2. 超聲波發(fā)射器及其原理 超聲波發(fā)射器一般可以分為兩大類:一 類是用電氣方式產(chǎn)生超聲波,一類是用機(jī)械方式產(chǎn)生超聲波。電氣方式包括壓電型、磁致伸縮型和電動(dòng)型等;機(jī)械方式有加爾統(tǒng)笛、液哨和氣流旋笛等。它們所產(chǎn)生的超聲波的頻率、功率和聲波特性各不相同,因而用途也各不相同。超聲波傳感器是利用超聲波的特性研制出的傳感器,它必須能夠發(fā)射超聲波和接收超聲波。具備這種功能的裝置就是超聲波傳感器,習(xí)慣上稱為超聲波換能器,或者超聲探頭。超聲波傳感器主要制造材料有壓電晶體及鎳鐵鋁合金兩類。這這類傳感器適用于測(cè)距、遙控、防盜等用途。超聲波應(yīng)用有三種基本類型,透射型-用于遙控器,防盜

34、報(bào)警器、自動(dòng)門、接近開(kāi)關(guān)等;分離式反射型-用于測(cè)距、液位或料位;反射型-用于材料探傷、測(cè)厚等。這里主要應(yīng)用了超聲波的測(cè)距功能,通過(guò)超聲波來(lái)計(jì)算障礙物與小車之間的距離。 目前較為常用的是壓電式超聲波發(fā)生器。 壓電式超聲波發(fā)生器實(shí)際上是利用壓電晶體的諧振來(lái)工作的。超聲波發(fā)生器內(nèi)部結(jié)構(gòu)如下圖13-10所示,它有兩個(gè)壓電晶片和一個(gè)共振板。當(dāng)它的兩極外加脈沖信號(hào),其產(chǎn)生的頻率等于壓電晶片的固有振蕩頻率時(shí),壓電晶片將會(huì)發(fā)生共振,并帶動(dòng)共振板振動(dòng),便產(chǎn)生超聲波。反之,如果兩電極間未外加電壓,當(dāng)共振板接收到超聲波 時(shí),將壓迫壓電晶片作振動(dòng),將機(jī)械能轉(zhuǎn)換為電信號(hào),這時(shí)它就成為超聲波接收器了。超聲波實(shí)物正面圖以及

35、發(fā)射器原理圖如圖13-10所示。圖13-10 超聲波實(shí)物正面圖以及發(fā)射器原理圖3. 聲波測(cè)距算法設(shè)計(jì) 聲波測(cè)距算法原理如圖13-11所示。圖13-11 聲波測(cè)距算法原理 通過(guò)超聲波發(fā)射裝置發(fā)出超聲波,根據(jù)接收器接到超聲波時(shí)的時(shí)間差就可以知道距離了。超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開(kāi)始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物就立即返回來(lái),超聲波接收器收到反射波就立即停止計(jì)時(shí)。(超聲波在空氣中的傳播速度為340m/s,根據(jù)計(jì)時(shí)器記錄的時(shí)間t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物的距離(s),即:s=340t/2)在實(shí)際使用中,超聲波的聲速會(huì)受到溫度的影響,因此常常需要使用溫度補(bǔ)償模塊,通過(guò)

36、溫度傳感器測(cè)得外界的溫度,再根據(jù)溫度求得對(duì)應(yīng)的聲速值。在實(shí)際的運(yùn)算中,要采用溫度補(bǔ)償后的溫度值。 但是,在對(duì)測(cè)量精度要求不高的情況下,溫度補(bǔ)償模塊可以忽略,聲速確定后,只要測(cè)得超聲波往返的時(shí)間,可以根據(jù)公式計(jì)算出距離,這就是超聲波測(cè)距的原理。超聲波測(cè)距原理圖如圖13-12所示。 圖13-12 超聲波測(cè)距原理圖4. 模塊設(shè)計(jì)與原理系統(tǒng)設(shè)計(jì)原理框圖如圖13-13所示。圖13-13 系統(tǒng)設(shè)計(jì)原理框圖 全部模塊都由STC89C52單片機(jī)控制整合,單片機(jī)在此處相當(dāng)于一個(gè)微型計(jì)算機(jī)的功能,通過(guò)輸入和輸出的端口與傳感器和顯示器等外部端口交換信息,從而控制內(nèi)部的操作能夠按照流程實(shí)現(xiàn)功能。 在C語(yǔ)言軟件設(shè)計(jì)上,

37、首先啟動(dòng)超聲波發(fā)生模塊,定義超聲波發(fā)生接口為TX,然后驅(qū)動(dòng)器推動(dòng)探頭產(chǎn)生超聲波。發(fā)射的超聲波在空氣中傳播,當(dāng)遇到障礙物的時(shí)候發(fā)生反射回來(lái),被超聲波的接受探頭所感知,在C語(yǔ)言設(shè)計(jì)程序中用RX表示超聲波接收端。當(dāng)接受到超聲波反射信號(hào)時(shí)候,RX=1,此時(shí)定時(shí)器中斷,根據(jù)時(shí)間計(jì)算公式求出時(shí)間,再根據(jù)距離計(jì)算模塊算出距離大小。當(dāng)障礙物的距離沒(méi)有超出測(cè)量范圍時(shí),所測(cè)數(shù)據(jù)可以通過(guò)經(jīng)C語(yǔ)言顯示程序控制顯示在LCD屏幕上,并通過(guò)判定程序程序(用if、else來(lái)實(shí)現(xiàn))決定是否LED亮,蜂鳴器響,從而成功的實(shí)現(xiàn)防撞報(bào)警的功能。由系統(tǒng)軟件控制把距離數(shù)據(jù)送到顯示器進(jìn)行顯示。測(cè)試系統(tǒng)功能流程如下三個(gè)步驟:1) 當(dāng)距離在一

38、個(gè)可測(cè)距離4cm到50cm時(shí),LCD1602顯示距離,顯示橙色燈。如圖13-14所示。圖13-14 可測(cè)距離4cm到50cm 2)我們模擬若距離小于預(yù)先設(shè)置的4cm時(shí),進(jìn)行聲光報(bào)警。如圖13-15所示。 圖13-15 距離小于預(yù)先設(shè)置的4cm 3)當(dāng)距離大于50cm時(shí),LCD顯示Satay,并且閃綠燈。如圖13-16所示。 圖13-16 距離大于50cm5. 超聲波發(fā)射部分的設(shè)計(jì) 本系統(tǒng)主要由單片機(jī)系統(tǒng)及顯示電路、超聲波發(fā)射電路和超聲波檢測(cè)接收電路三部分組成。采用STC89C52來(lái)實(shí)現(xiàn)對(duì)CX20106A紅外接收芯片的控制,單片機(jī)通過(guò)P2.3.引腳經(jīng)反相器來(lái)控制超聲波的發(fā)送。 測(cè)距系統(tǒng)中的超聲波

39、傳感器采用的是陶瓷傳感器,它的工作電壓是40kHz的脈沖信號(hào)。超聲波發(fā)射器包括超聲波反射電路與超聲波發(fā)射控制電路兩個(gè)部分,超聲波探頭的型號(hào)為CSB40T。超聲波接收端口設(shè)置為P2.4,當(dāng)接收到超聲波返回信號(hào)時(shí),RX置1從而中斷計(jì)數(shù)器。 通過(guò)輸出引腳輸入到驅(qū)動(dòng)器,經(jīng)過(guò)驅(qū)動(dòng)器驅(qū)動(dòng)探頭后可以產(chǎn)生超聲波,這種方法方便快捷能夠極大的節(jié)省時(shí)間。輸出端采用兩個(gè)反向器并聯(lián),用以提高驅(qū)動(dòng)能力。上拉電阻 R10、R20一方面可以提高反向器74LS04輸出高電平的驅(qū)動(dòng)能力,另一方面可以增加超聲波換能器的阻尼效果,縮短其自由振蕩的時(shí)間。 6. 超聲波接收電路的設(shè)計(jì) 超聲波接收器的設(shè)計(jì),大致分為三個(gè)部分,分別是超聲波接

40、受探頭、信號(hào)放大電路和波形變換電路三個(gè)部分,按照測(cè)距的原理,單片機(jī)需要的只是第一個(gè)回波的時(shí)刻,接收電路的設(shè)計(jì)可以采用通用電路才實(shí)現(xiàn)。因?yàn)槌暡K電路設(shè)計(jì)的成熟,超聲波的接收電路可以采用現(xiàn)成的電路模塊來(lái)節(jié)約時(shí)間和提高效率。目前較為通用的是采用CX20106A的集成電路,集成電路可以有效的節(jié)省空間,并且實(shí)踐證明這種集成電路是目前較為成熟和可靠地設(shè)計(jì)。13.2.2 系統(tǒng)硬件的設(shè)計(jì) 系統(tǒng)的硬件部分的設(shè)計(jì)主要包括單片機(jī)系統(tǒng),以及1602液晶顯示器分和超聲波接收器、超聲波發(fā)射器三個(gè)部分組成。單片機(jī)采用STC89C52系列。采用12MHZ高精度的晶振,從而獲得精確的時(shí)鐘頻率,有效的減少測(cè)量誤差。C語(yǔ)言程序

41、控制啟動(dòng)模塊,產(chǎn)生超聲波,由P2.3端口輸出,超聲波接收電路的輸入返回信號(hào)對(duì)外中斷進(jìn)行控制。P2.4端口用來(lái)接收超聲波,P0端口用來(lái)向LCM傳輸數(shù)據(jù),可以用C語(yǔ)言定義為 LCD_Data,P3.0和P1口分別連接蜂鳴器和LCD報(bào)警電路。顯示電路采用較為簡(jiǎn)便的1602液晶顯示器,1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個(gè)字符。1062的RS、RW、E口分別與單片機(jī)的P2.5、P2.6、P2.7連接。系統(tǒng)電路圖如圖13-17所示。圖13-17 系統(tǒng)電路圖1. 單片機(jī)選擇與說(shuō)明 單片機(jī)種類很多,本系統(tǒng)采用的是STC89C52單片,及其相同系列的芯片皆可。根據(jù)本系統(tǒng)需要實(shí)現(xiàn)的功能,按

42、照節(jié)約成本和節(jié)約開(kāi)發(fā)時(shí)間的原則,選擇功耗低、性能高的STC89C52單片機(jī)。 2. 各模塊電路的設(shè)計(jì) 該系統(tǒng)的硬件部分由STC89C52單片機(jī)主控,包含USB電源模塊,復(fù)位電路模塊,LCD顯示電路模塊,聲光報(bào)警模塊。單片機(jī)采用STC89C52或其兼容系列,采用12MHz高精度的晶振,以獲得較穩(wěn)定的時(shí)鐘頻率,減小測(cè)量誤差。單片機(jī)使用P2.3端口輸出超聲波,使用P2.4接收超聲波,系統(tǒng)由USB提供全部電源,再由晶振發(fā)出信號(hào)整個(gè)系統(tǒng)開(kāi)始工作,此時(shí)單片機(jī)由程序控制對(duì)超聲波發(fā)射器發(fā)出信號(hào),然后由超聲波接收器接收到的信號(hào)傳入單片機(jī)進(jìn)行處理。USB電源供電電路如圖13-18所示。圖13-18 USB電源供電

43、電路此電源模塊為整個(gè)系統(tǒng)提供一個(gè)比較穩(wěn)定的供電來(lái)源,是系統(tǒng)能夠順利的運(yùn)行實(shí)現(xiàn)其功能,此USB提供的是510%的直流電源。圖13-19 蜂鳴器報(bào)警電路蜂鳴器報(bào)警電路圖如圖13-19所示。 LCD顯示電路圖如圖13-20所示。 圖13-20 LCD顯示電路 圖13-20采用的是1602LCD顯示器,此顯示模塊比LED顯示模塊更加豐富,顯示內(nèi)容更加完善,使顯示的數(shù)據(jù)讓人一目了然,增加倒車防撞系統(tǒng)的直觀的數(shù)據(jù)顯示效果。所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個(gè)字符。 超聲波測(cè)距報(bào)警器仿真電路圖如圖13-21所示。圖13-21 超聲波測(cè)距報(bào)警器仿真電路 本章介紹了STC89C52單

44、片機(jī)系列的引腳和其對(duì)應(yīng)的功能,并且給出了單片機(jī)的接口和各部分的電路連接情況。在C語(yǔ)言程序中,可以通過(guò)#define來(lái)定義單片機(jī)與各個(gè)模塊的接口。超聲波測(cè)距模塊選擇了超聲波傳感器作為測(cè)距的工具,并且給出了各部分的電路連接圖,使得每部分的結(jié)構(gòu)與功能一目了然。從而奠定了倒車防撞系統(tǒng)的硬件基礎(chǔ),下一章將詳細(xì)的介紹單片機(jī)的C語(yǔ)言源程序設(shè)計(jì)。13.2.3 系統(tǒng)軟件部分的設(shè)計(jì) 1. 軟件部分設(shè)計(jì)分析 在汽車倒車防撞系統(tǒng)的設(shè)計(jì)中,我采用了C語(yǔ)言來(lái)進(jìn)行編程。首先利用C語(yǔ)言的宏定義#define語(yǔ)句來(lái)定義各個(gè)管腳的連接,將每個(gè)管腳表示成為便于理解的字符,在程序中可以直接對(duì)字符進(jìn)行賦值,以實(shí)現(xiàn)對(duì)單片機(jī)輸出端口的控制

45、。 根據(jù)各個(gè)部分功能的不同,可以將整個(gè)過(guò)程劃分為若干個(gè)模塊。每個(gè)模塊都是實(shí)現(xiàn)一定功能并且相互獨(dú)立的程序段,這種方法叫做模塊程序設(shè)計(jì)法,利用模塊的辦法設(shè)計(jì)倒車報(bào)警系統(tǒng),能夠簡(jiǎn)化開(kāi)發(fā)流程,并且使邏輯過(guò)程更加一目了然。對(duì)于特定的模塊,可以直接將已經(jīng)發(fā)展的很完善的模塊程序加以使用,不用再對(duì)于各個(gè)部分重新設(shè)計(jì)。例如對(duì)超聲波發(fā)射啟動(dòng)模塊的設(shè)計(jì),對(duì)LCM讀寫(xiě)數(shù)據(jù)和指令控制的模塊設(shè)計(jì)等等。 超聲波測(cè)距報(bào)警器的C語(yǔ)言程序主要有以下幾個(gè)部分(模塊)組成,第一個(gè)部分是主程序部分,即是通過(guò)C語(yǔ)言的主函數(shù)來(lái)實(shí)現(xiàn),主程序部分統(tǒng)領(lǐng)各個(gè)部分的分工與合作,調(diào)用各個(gè)模塊以實(shí)現(xiàn)測(cè)距和報(bào)警的功能;第二個(gè)部分是超聲波發(fā)生程序,第三個(gè)部

46、分是超聲波接收程序,第四個(gè)部分是距離計(jì)算子程序。 2. 主程序設(shè)計(jì) 圖13-22 主程序 設(shè)計(jì)流程圖 主程序的實(shí)現(xiàn)步驟如下: 1) 主程序首先對(duì)系統(tǒng)環(huán)境進(jìn)行初始化,設(shè)置定時(shí)器T0的工作模式, 2) 調(diào)用超聲波發(fā)送子程序發(fā)出超聲波脈沖,同時(shí)計(jì)數(shù)器開(kāi)始計(jì)時(shí)。 3) 當(dāng)接受到返回超聲波信號(hào)時(shí),將計(jì)數(shù)器T0中斷,讀取計(jì)數(shù)時(shí)間。 4) 根據(jù)讀取時(shí)間和Count計(jì)算距離子程序來(lái)計(jì)算障礙物距離并顯示。 5) 根據(jù)障礙物距離判斷是否報(bào)警,利用if、else語(yǔ)句實(shí)現(xiàn)。主程序清單如下:/*/void main(void) speak=0; P1=0 xff; Delay400Ms(); /啟動(dòng)等待,等LCD進(jìn)入工

47、作狀態(tài) LCDInit(); /LCD初始化 Delay400Ms(); DisplayListChar(0, 0, uctech);/顯示第0行 DisplayListChar(0, 1, net); /顯示第1行 ReadDataLCD(); /測(cè)試用句無(wú)意義 Delay400Ms(); DisplayListChar(0, 1, Cls); while(1) key1(); key2(); key3(); xianshi(); 3. 超聲波發(fā)射子程序 P1.3與超聲波的發(fā)射端連接,通過(guò)單片機(jī)產(chǎn)生脈沖信號(hào)經(jīng)過(guò)發(fā)射端驅(qū)動(dòng)電路,使超聲波探頭產(chǎn)生超聲波。在C語(yǔ)言中可以將超聲波發(fā)射定義為Start

48、Module的函數(shù),設(shè)定TX=1,即將1值賦給TX端口時(shí),模塊啟動(dòng)一次,隨后利用延時(shí)函數(shù)nop構(gòu)成完整的啟動(dòng)模塊子程序。超聲波發(fā)射程序程序清單如下:/*/void StartModule() /啟動(dòng)模塊 TX=1; /啟動(dòng)一次模塊大約10us的方波 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop

49、_(); _nop_(); TX=0; 4. 超聲波接收子程序P1.4端口與超聲波接收端相連,用#define定義為RX,在軟件程序的設(shè)計(jì)中,需要利用P1.4作為接收端來(lái)控制定時(shí)器的開(kāi)啟與關(guān)斷,從而能夠得出超聲波在空氣中傳播的時(shí)間。對(duì)于定時(shí)器的開(kāi)啟與關(guān)斷,可以通過(guò)while語(yǔ)句來(lái)實(shí)現(xiàn),通過(guò)while語(yǔ)句能夠很好的將RX的狀態(tài)與定時(shí)器的狀態(tài)聯(lián)系起來(lái),用while語(yǔ)句表示,當(dāng)RX的值為0時(shí),TR0=1,即是開(kāi)啟計(jì)時(shí)器計(jì)數(shù)。當(dāng)超聲波返回被接收模塊所接收的時(shí)候,TR1=0,此時(shí)計(jì)數(shù)器關(guān)斷,則可以根據(jù)計(jì)數(shù)器的時(shí)間差來(lái)求得超聲波在空氣中傳播的時(shí)間。超聲波接收端RX用來(lái)啟動(dòng)和關(guān)斷定時(shí)器,部分程序如下: wh

50、ile(!RX); /當(dāng)RX為零時(shí)等待 TR0=1; /開(kāi)啟計(jì)數(shù) while(RX);/當(dāng)RX為1計(jì)數(shù)并等待 TR0=0;/關(guān)閉計(jì)數(shù) Conut();/計(jì)算 delayms(20);/80MS 5. 距離計(jì)算子程序 啟動(dòng)發(fā)射電路的時(shí)候同時(shí)啟動(dòng)單片機(jī)內(nèi)部定時(shí)器T0,利用定時(shí)器的計(jì)數(shù)功能記錄超聲波的發(fā)射時(shí)間和反射波的接收時(shí)間。當(dāng)收到超聲波反射時(shí),利用while語(yǔ)句中斷計(jì)時(shí)器計(jì)數(shù),時(shí)間根據(jù)T0計(jì)時(shí)器的高位TH0和低位TL0的讀數(shù)來(lái)計(jì)算,time=TH0*256+TL0;求出時(shí)間之后,再根據(jù)時(shí)間計(jì)算障礙物的距離,S=(time*1.7)/100; 因?yàn)榉帜甘?00,所以求出來(lái)的結(jié)果單位是厘米。/*/v

51、oid Conut(void)/計(jì)算距離 time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.72)/100; 6. 報(bào)警判斷子程序若距離在一個(gè)可測(cè)距離4cm到50cm時(shí),LCD1602顯示距離,顯示橙色燈。若距離小于預(yù)先設(shè)置的4cm時(shí),LCD顯示Danger,進(jìn)行聲光報(bào)警。當(dāng)距離大于50cm時(shí),LCD顯示Satety,并且閃綠燈。 部分源程序如下: if(SLarge) /超出測(cè)量范圍顯示Satety flag=0; speak=1; P1=0 xf3; delayms(10); speak=0; P1=0 xff; DisplayOneChar(10, 1,

52、 S); DisplayOneChar(11, 1,a); DisplayOneChar(12, 1, t); DisplayOneChar(13, 1, e); DisplayOneChar(14, 1, t); DisplayOneChar(15, 1, y); if(S=Small&S=Large)/檢測(cè)距離 speak=0; P1=0 x3f; disbuff0=(long)S%1000/100; disbuff1=(long)S%1000%100/10; disbuff2=(long)S%1000%100%10; disbuff3= (long)(S-(long)S)*10)%10;

53、 DisplayOneChar(9, 1, ASCIIdisbuff0); DisplayOneChar(10, 1, ASCIIdisbuff1); DisplayOneChar(11, 1,ASCIIdisbuff2 ); DisplayOneChar(12, 1,ASCII10 ); DisplayOneChar(13, 1,ASCIIdisbuff3 ); DisplayOneChar(14, 1, ASCII13); DisplayOneChar(15, 1, ASCII12); 7. LCM的部分程序 在汽車防撞報(bào)警器的設(shè)計(jì)中,采用P0端口與LCD數(shù)據(jù)輸入相連,并且并聯(lián)一個(gè)排阻,以

54、提高電路的安全性和可靠性。在軟件設(shè)計(jì)中,首先利用#define宏定義將P0端口定義為 LCM_Data,即使LCD模塊數(shù)據(jù)輸入端口的意思。然后再通過(guò)賦值給 LCM_Data以達(dá)到對(duì)P0端口的控制。在P2端口的電路連接中,P2.5連接LCD的信號(hào)控制線RS,P2.6連接信號(hào)的控制線RW,P2.7與信號(hào)控制線E口相連。在軟件設(shè)計(jì)中,首先利用#define語(yǔ)句定義好接口,將P2.5定義為RS,P2.6定義為RW,將P2.7定義為E,便于直接在C程序中直接操作RS/RW/E接口,以分別實(shí)現(xiàn)對(duì)LCD信號(hào)控制線的控制。要實(shí)現(xiàn)讀/寫(xiě)數(shù)據(jù),讀/寫(xiě)指令,可以根據(jù)對(duì)RS/RW/E的賦值來(lái)實(shí)現(xiàn)對(duì)LCD寄存器的選擇。

55、例如寫(xiě)數(shù)據(jù)的子函數(shù)程序如下:/寫(xiě)數(shù)據(jù)void WriteDataLCD(unsigned char WDLCD) ReadStatusLCD(); /檢測(cè)忙 LCD_Data = WDLCD; LCD_RS = 1; LCD_RW = 0; LCD_E = 0; /若晶振速度太高可以在這后加小的延時(shí) LCD_E = 0; /延時(shí) Delay5Ms(); /不加延時(shí)通不過(guò)PROTEUS仿真 LCD_E = 1; 8. 實(shí)物的測(cè)試 經(jīng)過(guò)Keil軟件對(duì)程序進(jìn)行編譯和連接之后,生成拓展名為.HEX的文件,將STC89C52單片機(jī)插入編程器插座內(nèi),通過(guò)編程器將程序燒寫(xiě)到單片機(jī)內(nèi)。然后接通USB電源,打開(kāi)

56、開(kāi)關(guān)按鈕,LCD屏幕上顯示的是我和合作人的名字簡(jiǎn)寫(xiě),下面一行顯示的是“Supersonic”。 在進(jìn)行測(cè)試的過(guò)程中,當(dāng)障礙物接近4厘米以內(nèi)的時(shí)候,系統(tǒng)的蜂鳴器開(kāi)始響,LED燈也同時(shí)亮。說(shuō)明能夠正常運(yùn)行和實(shí)現(xiàn)功能,在一定程度上起到了防撞報(bào)警的作用。反復(fù)進(jìn)行測(cè)試實(shí)驗(yàn),發(fā)現(xiàn)了該報(bào)警器仍然存在一些問(wèn)題,所測(cè)距離并不十分精確。分析其原因應(yīng)該是:第一,該報(bào)警器沒(méi)有溫度補(bǔ)償模塊,直接采用常溫下的聲速作為運(yùn)算數(shù)據(jù),忽略了溫度對(duì)超聲波傳播速度的影響。第二,該報(bào)警器的超聲波測(cè)距模塊只有一個(gè)超聲波發(fā)射探頭,超聲波的反射很容易受到物體的形狀和位置的干擾。第三,單片機(jī)的傳輸過(guò)程和計(jì)算過(guò)程也會(huì)占用一定的時(shí)間,并且產(chǎn)生一定

57、的誤差,導(dǎo)致接收時(shí)間不夠精準(zhǔn),運(yùn)算結(jié)果也不夠精確。測(cè)量實(shí)際效果圖如圖13-23所示。 圖13-23 測(cè)量實(shí)際效果圖13.2.4 制作總結(jié) 我剛選這個(gè)課程設(shè)計(jì)的時(shí)候,心里對(duì)超聲波測(cè)距充滿著好奇,之前也看 過(guò)有其他人做過(guò)這些模塊,但我自己并沒(méi)有真正地去做過(guò)成品,帶著好奇的心里我選擇了超聲波測(cè)距儀這個(gè)課程設(shè)計(jì),也開(kāi)始了我的兩周的課程設(shè)計(jì)生活。 剛開(kāi)始的時(shí)候我想了許多的方案,也查找了許多資料。進(jìn)過(guò)一系列的談?wù)摵屠蠋煹闹笇?dǎo)下,最終確立了方案。方案出來(lái)我,我就著手準(zhǔn)備元件的選擇和購(gòu)買,超聲波模塊是一個(gè)很重要的元件,我查詢了許多型號(hào),發(fā)現(xiàn)HC-SR04這個(gè)型號(hào)的模塊相對(duì)其他的有一定的優(yōu)勢(shì),結(jié)合以前我自己做過(guò)

58、的模塊我就首先做了一些仿真,并且最終把實(shí)物做了出來(lái),實(shí)現(xiàn)了初步的功能,但并不完善。 在調(diào)試過(guò)程中,我發(fā)現(xiàn)顯示有一定的誤差,分析可能是精度取值不夠精確,經(jīng)過(guò)一系列的分析后,我設(shè)定了一個(gè)取精度程序,是算法更加完善。 13.2.5 元件表13.2.6 C語(yǔ)言源程序#include #include #includesbit LCD_RS=P25; /RS寄存器選擇;高電平選數(shù)據(jù);低電平選指令;sbit LCD_RW=P26; /讀寫(xiě)信號(hào)線;高電平讀操作;低電平寫(xiě)操作;sbit LCD_E=P27; /E使能端sbit RX=P24;sbit TX=P23;sbit speak=P30;sbit KE

59、Y1=P20;sbit KEY2=P21;sbit quding=P22;#define LCD_Data P0 /液晶數(shù)據(jù)D7-D0#define Busy 0 x80 /用于檢測(cè)LCD狀態(tài)字中的Busy標(biāo)識(shí) unsigned int time=0,c=0,n;float Small=4.0,Large=50.0;/設(shè)定最小距離和最大距離double S=0;bit flag =0;unsigned long disbuff4;void WriteDataLCD(unsigned char WDLCD);/寫(xiě)數(shù)據(jù)void WriteCommandLCD(unsigned char WCLCD

60、,BuysC);/寫(xiě)指令unsigned char ReadDataLCD(void);/讀數(shù)據(jù)unsigned char ReadStatusLCD(void);/讀狀態(tài)void LCDInit(void);/LCD初始化void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);/顯示一個(gè)字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);/顯示一串字符void Conut(void);

溫馨提示

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

評(píng)論

0/150

提交評(píng)論