版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第13章 單片機的課程設(shè)計(綜合應(yīng)用實例) 13.1 紅外接收器件TL1838 近年來隨著計算機在社會各領(lǐng)域的滲透,單片機的應(yīng)用正在不斷地走向深入,同時也帶動傳統(tǒng)的控制、檢測等工作日益更新。傳統(tǒng)的遙控器大多采用無線電遙控技術(shù),隨著科技的進步,紅外線遙控技術(shù)的進一步成熟,紅外遙控也逐步成為了一種被廣泛應(yīng)故不同房間的家用電器可使用通用的遙控器而不會產(chǎn)生相互干擾;電用的通信和遙控手段。為了方便實用,傳統(tǒng)的家庭電器逐漸采用紅外線
2、遙控。工業(yè)設(shè)備中,在高壓、輻射、有毒氣體、粉塵等有害環(huán)境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。 紅外遙控的特點是不影響周邊環(huán)境、不干擾其它電器設(shè)備。由于其無法穿透墻壁,路調(diào)試簡單,只要按給定電路連接無誤,一般不需任何調(diào)試即可投入工作;編解碼容易,可進行多路遙控。紅外遙控雖然被廣泛應(yīng)用,但各產(chǎn)商的遙控器不能相互兼容。當(dāng)今市場上的紅外線遙控裝置一般采用專用的遙控編碼及解碼集成電路,但編程靈活性較低,且產(chǎn)品多相互綁定,不
3、能復(fù)用,故應(yīng)用范圍有限。而本文采用單片機進行遙控系統(tǒng)的應(yīng)用設(shè)計,遙控裝置將同時具有編程靈活、控制范圍廣、體積小、功耗低、功能強、成本低、可靠性高等特點,因此采用單片機的紅外遙控技術(shù)具有廣闊的發(fā)展前景。,13.1.1 概述 1. 基于單片機的紅外遙控系統(tǒng)概述 當(dāng)今社會科學(xué)技術(shù)的發(fā)展與日俱增,人們生活水平也是日益提高,為了減少人們的工作量,所以對各種家用電器、電子器件的非人工控制的要求越來越高,針對這種情況,設(shè)計出一種集成度
4、比較高的控制體系是必然的?,F(xiàn)代科技的飛速發(fā)展在許多危險、不可近場合也對遠程控制提出了越來越高的要求。單片機是指一個集成在一塊芯片上的完整計算機系統(tǒng)。盡管他的大部分功能集成在一塊小芯片上,但是它具有一個完整計算機所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分還會具有外存。同時集成諸如通訊接口、定時器,實時時鐘等外圍設(shè)備。而現(xiàn)在最強大的單片機系統(tǒng)甚至可以將聲音、圖像、網(wǎng)絡(luò)、復(fù)雜的輸入輸出系統(tǒng)集成在一塊芯片上。單片機的集成度
5、很高,它體積小、功耗低、控制功能強、擴展靈活、微型化、使用方便等突出特點,尤其耗電少,又可使供電電源體積小、質(zhì)量輕。所以特別適用于“電腦型產(chǎn)品”,它的應(yīng)用已深入到工業(yè)、農(nóng)業(yè)、國防、科研、教育以及日常生活用品(家電、玩具)等各種領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡。單片機特別適合把它做到產(chǎn)品的內(nèi)部,取代部分老式機械、電子零件或元器件??墒巩a(chǎn)品縮小體積,增強功能,實現(xiàn)不同程度的智能化。,紅外線是一種光線,具有普通光的性質(zhì),可以以光速直
6、線傳播,強度可調(diào),可以通過光學(xué)透鏡聚焦,可以被不透明物體遮擋等等。特別制造的半導(dǎo)體發(fā)光二極管,可以發(fā)出特定波長(通常是近紅外)的紅外線,通過控制二極管的電流可以很方便的改變紅外線的強度,以達到調(diào)制的目的,因此,在現(xiàn)代電子工程應(yīng)用中,紅外線常常被用做近距離視線范圍內(nèi)的通訊載波。使用紅外線做信號載波的優(yōu)點很多:成本低、傳播范圍和方向可以控制、不產(chǎn)生電磁輻射干擾,也不受干擾等等。因此被廣泛地應(yīng)用在各種技術(shù)領(lǐng)域中。由于紅外線為不可見光,因此對環(huán)
7、境影響很小,再由紅外光波長遠小于無線電波的波長,所以紅外線遙控不會影響其他家用電器,也不會影響臨近的無線電設(shè)備。最典型的應(yīng)用就是家電遙控器。紅外線遙控不具有像無線電遙控那樣穿過障礙物去控制被控對象的能力,所以,在設(shè)計家用電器的紅外線遙控器時,不必要像無線電遙控器那樣,每套(發(fā)射器和接收器)要有不同的遙控頻率或編碼(否則,就會隔墻控制或干擾鄰居的家用電器)。同類產(chǎn)品的紅外線遙控器,也可以有相同的遙控頻率或編碼,而不會出現(xiàn)遙控信號“串門”的
8、情況。這對于大批量生產(chǎn)以及在家用電器上普及紅外線遙控提供了極大的方面。,本設(shè)計主要研究并設(shè)計一個基于單片機的紅外發(fā)射及接收系統(tǒng),實現(xiàn)對溫度控制的隔離控制。控制系統(tǒng)主要是由 MCS-51 系列單片機、集成紅外發(fā)射遙控器、紅外接收電路、LCD 顯示電路,溫度控制電路等部分組成,發(fā)射遙控信號經(jīng)紅外接收處理傳送給單片機,單片機根據(jù)不同的信息碼控制溫度報警,并完成相應(yīng)的狀態(tài)指示(如圖13-1)。,圖13-1 紅外線遙控系統(tǒng)框圖,2. 本設(shè)計方案思
9、路 本設(shè)計主控芯片采用目前比較通用的MCS-51系列單片機。此類單片機的運算能力強,軟件編程靈活,自由度大,市場上比較多見,價格便宜且技術(shù)比較成熟容易實現(xiàn)?! 〖t外傳輸利用載波對信號進行調(diào)制從而減少信號傳輸過程中的光波干擾,提高數(shù)據(jù)傳輸效率。由遙控器將鍵盤信息及系統(tǒng)識別碼等數(shù)據(jù)調(diào)制在紅外載波上經(jīng)紅外發(fā)射頭發(fā)射出去。接收方由紅外一體化接收頭實現(xiàn)對接收信號的放大解調(diào)并還原為數(shù)據(jù)流,經(jīng)由單片機解碼后對相關(guān)IO口進行操作。
10、3. 研發(fā)方向和技術(shù)關(guān)鍵 1) 合理設(shè)計硬件電路,使各模塊功能協(xié)調(diào); 2) 紅外接收信號的脈沖波形; 3) 紅外接收信號的編解碼; 4) 單片機對IO口的操作; 4. 主要技術(shù)指標(biāo) 1) 遙控最遠距離8到10m 2) 工作頻率為 38KHz,即紅外發(fā)射和接收的載頻為 38KHz; 4) 接收端可顯示受控狀態(tài)以及輸入控制數(shù)據(jù)。,13.1.2 總體設(shè)計 紅外遙控系統(tǒng)是集
11、中集光、電于一體的系統(tǒng)。其工作原理是用戶按鍵信號經(jīng)單片機編碼處理后轉(zhuǎn)化為脈沖信號,經(jīng)由紅外發(fā)射頭發(fā)送出去;接收端由紅外一體化接收頭實現(xiàn)對接收信號的放大解調(diào)并還原為數(shù)據(jù)流,經(jīng)由單片機解碼后對相關(guān)IO口進行操作,從而完成整個遙控操作。整個系統(tǒng)主要是由51單片機基本電路、紅外接收電路、LCD 顯示電路,溫度控制電路等部分組成。系統(tǒng)硬件由以下幾部分組成:紅外數(shù)據(jù)發(fā)射遙控器。紅外數(shù)據(jù)接收則是采用 VS1838B 一體化紅外接收頭,內(nèi)部集成紅外接
12、收、數(shù)據(jù)采集、解碼的功能,只要在接收端 INT0 檢測頭信號低電平的到來,就可完成對整個串行的信號進行分析得出當(dāng)前控制指令的功能。然后根據(jù)所得的指令去操作相應(yīng)的用電器件工作,如圖13-2所示。,,圖13-2 系統(tǒng)總體結(jié)構(gòu)框圖,1. 紅外遙控發(fā)射部分 紅外遙控發(fā)射部分為常見的普通遙控器。 2. 紅外遙控接收部分 紅外遙控接收電路框圖見圖13-3。紅外接收端普遍采用價格便宜,性能可靠的一體化紅外接收頭(VS1838B ,
13、它接收紅外信號頻率為38KHz ,周期約26μs)。它能同時對信號進行放大、檢波、整形,得到TTL 電平的編碼信號。紅外接收頭收到信號后單片機立即產(chǎn)生中斷,開始接收紅外信號。接收到的信號經(jīng)單片機解碼得到用戶遙控信息并轉(zhuǎn)至IO口執(zhí)行,同時單片機還完成對處于工作狀態(tài)的設(shè)備進行計數(shù)并顯示。,3. 紅外編碼標(biāo)準(zhǔn) 通過拆解遙控器知道這個用的編碼芯片是PT2221 通過查詢得知是NEC編碼標(biāo)準(zhǔn): 此標(biāo)準(zhǔn)下的發(fā)射端所發(fā)射的一幀
14、碼含有一個引導(dǎo)碼、8位用戶碼、8位用戶反碼,8位鍵數(shù)據(jù)碼、8位鍵數(shù)據(jù)反碼。引導(dǎo)碼由一個9ms的高電平和4.5ms的低電平組成。當(dāng)按下持續(xù)時間超過108ms時,則發(fā)送簡碼(簡碼由9ms高電平和2.25ms的低電平組成)來告之接收端是某一個按鍵一直按著,象電視的音量和頻道切換鍵都有此功能,簡碼與簡碼之間相隔是108ms?!?”和“0”的區(qū)分采用脈沖位置調(diào)制方式(PPM)。 1) 二進制信號的調(diào)制 二進制信號的調(diào)制仍由發(fā)送單片機
15、來完成,A是二進制信號的編碼波形,B 是頻率為38KHz (周期為26μs)的連續(xù)脈沖,C是經(jīng)調(diào)制后的間斷脈沖串(相當(dāng)于C=A×B),用于紅外發(fā)射二極管發(fā)送的波形。,2) 二進制信號的解調(diào) 二進制信號的解調(diào)由一體化紅外接收頭VS1838B來完成,它把接收到的紅外信號(圖13-4 中波形D)經(jīng)內(nèi)部處理并解調(diào)復(fù)原,在輸出腳輸出圖13-4中波形E,VS1838B 的解調(diào)可理解為:在輸入有脈沖串時,輸出端輸出低電平,否則輸出高電
16、平??芍苯优c單片機串行輸入口及外中斷相聯(lián),以實現(xiàn)隨時接收遙控信號并產(chǎn)生中斷,然后由單片機對編碼還原。 3) 二進制信號的解碼 二進制信號的解碼由接收單片機來完成,它把紅外接收頭送來的二進制編碼波形通過解碼,還原出發(fā)送端發(fā)送的數(shù)據(jù)。如圖13-4,把波形E解碼還原成原始二進制數(shù)據(jù)信息101。,圖13-4 紅外接收頭接收及輸出波形,13.1.3 硬件設(shè)計 1. 主控芯片AT89C51
17、 AT89C51是美國ATMEL公司生產(chǎn)的低功耗,高性能CMOS8位單片機,片內(nèi)含4k bytes的可系統(tǒng)編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集Flash程序存儲器既可在線編程(ISP)也可用傳統(tǒng)方法進行編程。 2. 紅外發(fā)射紅外發(fā)送器大多是使用Ga、As等材料制成的紅外發(fā)射二極管,其能夠通過的LED電流越大,發(fā)射角度越小,產(chǎn)生的發(fā)射強度就
18、越大;發(fā)射強度越大,紅外傳輸距離就越遠,傳輸距離正比于發(fā)射強度的平方根。 通常,紅外遙控器將遙控信號(二進制脈沖碼)調(diào)制在40KHz(周期為26.3ms)的載波上,經(jīng)緩沖放大后送至紅外發(fā)光二極管,產(chǎn)生紅外信號發(fā)射出去。在紅外數(shù)據(jù)發(fā)射過程中,由于發(fā)送信號時的最大平均電流需幾十mA(對應(yīng)mW級發(fā)射功率),所以需要三極管放大后去驅(qū)動紅外光發(fā)射二極管(又稱電光二極管)。單片機通過軟件編程將調(diào)制好的脈沖信號從P3口第6腳(P3.5)
19、將數(shù)據(jù)輸出,3. 紅外遙控接收電路 本部分電路是該設(shè)計中硬件電路的重點部分,系統(tǒng)由紅外接收電路,單片機電路,設(shè)備驅(qū)動電路,狀態(tài)顯示電路組成。一體化紅外接收頭采用VS1838B,它負(fù)責(zé)對接收到的紅外遙控信號的解調(diào)。將調(diào)制在40kHz上的紅外脈沖信號解調(diào)后再輸入到AT89C51的INT0(P3.2)引腳,由單片機進行高電平與低電平寬度的測量。遙控信號的還原是通過P3.1輸入二進制脈沖碼的高電平與低電平及維持時間,當(dāng)接收頭接收信號時
20、,單片機產(chǎn)生中斷,并在P3.1口對信號電平進行識別,并還原為原發(fā)送數(shù)據(jù),這在后面的軟件設(shè)計中會具體介紹到。數(shù)據(jù)流通過單片機處理后送驅(qū)動控制部分。并通過數(shù)碼管顯示用電設(shè)備的個數(shù),1) 紅外信號接收電路VS1838B是用于紅外遙控接收的小型一體化接收頭,它的主要功能包括放大,選頻,解調(diào)幾大部分,要求輸入信號需是已經(jīng)被調(diào)制的信號。經(jīng)過它的接收放大和解調(diào)會在輸出端直接輸出原始信號的反相信號。其不需要任何外接元件,就能完成從紅外線接收到輸出與T
21、TL電平信號兼容的所有工作,而體積和普通的塑封三極管大小一樣,從而使電路達到最簡化!靈敏度和抗干擾性都非常好。它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸,中心頻率38.0kHz。接收器對外只有3個引腳,如圖13-5所示,從左至右依次為OUT、GND、VCC。紅外接收頭電路圖如圖13-6所示,OUT腳(1號腳)與單片機IO口直接相連。,圖13-5 VS1838B引腳,紅外接收頭內(nèi)部放大器的增益很大,很容易引起干擾,依次在接收頭的供電腳上必須加
22、上濾波電容。故紅外接收部分電路如圖13-6所示。,圖13-6 紅外接收頭電路,2) 控制部分電路 單片機收到紅外接收頭解調(diào)后的信號后,對其進行解碼,從中解出控制碼,此時系統(tǒng)將轉(zhuǎn)至對具體設(shè)備的控制工作。 溫度檢測部分采用DS18B20數(shù)字溫度傳感器,DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。主要根據(jù)應(yīng)用
23、場合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。 3) 顯示部分 紅外遙控系統(tǒng)接收到遙控碼并對相關(guān)設(shè)備操作后,單片機將對正在工作的設(shè)備進行計數(shù)并通過一個LCD12232顯示。,13.1.4 制作過程仿真調(diào)試電路如圖13-7所示。,
24、圖13-7 紅外仿真調(diào)試電路圖,實物制作樣品如圖13-8所示。,圖13-8 實物制作樣品圖,實物演示效果圖如圖13-9所示。,圖13-9 實物演示效果圖,溫度控制規(guī)則:當(dāng)前實際溫度大于設(shè)定最高溫度,LED燈發(fā)出警告。當(dāng)前實際溫度小于設(shè)定最少溫度,LED燈發(fā)出警告。由于目前的遙控裝置大多對某一設(shè)備進行單獨控制,而在本設(shè)計中的紅外遙控電路設(shè)計了多個控制按鍵,可以對不同的設(shè)備,也可以對同一設(shè)備的多個功能進行控制。系統(tǒng)可通過設(shè)定發(fā)射及接收
25、程序中的識別碼及識別反碼達到不同遙控器間相互區(qū)分,對識別碼、識別反碼、控制碼和控制碼反碼的判定一方面消除了非遙控信號的紅外干擾,另一方面降低了誤操作發(fā)生的幾率。經(jīng)過測試,設(shè)計結(jié)果完全達到課題任務(wù)要求。 但是本電路也有不完善的地方, 由于時間、水平和經(jīng)驗有限,在信號解碼、抗干擾及功耗控制等方面仍有不足之處,有改進的余地。例如設(shè)計中可通過增加紅外線發(fā)射功率進而增加遙控距離,改進信號編碼方式以提高數(shù)據(jù)的傳輸速度,使用小型單片機以降低功
26、耗等。另外在系統(tǒng)的調(diào)試方面,由于時間和設(shè)備的原因,只進行了短距離的調(diào)試,更多參數(shù)有待進一步的調(diào)試。在設(shè)計過程中,通過大量的查閱資料,認(rèn)真研究教材,對單片機有了更為深刻的理解,在編寫軟件時,須仔細的分析硬件電路及所要達到的功能,然后設(shè)計程序流程,編寫代碼。整個過程培養(yǎng)了我的耐性和刻苦鉆研的精神。,這次設(shè)計對于我們組來說,既是一次機遇,又是一次挑戰(zhàn)。通過這次的設(shè)計,我學(xué)到了很多東西。通過自己的實踐,增強了動手能力,掌握了系統(tǒng)的分析解決問題的
27、方法。通過實際工程設(shè)計也使我了解到書本知識和實際應(yīng)用的差別。在實際應(yīng)用中遇到很多的問題,這都需要我對問題進行具體的分析,并一步一步地去解決它。,13.1.5 源程序代碼#include#include#include "18b20.h"#define uchar unsigned char#define uint unsigned int uchar m,k1,k2; uchar c,c1
28、,c2,c3,t1,t2,t3,b;uint temp; uint temp_h=350,temp_l=250;void delay(uchar x); //x*0.14MSvoid display(uchar *tab1,uchar *tab2);void IR_IN();,/**************** IO口定義 ***************************/sbit IRIN = P3^2;
29、 //紅外接收器數(shù)據(jù)線sbit LCD_RS = P1^0; sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit led=P1^3;//1602數(shù)據(jù)口接P0uchar IRCOM[7];uchar cdis1[ ] = {"當(dāng)前溫度:--.-"};uchar cdis2[ ] = {"當(dāng)前編碼:--"};ucha
30、r cdis21[ ] = {"最高報警溫度"};uchar cdis22[ ] = {"35.0 新:--.-"};uchar cdis31[ ] = {"最低報警溫度"};uchar cdis32[ ] = {"25.0 新:--.-"};/***************************************************
31、****************/,/* *//*寫指令數(shù)據(jù)到LCD *//*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 *//*
32、 *//*******************************************************************/void lcd_wcmd(uchar cmd){ LCD_RS = 0; LCD_RW = 0;
33、 LCD_EN = 0; P0 = cmd; LCD_EN = 1; delay(50); LCD_EN = 0; delay(50); }/*******************************************************************/,/*
34、 *//*寫顯示數(shù)據(jù)到LCD *//*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 *//* *//***********
35、********************************************************/void lcd_wdat(uchar dat){ LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; LCD_EN = 1; delay(50); LCD_EN = 0;
36、 delay(50);}/*******************************************************************/,/* *//* LCD初始化設(shè)定 */
37、/* *//*******************************************************************/void lcd_init(){ lcd_wcmd(0x30); //16*2顯示,5*7點陣,8位數(shù)據(jù)
38、 lcd_wcmd(0x0c); //顯示開,關(guān)光標(biāo) lcd_wcmd(0x06); //移動光標(biāo) lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容}/*******************************************************************//*
39、 *//* 顯示函數(shù) *//* *//**************************************************************
40、*****/,void display(uchar *tab1,uchar *tab2){ lcd_wcmd(0x80); //設(shè)置顯示位置為第一行的第1個字符 m = 0; while(tab1[m] != '\0') { //顯示字符 lcd_wdat(tab1[m]);
41、m++; } lcd_wcmd(0x90); //設(shè)置顯示位置為第二行第1個字符 m = 0; while(tab2[m] != '\0') { lcd_wdat(tab2[m]); //顯示字符 m++; }},/********************延時函數(shù)*********************
42、*****************/void delay(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度,繼電器動作
43、,等到溫度降到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) {
44、EX0 =1; return; } //確認(rèn)IR信號出現(xiàn) while (!IRIN) //等IR變?yōu)楦唠娖?,跳過9ms的前導(dǎo)低電平 信號。 {delay(1);},for (j=0;j=30) { EX0=1; return;}
45、 //0.14ms計數(shù)過長自動離開。 } //高電平計數(shù)完畢,IRCOM[j]=IRCOM[j] >> 1; //數(shù)據(jù)最高位補“0” if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //數(shù)據(jù)最高位補“1” N=0; }//end for k }//end for j
46、 if (IRCOM[2]!=~IRCOM[3]) { EX0=1; return; } IRCOM[5]=IRCOM[2] & 0x0F; //取鍵碼的低四位 IRCOM[6]=IRCOM[2] >> 4; //右移4次,高四位變?yōu)榈退奈?if(IRCOM[5]>9) { IRCOM[5]=IRCOM[5]+0x37;} els
47、e IRCOM[5]=IRCOM[5]+0x30;,if(IRCOM[6]>9) { IRCOM[6]=IRCOM[6]+0x37;} else IRCOM[6]=IRCOM[6]+0x30;/**************** (顯示編碼之后,測試譯碼,將編碼轉(zhuǎn)變成功能鍵) ***************************/ if(IRCOM[5]=='C' &&
48、amp; IRCOM[6]=='0') //遙控器中的0按鍵的編碼是0x0C,當(dāng)接收的編碼是0x0c時顯示1 { c=1;b++;if(b==4)b=0; },if(IRCOM[6]=='5' && IRCOM[5]=='E') { c=3;b++;if(b==4)b=0; }
49、 if(IRCOM[6]=='0' && IRCOM[5]=='8') { c=4;b++;if(b==4)b=0; },if(IRCOM[6]=='1' && IRCOM[5]=='C') { c=5;b++;if(b==4)b=0; }
50、 if(IRCOM[6]=='5' && IRCOM[5]=='A') { c=6;b++;if(b==4)b=0; },if(IRCOM[6]=='4' && IRCOM[5]=='2') { c=7;b++;if(b==4)b=0; }
51、 if(IRCOM[6]=='5' && IRCOM[5]=='2') { c=8;b++;if(b==4)b=0; },if(IRCOM[6]=='4' && IRCOM[5]=='A') { c=9;b++;if(b==4)b=0; }
52、if(IRCOM[6]=='1' && IRCOM[5]=='6') { c=0;b++;if(b==4)b=0; }///////////////////////////////////////////////////////////////,if(IRCOM[6]=='0' && IRCOM[5]=='
53、;7') { k1++;k2=0; } if(IRCOM[6]=='1' && IRCOM[5]=='5') { k2++;k1=0; } if(IRCOM[6]=='0' && IRCOM[5]=='9') { k2=
54、0;k1=0; }///////////////////////////////////////////////////////////////,/**************** 測試譯碼end ***************************/ cdis2[10]=IRCOM[5]; cdis2[9]=IRCOM[6]; if(k1>0 && k2==0){
55、 if(b==1){t1=c;cdis22[9]=c+0x30;} if(b==2){t2=c;cdis22[10]=c+0x30;} if(b==3){t3=c;cdis22[12]=c+0x30;temp_h
56、=t3+t2*10+t1*100;b=0;} },if(k2>0 && k1==0){ if(b==1){t1=c;cdis32[9]=c+0x30;} if(b==2){t
57、2=c;cdis32[10]=c+0x30;} if(b==3){t3=c;cdis32[12]=c+0x30;temp_l=t3+t2*10+t1*100;b=0;} } EX0 = 1; },/************************************
58、*******************************/main(){ IRIN=1; //I/O口初始化 lcd_init(); //初始化LCD IE = 0x81; //允許總中斷中斷,使能 INT0 外部中斷TCON = 0x01; //觸發(fā)方式為
59、脈沖負(fù)邊沿觸發(fā) while(1) { ///////////////////////////////////////////////////////////////if(k1>0){b=0;lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容,cdis22[0]=temp_h/100+0x30; //顯示十位cdis22[1]=temp_h/10%1
60、0+0x30; //顯示個位cdis22[3]=temp_h%10+0x30; //顯示0.1cdis22[9]='-';cdis22[10]='-';cdis22[12]='-'; while(1) { display(cdis21,cdis22);if(k1==0)break;warr();
61、 }},if(k2>0){b=0;lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容cdis32[0]=temp_l/100+0x30; //顯示十位cdis32[1]=temp_l/10%10+0x30; //顯示個位cdis32[3]=temp_l%10+0x30; //顯示0.1cdis32[9]='-';cdis32
62、[10]='-';cdis32[12]='-'; while(1) { display(cdis31,cdis32);if(k2==0)break;warr(); }},if(k2==0 && k1==0){lcd_wcmd(0x01); //清除LCD的顯示
63、內(nèi)容while(1){temp=ReadTemperature(); //讀溫度cdis1[9]=temp%1000/100+0x30; //顯示十位cdis1[10]=temp%100/10+0x30; //顯示個位cdis1[12]=temp%10+0x30; //顯示0.1display(cdis1,cdis2);if(k2!=0 || k1!=0)break;war
64、r();} } }} //end main,#include "18b20.h"#define uchar unsigned char #define uint unsigned intsbit DATA = P1^4; //DS18B20接入口/*****************************延時子函數(shù)***************************
65、******/void Ddelay(uint num){while(num--) ;}/*****************************************************************************/,/***************************DS18b20設(shè)置********************************/Init_DS18B20()
66、 //傳感器初始化{ uchar x=0; DATA = 1; //DQ復(fù)位 Ddelay(10); //稍做延時 DATA = 0; //單片機將DQ拉低 Ddelay(80); //精確延時 大于 480us //450 DATA = 1; //拉高總線 Ddelay(20); x=DATA; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 Dde
67、lay(30);},//讀一個字節(jié)ReadOneChar(){uchar i=0;uchar dat = 0;for (i=8;i>0;i--) { DATA = 0; // 給脈沖信號 dat>>=1; DATA = 1; // 給脈沖信號 if(DATA) dat|=0x80; Ddelay(8); } return(dat);},/
68、/寫一個字節(jié)WriteOneChar(unsigned char dat){ uchar i=0; for (i=8; i>0; i--) { DATA = 0; DATA = dat&0x01; Ddelay(10); DATA = 1; dat>>=1; }Ddelay(8);},//讀取溫度int ReadTemperature(){uc
69、har a=0;uchar b=0;int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳過讀序號列號的操作WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xCC); //跳過讀序號列號的操作WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前
70、兩個就是溫度a=ReadOneChar();//低位b=ReadOneChar();//高位t=b;t<<=8;t=t|a;t=t*0.625; return(t);}/************************************************************/,13.2 超聲波測距 隨著我國經(jīng)濟與社會的發(fā)展,交通安全日益成為人們不能忽視的問題。由于
71、人口的大幅增長,機動車輛的大量增加,使得路況越來越復(fù)雜,車輛和行人所面臨的危機也越來越大。根據(jù)中國汽車協(xié)會發(fā)布的數(shù)據(jù),隨著中國經(jīng)濟的高速發(fā)展和居民生活水平的不斷提高,居民擁有汽車的數(shù)量已經(jīng)有爆炸性上漲的趨勢。隨著汽車保有量的迅速增加以及城市市區(qū)的密集化, 目前公路上、停車場上的汽車越來越多, 交通也越來越擁擠,使得出現(xiàn)越來越多的交通事故,嚴(yán)重威脅著人民群眾的生命和財產(chǎn)安全。 由于道路空間的有限性,駕車穿行、拐彎、倒車等總次數(shù)不斷
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計---單片機原理及應(yīng)用
- 單片機課程設(shè)計--基于單片機的多功能綜合應(yīng)用系統(tǒng)的設(shè)計
- 單片機課程設(shè)計--單片機io口的應(yīng)用
- 單片機課程設(shè)計-- 單片機原理及應(yīng)用
- 單片機應(yīng)用課程設(shè)計報告
- 單片機課程設(shè)計-單片機課程設(shè)計---電子時鐘
- 單片機與cpld綜合課程設(shè)計
- 單片機課程設(shè)計
- 單片機課程設(shè)計
- 單片機課程設(shè)計
- 單片機課程設(shè)計
- 基于單片機的秒表設(shè)計單片機課程設(shè)計
- 單片機課程設(shè)計--單片機串行通訊
- 單片機秒表單片機課程設(shè)計
- 單片機課程設(shè)計
- 單片機原理及應(yīng)用課程設(shè)計
- 單片機課程設(shè)計---單片機數(shù)字時鐘
- 單片機原理及應(yīng)用課程設(shè)計
- 單片機課程設(shè)計--基于單片機的數(shù)字時鐘設(shè)計
- 課程設(shè)計-單片機基于單片機的數(shù)字時鐘設(shè)計
評論
0/150
提交評論