基于單片機的繼電器控制設(shè)計_第1頁
基于單片機的繼電器控制設(shè)計_第2頁
基于單片機的繼電器控制設(shè)計_第3頁
基于單片機的繼電器控制設(shè)計_第4頁
基于單片機的繼電器控制設(shè)計_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本科生畢業(yè)論文基于單片機的繼電器控制設(shè)計Designof

relaycontrol

basedon

MCU學(xué)生姓名所在專業(yè)所在班級申請學(xué)位指導(dǎo)教師職稱辯論時間2023年5月30日教務(wù)處制目錄14145設(shè)計總說明I17453ABSTRACTII14884第1章緒論1576011877614343212754224461第2章系統(tǒng)硬件局部設(shè)計4325542.1系統(tǒng)硬件設(shè)計原理及要求4227394188252.1.2紅外遙控的根本原理5186312.1.3遙控發(fā)射器及其編碼614236紅外解碼思路7172498321178175312.2.2紅外接收頭PC83810100682.2.31602液晶11204772.2.4USB接口14142312.2.5電磁繼電器15729016651217255022.3.2USB電源系統(tǒng)供電電路17138442.3.3單片機控制系統(tǒng)電路1738682.3.4繼電器觸控電路18103591928158第3章系統(tǒng)軟件局部設(shè)計20112193.1程序的根本思路及模塊化程序編寫介紹20157493.1.1主程序流程209113.1.2模塊化程序簡介20271322120294212026322510524156782819336結(jié)論2928296鳴謝305787參考文獻(xiàn)3115130附錄32設(shè)計總說明單片機已經(jīng)滲入到生活的各個領(lǐng)域,它是很難找到哪些領(lǐng)域沒有單片機的痕跡。導(dǎo)彈的導(dǎo)航裝置,在飛機上控制各種儀器,計算機網(wǎng)絡(luò)通信和數(shù)據(jù)傳輸,工業(yè)自動化過程的實時控制和數(shù)據(jù)處理。該微控制器被廣泛用于在該領(lǐng)域的智能管理和過程控制,儀器儀表,家電產(chǎn)品,醫(yī)療設(shè)備,航空航天,專門的設(shè)備。近年來,隨著電子信息產(chǎn)業(yè)的快速開展,作為繼電器的根本組成局部,廣泛應(yīng)用于家電,通訊,汽車,儀器儀表,機械設(shè)備,航空航天自動化和控制領(lǐng)域。最近的統(tǒng)計數(shù)據(jù)顯示,繼電器已經(jīng)成為第一大產(chǎn)品在電子元件產(chǎn)品之中。單片機控制繼電器的電路在生活中隨處可見,小的元件但是作用無窮。本文基于容易實現(xiàn),方便操作,貼近生活使用的設(shè)計理念,采用STC89C52單片機為控制核心,為控制終端,并采用包括按鍵、1602界面顯示、以及通過LABVIEW開發(fā)的上位機控制界面等在內(nèi)的多個控制源來控制繼電器,從而到達(dá)控制其他家用電器。關(guān)鍵詞:單片機;紅外接收頭;DS18B20;繼電器;LCD1602ABSTRACTSCMhaspenetratedintoallareasoflife,itisverydifficulttofindwhichareasnotracesofsingle-chipmicrocomputer.Missilenavigationequipment,variousinstrumentsontheaircraftcontrol,computernetworkcommunicationsanddatatransmission,real-timecontrolanddataprocessingofindustrialautomationprocess.Themicrocontrolleriswidelyusedinintelligentmanagementandprocesscontrolinthefieldofinstrumentation,electricalappliances,medicalequipment,aerospace,specialequipment.Inrecentyears,withtherapiddevelopmentofelectronicinformationindustry,asabasicpartoftherelay,widelyusedinhomeappliances,communications,automotive,instrumentation,mechanicalequipment,aerospace,automationandcontrolfield.Thelateststatisticsshow,therelayhasbecomethefirstmajorproductsintheelectroniccomponentproducts.MCUcontrolrelaycircuitcanbeseeneverywhereinlife,smallbutinfiniteelement.Thispaperisbasedontheeasy,convenientoperation,closetothedesignphilosophyoflife,usingSTC89C52microcontrollerasthecontrolcore,andusesasacontrolterminal,includingbuttons,1602interfacedisplay,andthroughtheLABVIEWdevelopmentofPCcontrolinterface,apluralityofcontrolsourcetocontroltherelaytocontroltheotherhouseholdelectricalappliances.Keywords:singlechip;infraredreceiver;DS18B20;Relay;LCD1602第1章緒論現(xiàn)代的自動控制裝置,存在電路的電子電路的電連接到彼此的問題,一方面,如果控制信號的電子電路,能夠控制執(zhí)行電路部件〔電機,電磁鐵,照明燈等〕,在另一方面也為電子線路的電器電路提供良好的電隔離,以保護(hù)電子電路和人身平安。電子繼電器將是作為一個橋梁,能夠發(fā)揮這種作用。采用單片機進(jìn)行遙控開關(guān)的設(shè)計,具有編程靈活多樣,操作個數(shù)可以隨意設(shè)定等優(yōu)點,并且能以弱點控制強電,方便運用。而紅外遙控不影響周邊環(huán)境、不干擾電氣設(shè)備;電路調(diào)試簡單,只要按給定電路連接無誤,一般不需任何調(diào)試即可投入工作;編解碼容易,可進(jìn)行多路遙控,在室內(nèi)近距離遙控中得到了廣泛的應(yīng)用;目前,市場上一般設(shè)備系統(tǒng)均采用專用的遙控編碼及解碼集成電路,但是由于功能受到特定的限制,只適合于某一專用電器產(chǎn)品的應(yīng)用,應(yīng)用范圍受到限制。本設(shè)計正是應(yīng)用紅外遙控系統(tǒng),實現(xiàn)了對多路開關(guān)的控制。與現(xiàn)狀遙控技術(shù)是在自動控制技術(shù)和通信技術(shù)根底上開展起來的。遙控系統(tǒng)既可傳送離散的控制信息〔例如開關(guān)的通斷〕,也可傳送連續(xù)的控制信息〔例如汽車油門的大小〕。最早的遙控器之一,是一個叫尼古拉·特斯拉〔NikolaTesla〕〔1856—1943〕的創(chuàng)造家在1898年時開發(fā)出來的〔美國專利613809號〕。到了六十年代初,一些興旺國家開始研究民用產(chǎn)品的遙控技術(shù),但由于當(dāng)時技術(shù)條件限制,遙控技術(shù)開展很緩慢。七十年代末,隨著大規(guī)模集成電路和計算機技術(shù)的開展,遙控技術(shù)才得到快速開展。在遙控方式上大體經(jīng)歷了從有線到無線的超聲波、從振動子到紅外線、再到使用總線的微機紅外遙控這樣幾個階段。無論采用何種方式,準(zhǔn)確無誤地傳輸信號,最終到達(dá)滿意的控制效果是非常重要的,最初的無線遙控裝置采用的是電磁波傳輸信號,由于電磁波容易產(chǎn)生干擾,也容易受干擾,因此逐漸采用超聲波和紅外線媒介來傳輸信號。與紅外線相比,超聲波傳感器頻帶窄,所能攜帶的信息量少,易受干擾而引起誤動作,較為理想的是光控制方式,采用紅外線的遙控方式逐漸取代了超聲波遙控方式,出現(xiàn)了紅外線多功能遙控器,并且成為當(dāng)今時代的主流。而從各國將遙控技術(shù)在航天、工業(yè)等方面得到廣泛應(yīng)用和開展后,遙控裝置的中心控制部件已從早期的分立元件、集成電路逐步開展到現(xiàn)在的單片微型計算機,智能化程度大大提高。尤其是紅外遙控技術(shù)在這十年得到了迅猛開展,在家電和其他電子領(lǐng)域都得到了廣泛應(yīng)用,隨著生活水平的提高,人們對產(chǎn)品的追求是使用更方便、更智能化,紅外線遙控技術(shù)正是一個重點開展方向。概念與開展單片機在一塊半導(dǎo)體硅片上集成了計算機的所有根本功能部件,包括中央處理器、存儲器、輸入輸出接口電路、中斷系統(tǒng)、定時器計數(shù)器和串行通信接口電路等,因此,單片機只需要與適當(dāng)?shù)能浖斑m當(dāng)?shù)耐獠吭O(shè)備相結(jié)合,就可以構(gòu)成一個完整的計算機應(yīng)用系統(tǒng)。單片機誕生于20世紀(jì)70年代,作為微型計算機的一個重要分支,應(yīng)用面很廣,開展很快。如果將8位單片機的推出作為起點,那么單片機的開展歷史大致可分為以下幾個階段:第一階段〔1976-1978〕:單片機探索階段第二階段〔1978-1982〕:單片機完善階段第三階段〔1982-1990〕:微控制器形成階段第四階段〔1990至今〕:微控制器全面開展階段隨著單片機的各個領(lǐng)域全面深入的開展和應(yīng)用,導(dǎo)致單片機的開展趨勢是向CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面開展。由于在工業(yè)、航空以及儀器儀表等紅外控制當(dāng)中通常需要使用專用的配對編、解碼芯片,組成紅外發(fā)射和接收電路,完成對設(shè)備或電器的遠(yuǎn)程控制。使用專用的配對編、解碼芯片來組成紅外發(fā)射電路和紅外接收電路,在控制路數(shù)較少時矛盾并不突出。但是當(dāng)控制路數(shù)較多時,其接口的設(shè)計和實現(xiàn)就顯得比擬繁瑣。此外編、解碼芯片通常是專用配對使用的,即某種解碼芯片只能識別某種編碼芯片的編碼,對其他型號的編碼芯片的編碼那么不能識別。因此,不同的編、解碼芯片幾乎沒有互換性。為了解決上述專用編解碼芯片配對的局限性,本文意在研究一種基于基于單片機的紅外解碼控制系統(tǒng),實現(xiàn)對紅線外解碼并完成后置繼電器電路的開關(guān)控制功能。設(shè)計一個多路紅外遙控開關(guān),利用市售遙控器發(fā)送遙控器鍵盤數(shù)字信號,通過以STC89C52單片機為核心的控制器接受數(shù)字信號并解碼,然后通過控制器控制相應(yīng)的繼電器通斷,使得后置電路工作并實現(xiàn)各自相關(guān)功能,本文所涉及研究內(nèi)容如下:〔1〕紅外解碼思路及紅外解碼原理的分析?!?〕設(shè)計相關(guān)控制電路、接收電路、以及被控功能電路。〔3〕采用C程序語言進(jìn)行相關(guān)程序的模塊化編程并調(diào)試?!?〕通過電路設(shè)計圖進(jìn)行實物焊接并調(diào)試,實現(xiàn)紅外開關(guān)控制功能。第2章系統(tǒng)硬件局部設(shè)計2.1系統(tǒng)硬件設(shè)計原理及要求在進(jìn)行系統(tǒng)硬件設(shè)計時,首先需要保證的便是整個系統(tǒng)的功能性與穩(wěn)定性,將各個硬件電路模塊進(jìn)行認(rèn)真仔細(xì)的分析,在通電之前,需要排除斷路與短路現(xiàn)象的存在,以保證系統(tǒng)調(diào)試平安性,防止上述問題造成的硬件系統(tǒng)損壞等的不良結(jié)果,同時還需考慮到本錢的客觀因素,以使本設(shè)計簡單易懂而又經(jīng)濟實用。功能一:遙控器發(fā)出的紅外遙控信號經(jīng)紅外接收器接收轉(zhuǎn)化成TTL信號后送給STC89C52的中斷口1,單片機采集到這些數(shù)據(jù)后產(chǎn)生外部中斷,進(jìn)入解碼程序,對其進(jìn)行紅外解碼處理并獲得對后置電路所需的控制信息,這些控制信息可直接從I/O口輸出,當(dāng)I/O輸出高電平是,使得本設(shè)計電路中的三極管9013導(dǎo)通,繼電器線圈導(dǎo)通形成磁場,吸住彈片,常閉斷開,常開閉合,連通后置電路中的供電電源。系統(tǒng)框圖如圖2.1所示:繼電器繼電器控制模塊遙控發(fā)射模塊單片機解碼模塊紅外接收模塊繼電器繼電器控制模塊溫度傳感器液晶顯示單片機接收到信號功能三:利用近距離繼電器控制,使用3位獨立鍵盤進(jìn)行繼電器近距離開關(guān),控制原理與紅外遙控相似,區(qū)別在于遠(yuǎn)距離與近距離,因此功能簡單,這里不做詳細(xì)介紹??傮w系統(tǒng)框架原理圖如圖:液晶1602單片液晶1602單片機紅外遙控器溫度傳感器溫度傳感器4路繼電器4路繼電器獨立鍵盤獨立鍵盤圖2.3系統(tǒng)框架原理圖2.1.2紅外遙控的根本原理紅外遙控的發(fā)射電路是采用紅外發(fā)光二極管來發(fā)出經(jīng)過調(diào)制的紅外光波,紅外接收電路由紅外接收二極管、三極管或硅光電池組成,它們將紅外發(fā)射器發(fā)射的紅外光轉(zhuǎn)換為相應(yīng)的電信號,再送后置放大器。發(fā)射機一般由指令鍵(或操作桿)、指令編碼系統(tǒng)、調(diào)制電路、驅(qū)動電路、發(fā)射電路等幾局部組成。當(dāng)按下指令鍵或推動操作桿時,指令編碼電路產(chǎn)生所需的指令編碼信號,指令編碼信號對載波進(jìn)行調(diào)制,再由驅(qū)動電路進(jìn)行功率放大后由發(fā)射電路向外發(fā)射經(jīng)調(diào)制定的指令編碼信號。接收電路一般由接收電路、放大電路、調(diào)制電路、指令譯碼電路、驅(qū)動電路、執(zhí)行電路(機構(gòu))等幾局部組成。接收電路將發(fā)射器發(fā)出的已調(diào)制的編碼指令信號接收下來,并進(jìn)行放大后送解調(diào)電路,解調(diào)電路將已調(diào)制的指令編碼信號解調(diào)出來,即復(fù)原為編碼信號。指令譯碼器將編碼指令信號進(jìn)行譯碼,最后由驅(qū)動電路來驅(qū)動執(zhí)行電路實現(xiàn)各種指令的操作控制〔機構(gòu)〕。如圖2.4所示發(fā)射局部包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器,接收局部包括光電轉(zhuǎn)換放大、解調(diào)、解碼電路,而整個接收局部將完全由上述的PC838紅外一體化收頭來完成,本設(shè)計的發(fā)射局部采用成品遙控器來發(fā)送控制信號。紅外遙控器紅外遙控器鍵盤接收、放大、檢波、整形編碼和調(diào)制紅外接收頭光電放大解調(diào)解碼單片機圖2.4紅外遙控系統(tǒng)框圖2.1.3遙控發(fā)射器及其編碼遙控發(fā)射器專用芯片很多,這里我們以運用比擬廣泛,解碼比擬容易的一類來加以說明,現(xiàn)以WD6122遙控發(fā)射器專用芯片組成發(fā)射電路為例說明編碼原理,該芯片類型的遙控發(fā)射器成品鍵碼值如圖2.5所示。圖2.5本設(shè)計使用的成品遙控器鍵碼圖當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:“0〞“1〞,其波形如圖2.6所示?!?〞和“1〞上述“0〞和“1〞組成的32位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)行二次調(diào)制以提高發(fā)射效率,到達(dá)降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射。WD6122產(chǎn)生的遙控編碼是連續(xù)的32位二進(jìn)制碼組,所發(fā)射的一幀碼含有一個引導(dǎo)碼,16位用戶編碼和八位數(shù)據(jù)編碼,數(shù)據(jù)編碼的反碼也同時被傳送,編碼結(jié)構(gòu)如圖2.7所示:圖2.7遙控器發(fā)射的32位碼組圖引導(dǎo)碼由一個9ms的載波波形和一個4.5ms的關(guān)斷時間構(gòu)成,它作為隨后發(fā)射碼的引導(dǎo)碼,這樣當(dāng)接收系統(tǒng)是由微處理器構(gòu)成的時候,能更有效的處理碼的接受與檢測及其他各項控制之間的時序關(guān)系。編碼采用脈沖位置調(diào)制方式〔PPM〕,利用脈沖之間的時間間隔來區(qū)分“0〞和“1〞。每次8位的碼被傳送之后,他的反碼也被傳送,減少了系統(tǒng)的誤碼率,這也為后續(xù)的解碼程序的編寫提供了自行檢測是否誤碼的手段。2.1.4紅外解碼思路遙控器將按鍵信息進(jìn)行編碼后調(diào)制到紅外線的某個頻率通過發(fā)光二極管發(fā)射出去,紅外接收管接收到發(fā)射管發(fā)出的紅外信號后對該信號進(jìn)行解調(diào)原始編碼信息,紅外遙控接收頭解調(diào)出的編碼是串行二進(jìn)制碼,包含著遙控按鍵信息,但它還不便于CPU讀取識別,因此需要先對這些二進(jìn)制碼進(jìn)行解碼。當(dāng)遙控器上任意一個按鍵按下超過36ms時,控制芯片的振蕩器使芯片激活,將發(fā)射一個特定的同步碼頭,對于接收端而言就是一個9ms的低電平,和一個4.5ms的高電平,這個同步碼頭可以使程序知道從這個同步碼頭以后可以開始接收數(shù)據(jù)。解碼的關(guān)鍵是如何識別“0〞和“1〞,從位的定義我們可以發(fā)現(xiàn)“0〞、“1〞均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0〞為0.56ms,“1〞為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0〞和“1〞。如果從0.56ms低電平過后,開始延時,0.56ms以后,假設(shè)讀到的電平為低,說明該位為“0〞,反之那么為“1〞,為了可靠起見,延時必須比0.56ms長些,但又不能超過1.12ms,否那么如果該位為“0〞,讀到的已是下一位的高電平,因此取〔1.12ms+0.56ms〕/2=0.84ms最為可靠,一般取0.84ms左右即可。根據(jù)紅外編碼的格式,程序應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。單片機把解碼所得的二進(jìn)制存入相應(yīng)的存儲單元,這樣就完成了某一按鍵的紅外解碼操作,同樣地,按此可以實現(xiàn)其它按鍵的紅外解碼,最后形成遙控器按鍵相應(yīng)的鍵值表。就這樣單片機程序就可以識別遙控器相應(yīng)的功能鍵,通過遙控器向單片機發(fā)出相應(yīng)的命令,單片機接收到命令后通過驅(qū)動電路使繼電器動作從而實現(xiàn)用電設(shè)備的開關(guān)。本章將對設(shè)計中所涉及到的單片機STC89C52、紅外遙控接收頭PC838、MAX232、USB接口線以及電磁繼電器進(jìn)行簡單介紹。STC89C52STC89C52單片機是宏晶科技推出的新一代超/高速/低功耗的單片機,指令代碼完全兼容傳統(tǒng)8051單片機,12時鐘/機器周期,內(nèi)部集成MAX810專用復(fù)位電路,時鐘頻率在12MHz以下時,復(fù)位腳可直接接地?!?〕STC89C52的特點eq\o\ac(○,1)增強型12時鐘/機器周期8051CPU;eq\o\ac(○,2)工作電壓:5.5V-3.8V〔5V單片機〕;eq\o\ac(○,3)工作頻率范圍:0-40MHz,相當(dāng)于普通8051的0~80MHz;eq\o\ac(○,4)用戶應(yīng)用程序空間61K;eq\o\ac(○,5)片上集成1280字節(jié)RAM;eq\o\ac(○,6)通用I/O口32個,復(fù)位后為:P1/P2/P3是準(zhǔn)雙向口/弱上拉〔普通8051傳統(tǒng)I/O口〕,P0口是開漏輸出,作為總線擴展用時,不用加上拉電阻,作為I/O口用時,需加上拉電阻;eq\o\ac(○,7)ISP〔在系統(tǒng)可編程〕/IAP〔在應(yīng)用可編程〕,無需專用編程器/仿真器可通過串口〔P3.0/P3.1〕直接下載用戶程序,8K程序3-5秒即可完成一片;eq\o\ac(○,8)EEPROM功能;eq\o\ac(○,9)看門狗;eq\o\ac(○,10)內(nèi)部集成MAX810專用復(fù)位電路,外部晶體12M以下時,可省外部復(fù)位電路,復(fù)位腳可直接接地;eq\o\ac(○,11)共3個16位定時器/計數(shù)器,其中定時器0還可以當(dāng)成2個8位定時器使用;eq\o\ac(○,12)外部中斷4路,下降沿中斷或低電平觸發(fā)中斷,PowerDown模式可由外部中斷低電平觸發(fā)中斷方式喚醒;eq\o\ac(○,13)通用異步串行口〔UART〕,還可用定時器軟件實現(xiàn)多個UART;eq\o\ac(○,14)工作溫度范圍:0-75℃〔商業(yè)級〕;〔2〕STC89C52的DIP封裝40引腳分布 STC89C52單片機的DIP封裝擁有40個引腳,其中P0\P1\P2\P3四組I/0口,總共32個I/O口引腳,另外包括一個電源VCC引腳,兩個晶振引腳一個接地端引腳,一個復(fù)位引腳,以及EA引腳、ALE引腳、PSEN引腳,總共40個引腳,引腳分布如圖2.8所示。圖單片機STC89C52DIP封裝引腳圖2.2.2紅外接收頭PC838紅外接收電路一體化的紅外接收裝置將遙控信號的接收、放大、檢波、整形集于一身,并且輸出可以讓單片機識別的TTL信號,這樣大大簡化了接收電路的復(fù)雜程度和電路的設(shè)計工作,方便使用。在本設(shè)計中采用紅外一體化接收頭PC838,在用小功率發(fā)射管發(fā)射信號情況下,其接收距離可達(dá)15m。它能與TTL、COMS電路兼容,接收紅外信號頻率為38kHz,同時能對信號進(jìn)行放大、檢波、整形,得到TTL電平的編碼信號。三個管腳分別是地(GND)、+5V電源(VCC)、解調(diào)信號輸出端(接單片機外部中斷)。紅外一體化接收頭的測試:可以在PC838的電源端與信號輸出端之間接上一只二極管及一只發(fā)光二極管后,再配上規(guī)定的工作電源〔為+5V〕,當(dāng)手拿遙控器對著接收頭按任意鍵時,發(fā)光二極管會閃爍,說明紅外接收頭和遙控器工作都正常;如果發(fā)光二極管不閃爍發(fā)光,說明紅外接收頭和遙控器至少有一個損壞。只要確保遙控器工作正常,很容易判斷紅外接收頭的優(yōu)劣。由于供電電源存在干擾,應(yīng)該對電源端進(jìn)行濾波處理,處理方法為:電源端與接地端之間連接一個100Ω左右。PC838的經(jīng)典應(yīng)用原理圖如圖2.9所示:PC838OUTPUT單片機I/O口PC838GNDC1VCC〔+5V〕R2PC838的經(jīng)典應(yīng)用電路2.2.31602液晶在日常生活中,我們對液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產(chǎn)品的通過器件,如在計算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號和圖形。在單片機的人機交流界面中,一般的輸出方式有以下幾種:發(fā)光管、LED數(shù)碼管、液晶顯示器。發(fā)光管和LED數(shù)碼管比擬常用,軟硬件都比擬簡單,在前面章節(jié)已經(jīng)介紹過,在此不作介紹,本章重點介紹字符型液晶顯示器的應(yīng)用。在單片機系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個優(yōu)點:1、顯示質(zhì)量高由于液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器〔CRT〕那樣需要不斷刷新新亮點。因此,液晶顯示器畫質(zhì)高且不會閃爍。2、數(shù)字式接口液晶顯示器都是數(shù)字式的,和單片機系統(tǒng)的接口更加簡單可靠,操作更加方便。3、體積小、重量輕液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來到達(dá)顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。4、功耗低相對而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動IC上,因而耗電量比其它顯示器要少得多。一、液晶顯示簡介1、液晶顯示原理液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動、易于實現(xiàn)全彩色顯示的特點,目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機、PDA移動通信工具等眾多領(lǐng)域。2、液晶顯示器的分類液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動方式來分,可以分為靜態(tài)驅(qū)動〔Static〕、單純矩陣驅(qū)動〔SimpleMatrix〕和主動矩陣驅(qū)動〔ActiveMatrix〕三種。3、液晶顯示器各種圖形的顯示原理:①線段的顯示點陣圖形式液晶由M×N個顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成,屏上64×16個顯示單元與顯示RAM區(qū)1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由RAM區(qū)的000H——00FH的16字節(jié)的內(nèi)容決定,當(dāng)〔000H〕=FFH時,那么屏幕的左上角顯示一條短亮線,長度為8個點;當(dāng)〔3FFH〕=FFH時,那么屏幕的右下角顯示一條短亮線;當(dāng)〔000H〕=FFH,〔001H〕=00H,〔002H〕=00H,……〔00EH〕=00H,〔00FH〕=00H時,那么在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的根本原理。②字符的顯示用LCD顯示一個字符時比擬復(fù)雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1〞,其它的為“0〞,為“1〞的點亮,為“0〞的不亮。這樣一來就組成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比擬簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。③漢字的顯示漢字的顯示一般采用圖形的方式,事先從微機中提取要顯示的漢字的點陣碼〔一般用字模提取軟件〕,每個漢字占32B,分左右兩半,各占16B,左邊為1、3、5……右邊為2、4、6……根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)可找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一字節(jié),光標(biāo)位置加1,送第二個字節(jié),換行按列對齊,送第三個字節(jié)……直到32B顯示完就可以LCD上得到一個完整漢字。二、1602字符型LCD簡介字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子的1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實物如圖10-53:三、1602LCD主要技術(shù)參數(shù):1、顯示容量:16×2個字符2、3、工作電流:2.0mA(5.0V)4、5、字符尺寸:2.95×4.35(W×H)mm四、引腳功能說明1602LCD采用標(biāo)準(zhǔn)的14腳〔無背光〕或16腳〔帶背光〕接口,各引腳接口說明如表所示:編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極表:引腳接口說明表第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器比照度調(diào)整端,接正電源時比照度最弱,接地時比照度最高,比照度過高時會產(chǎn)生“鬼影〞,使用時可以通過一個10K的電位器調(diào)整比照度。第4腳:RS為存放器選擇,高電平時選擇數(shù)據(jù)存放器、低電平時選擇指令存放器。第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。2.2.4USB接口本設(shè)計采用的是USB接口來對整個遙控系統(tǒng)進(jìn)行適配供電,從而使得本設(shè)計的電源局部穩(wěn)定且對電路實現(xiàn)了最大簡化,相比擬的單片機傳統(tǒng)供電系統(tǒng)來說更為節(jié)能,本錢更節(jié)約?!?〕USB接口的簡介USB是英文UniversalSerialBUS〔通用串行總線〕的縮寫,而其中文簡稱為“通串線,是一個外部總線標(biāo)準(zhǔn),用于標(biāo)準(zhǔn)電腦與外部設(shè)備的連接和通訊。是應(yīng)用在PC領(lǐng)域的接口技術(shù)。USB接口支持設(shè)備的即插即用和熱插拔功能。USB是在1994年底由英特爾、康柏、IBM、Microsoft等多家公司聯(lián)合提出的,引腳分布如圖2.10所示:圖2.10USB接口引腳分布圖〔2〕選擇USB接口為本設(shè)計供電的原因及考前須知由于USB供電可以提供每個U口最大為500MA的電流,供電電壓為5V,與單片機的供電系統(tǒng)相適配,能滿足本設(shè)計絕大局部元器件的供電要求,而且本設(shè)計過程中并不存在大功率元器件,所以本設(shè)計選用USB作為整個紅外遙控系統(tǒng)的供電電源,但是為了防止電路上短路燒壞電腦的USB接口,USB接口應(yīng)加自恢復(fù)保險。本設(shè)計只需要利用USB的VCC電源端〔+5V〕,以及GND〔接地端〕對設(shè)計中所涉及的元器件進(jìn)行供電,而其余兩腳為數(shù)據(jù)傳送端口無需利用,因此空置便可,在設(shè)計過程中需要先用萬用表電壓檔測量USB接口的VCC端以及GND端口,防止連接電路時候?qū)㈦娫礃O性接反而造成不必要的后果?!?〕USB接口的選型USB接口的型號多種多樣,對于供電電路來說,采用普通的A型或者B型接口就可以了,本設(shè)計使用的是A型USB接口,如圖2.11所示:圖2.11USB接口實物圖2.2.5電磁繼電器要實現(xiàn)遙控開關(guān),需要選擇繼電器配合單片機以及紅外遙控實現(xiàn)遙控開關(guān)的功能,本設(shè)計選用的是5V額定電壓的電磁繼電器?!?〕電磁繼電器的介紹繼電器是一種電控制器件。它具有控制系統(tǒng)〔又稱輸入回路〕和被控制系統(tǒng)〔又稱輸出回路〕之間的互動關(guān)系。通常應(yīng)用于自動化的控制電路中,它實際上是用小電流去控制大電流運作的一種“自動開關(guān)〞。故在電路中起著自動調(diào)節(jié)、平安保護(hù)、轉(zhuǎn)換電路等作用。當(dāng)輸入量〔如電壓、電流、溫度等〕到達(dá)規(guī)定值時,繼電器被所控制的輸出電路導(dǎo)通或斷開。輸入量可分為電氣量〔如電流、電壓、頻率、功率等〕及非電氣量〔如溫度、壓力、速度等〕兩大類。繼電器具有動作快、工作穩(wěn)定、使用壽命長、體積小等優(yōu)點。廣泛應(yīng)用于電力保護(hù)、自動化、運動、遙控、測量和通信等裝置中。〔2〕電磁繼電器的原理電磁繼電器一般由鐵芯、線圈、銜鐵、觸點簧片等組成的,〔本設(shè)計應(yīng)用的5引腳電磁繼電器內(nèi)部結(jié)構(gòu)示意如圖2.12所示〕,只要在線圈兩端加上一定的電壓,線圈中就會流過一定的電流,從而產(chǎn)生電磁效應(yīng),銜鐵就會在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動銜鐵的動觸點與靜觸點〔常開觸點〕吸合。當(dāng)線圈斷電后,電磁的吸力也隨之消失,銜鐵就會在彈簧的反作用力返回原來的位置,使動觸點與原來的靜觸點〔常閉觸點〕釋放。這樣吸合、釋放,從而到達(dá)了在電路中的導(dǎo)通、切斷的目的。對于繼電器的“常開、常閉〞觸點,可以這樣來區(qū)分:繼電器線圈未通電時處于斷開狀態(tài)的靜觸點,稱為“常開觸點〞;處于接通狀態(tài)的靜觸點稱為“常閉觸點〞。繼電器一般有兩股電路,為低壓控制電路和高壓工作電路。圖2.12電磁繼電器內(nèi)部示意圖本節(jié)將提供該設(shè)計中所涉及到的系統(tǒng)整體原理圖以及模塊電路的原理圖,如紅外接收模塊、USB供電模塊、單片機解碼控制模塊等。整個系統(tǒng)圖包括了單片機最小系統(tǒng)、紅外接收器、繼電器模塊、電源開關(guān)、溫度傳感器、獨立按鍵以及液晶顯示等。2.3.2USB電源系統(tǒng)供電電路由于USB接口能夠提供5V電壓,最大500MA的電流,足夠滿足本設(shè)計的電源適配需求,且電壓穩(wěn)定,所以本設(shè)計采用USB接口進(jìn)行供電。2.3.3單片機控制系統(tǒng)電路單片機接收紅外接收頭輸出的電平信號產(chǎn)生中斷,處理中斷效勞程序即紅外解碼程序并完成對繼電器的驅(qū)動控制,實現(xiàn)電源開關(guān)控制功能,如圖2.14所示。2.3.4繼電器觸控電路采用5V電磁繼電器,在單片機的I/O口輸出一個高電平的時候,將驅(qū)動晶體三極管9013導(dǎo)通,使得電磁繼電器的控制線圈通斷形成磁場,可是應(yīng)該在繼電器線圈上加二極管阻斷線圈反電勢以保護(hù)三極管9013,如圖2.16所示。在整個硬件設(shè)計過程中,所遇上的主要問題是如何驅(qū)動繼電器工作,由于單片機的I/O口在直接連接繼電器控制線圈引腳上缺乏使得繼電器線圈以產(chǎn)生拉動彈片的磁場,所以需要對輸入的驅(qū)動電流進(jìn)行放大,而在繼電器驅(qū)動電路上添加一個三極管,那么可以解決這個問題。第3章系統(tǒng)軟件局部設(shè)計3.1程序的根本思路及模塊化程序編寫介紹系統(tǒng)軟件設(shè)計由紅外線解碼、中斷效勞程序、繼電器控制程序、延時程序等幾局部程序組成,本章將對整個編寫程序流程及程序代碼進(jìn)行表述。開始3.1.1主程序流程開始3路獨立按鍵紅外遙控器溫度傳感器3路獨立按鍵紅外遙控器溫度傳感器液晶顯示液晶顯示繼電器模塊控制繼電器模塊控制圖3.1系統(tǒng)軟件工作流程流程說明:在遙控器按下鍵碼的時候,發(fā)射的紅外線被一體化接收頭接收后輸出TTL電平信號,對單片機造成外部中斷,進(jìn)而單片機對紅外接收頭傳來含有編碼信息的TTL電平信號進(jìn)行解碼,然后程序中處理得到的鍵碼碼值再傳至控制程序,如本設(shè)計中的繼電器控制程序,處理繼電器控制程序以實現(xiàn)本設(shè)計所要求的開關(guān)控制功能,當(dāng)沒有按鍵按下,程序返回到主程序的最開始,重新進(jìn)行鍵碼判斷。3.1.2模塊化程序簡介模塊化程序設(shè)計即模塊化設(shè)計,簡單地說就是程序的編寫不是開始就逐條錄入計算機語句和指令,而是首先用主程序、子程序、子過程等框架把軟件的主要結(jié)構(gòu)和流程描述出來,并定義和調(diào)試好各個框架之間的輸入、輸出鏈接關(guān)系。逐步求精的結(jié)果是得到一系列以功能塊為單位的算法描述。以功能塊為單位進(jìn)行程序設(shè)計,實現(xiàn)其求解算法的方法稱為模塊化。模塊化的目的是為了降低程序復(fù)雜度,使程序設(shè)計、調(diào)試和維護(hù)等操作簡單化,而在模塊化C程序設(shè)計的過程中包含*.c和*.h兩種重要的文件。本節(jié)將介紹整個系統(tǒng)設(shè)計中所涉及到的軟件程序代碼,包括主程序模塊代碼、紅外解碼代碼、繼電器控制代碼以及應(yīng)用到的主要延時功能代碼。#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar//宏定義/*****主函數(shù)*****/voidmain(void){LCD_Init();//初始化液晶DelayMs(20);//延時有助于穩(wěn)定LCD_Clear();//清屏csh();while(1) //無限循環(huán){Disp_Temperature(); //溫度數(shù)據(jù)采集,并轉(zhuǎn)化成LCD1602要顯示的代碼key(); //按鍵掃描Disp(); //顯示程序} }**********************************************************/voidIR_IN()interrupt2using0{unsignedcharj,k,N=0;EX1=0; delay1(15); if(IRIN==1){ EX1=1; return; }//確認(rèn)IR信號出現(xiàn)while(!IRIN)//等IR變?yōu)楦唠娖?,跳過9ms的前導(dǎo)低電平信號。{ delay1(1); } for(j=0;j<4;j++)//收集四組數(shù)據(jù) { for(k=0;k<8;k++)//每組數(shù)據(jù)有8位 { while(IRIN)//等IR變?yōu)榈碗娖?,跳過4.5ms的前導(dǎo)高電平信號。 { delay1(1); } while(!IRIN)//等IR變?yōu)楦唠娖?{ delay1(1); } while(IRIN)//計算IR高電平時長 { delay1(1); N++; if(N>=30) { EX1=1; return; }//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; }//endfork }//endforjif(IRCOM[2]!=~IRCOM[3]){EX1=1;return; } if(IRCOM[2]==0x0c) {jdq1=!jdq1;j1=jdq1;if(jdq1==0)shuju1[2]='N';elseshuju1[2]='F';Disp();} if(IRCOM[2]==0x18) {jdq2=!jdq2;j2=jdq2;if(jdq2==0)shuju1[6]='N';elseshuju1[6]='F';Disp();} if(IRCOM[2]==0x5e) {jdq3=!jdq3;j3=jdq3;if(jdq3==0)shuju1[10]='N';elseshuju1[10]='F';Disp();} beep();EX1=1;}/*****初始化DS18B20*****/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;Delay(8);//稍做延時DQ=0;//單片機將DQ拉低Delay(80);//精確延時,大于480usDQ=1;//拉高總線Delay(14);x=DQ;//稍做延時后,如果x=0那么初始化成功,x=1那么初始化失敗Delay(20);}/*****讀一個字節(jié)*****/unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號dat>>=1;DQ=1;//給脈沖信號if(DQ)dat|=0x80;Delay(4);}return(dat);}/*****寫一個字節(jié)*****/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;}}voidTmpchange(void)//發(fā)送溫度轉(zhuǎn)換命令{Init_DS18B20();WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0x44);//啟動溫度轉(zhuǎn)換}/*****讀取溫度*****/unsignedintReadTemperature(void){unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Tmpchange();Init_DS18B20();WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0xBE);//讀取溫度存放器a=ReadOneChar();//讀低8位b=ReadOneChar();//讀高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*100+0.5;//放大10倍輸出并四舍五入return(t);}/*****數(shù)據(jù)轉(zhuǎn)換子程序*****/Disp_Temperature()//顯示溫度{e=ReadTemperature();//獲取溫度值m=e/100; //溫度整數(shù)位a=e/1000; //計算得到溫度十位數(shù)字shuju2[2]=ASCII_NUM[a];//把計算得到的數(shù)放到顯示的數(shù)組里b=e/100-a*10;//計算得到溫度個位數(shù)字shuju2[3]=ASCII_NUM[b]; //把計算得到的數(shù)放到顯示的數(shù)組里d=e%10;//計算得到溫度小數(shù)點后一位shuju2[6]=ASCII_NUM[d]; //把計算得到的數(shù)放到顯示的數(shù)組里c=(e%100)/10;//計算得到溫度小數(shù)點后兩位shuju2[5]=ASCII_NUM[c]; //把計算得到的數(shù)放到顯示的數(shù)組里shuju2[13]=ASCII_NUM[shangxian/10]; //計算得到上限十位,并把計算得到的數(shù)放到顯示的數(shù)組里shuju2[14]=ASCII_NUM[shangxian%10]; //計算得到上限個位,并把計算得到的數(shù)放到顯示的數(shù)組里 if(m>=shangxian){jdq4=0;shuju1[14]='N';}//溫度不在范圍內(nèi)接通繼電器else{jdq4=1;shuju1[14]='F';}j4=jdq4;}/*****初始化溫度檢測子程序*****/Disp_Temperature1()//顯示溫度{e=ReadTemperature();//獲取溫度值a=e/1000; //計算得到溫度十位數(shù)字shuju2[2]=ASCII_NUM[a];//把計算得到的數(shù)放到顯示的數(shù)組里b=e/100-a*10;//計算得到溫度個位數(shù)字shuju2[3]=ASCII_NUM[b]; //把計算得到的數(shù)放到顯示的數(shù)組里d=e%10;//計算得到溫度小數(shù)點后一位shuju2[6]=ASCII_NUM[d]; //把計算得到的數(shù)放到顯示的數(shù)組里c=(e%100)/10;//計算得到溫度小數(shù)點后兩位shuju2[5]=ASCII_NUM[c]; //把計算得到的數(shù)放到顯示的數(shù)組里shuju2[13]=ASCII_NUM[shangxian/10]; //計算得到上限十位,并把計算得到的數(shù)放到顯示的數(shù)組里shuju2[14]=ASCII_NUM[shangxian%10]; //計算得到上限個位,并把計算得到的數(shù)放到顯示的數(shù)組里 m=e/100; //溫度整數(shù)位}voidDelay(uinti) //DS18B20延遲程序{while(i--);}voidqudou(void)//去抖延遲{inti;for(i=0;i<2400;i++);}voidDelayUs2x(unsignedchart){while(--t);}voidDelayMs(unsignedchart){while(t--){//大致延時1mSDelayUs2x(245); DelayUs2x(245);}}結(jié)論本設(shè)計通過了試驗,根本上符合設(shè)計要求,論文涉及的相關(guān)理論的得到了進(jìn)一步的驗證。系統(tǒng)采用軟件解碼具有電路簡單、經(jīng)濟實用、操作簡單、適用性強等特點,單片機采用STC89C52,充分利用了它的資源。系統(tǒng)的功能還有很大的擴展空間,比方在程序里集成多個解碼程序,讓系統(tǒng)自適應(yīng)不通種類的遙控器,如果系統(tǒng)參加語音芯片還可以在設(shè)置語音提示,使之功能更加完美。鳴謝經(jīng)過這次鍛煉我的體會更深了,我認(rèn)識到實踐是最好的老師,有很多的知識如果不去實踐就永遠(yuǎn)也不會有透徹的理解,每一次的實踐都是一種進(jìn)步。很感謝各位指導(dǎo)老師的關(guān)心,你們幫助我解決了設(shè)計過程中遇到的一些問題,并提出了一些具有指導(dǎo)性的建議,使的本設(shè)計更趨完善。也感謝每一個看到我的論文的老師和朋友,因為你們的閱讀使我的論文散發(fā)了生命力,由于時間倉促,還希望大家的批評與指點。參考文獻(xiàn)[1]譚浩強.C程序設(shè)計〔第四版〕[M].清華大學(xué)出版社,2023:85-131,170-218.[2]郭天祥.新概念51單片機C語言程序教程—入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2023:1-137[3]歐偉明,何靜,凌云,劉劍等編著,肖伸平主審.單片機原理與應(yīng)用系統(tǒng)[M].北京:電子工業(yè)出版社,2023:91-101.[4]中山單片機學(xué)習(xí)網(wǎng).紅外遙控解碼原理及單片機軟件鍵碼實例[EB/OL].://zsMCU[5]蘇長贊.紅外線與超聲波遙控[M].北京:人民郵電出版社,1993:1-62.[6]凌志斌,鄧超平,鄭益慧,葉芃生;紅外遙控技術(shù)及其解碼方案[J];中國學(xué)術(shù)期刊;2003年06期:1-4.[7].[8]朱光忠;呂梅蕾;楊子鳴;;基于單片機的紅外遙控開關(guān)控制器[J];計算機工程與設(shè)計;2006年11期:2097-2099.[9]聶詩良,李磊民.AMethodofSendingandRecivingInfraredRemote-controlSignlewithMicrochipComputer[J]信息技術(shù)報;2004,28〔2〕:21-23.[10]李志超,周華.DesignandApplicationofInfraredRemoteControlBasedonMCU[J].中州大學(xué)學(xué)報;2023,25〔2〕:111-112.[11]梁超,謝皓.DesignandApplicationofInfraredRemoteControlSystem[J].中國學(xué)術(shù)期刊;2006年第4期:124-125.附錄#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar//宏定義sbitRS=P2^5; //控制端口sbitRW=P2^6;sbitEN=P2^7;#defineDataPortP0 //數(shù)據(jù)端口unsignedcharcodeASCII_NUM[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1sbitshezhi=P1^0; //定義設(shè)置鍵sbitjia=P1^1; //定義加鍵sbitjian=P1^2; //定義減鍵sbitK1=P1^3;sbitK2=P1^4;sbitK3=P1^5;sbitDQ=P1^6;//定義DS18B20總線I/OsbitBEEP=P2^4;//蜂鳴器驅(qū)動線 sbitIRIN=P3^3;//紅外接收器數(shù)據(jù)線sbitj1=P2^3;sbitj2=P2^2;sbitj3=P2^1;sbitj4=P2^0;voidbeep();intjdq1=1,jdq2=1,jdq3=1,jdq4=1;charshuju1[]="";charshuju2[]="";ucharIRCOM[7];signedcharm,wendu;//溫度值全局變量uinta,b,c,d,e,f,g,h;intsz=0;intshangxian=38;//上限報警溫度,默認(rèn)值為38voidDelay(uinti) //DS18B20延遲程序{while(i--);}voidqudou(void)//去抖延遲{inti;for(i=0;i<2400;i++);}voidDelayUs2x(unsignedchart){while(--t);}voidDelayMs(unsignedchart){while(t--){//大致延時1mSDelayUs2x(245); DelayUs2x(245);}}/*寫入命令函數(shù)*/voidLCD_Write_Com(unsignedcharcom){//#ifndefPROTEUS//while(LCD_Check_Busy());//忙那么等待//#elseDelayUs2x(50);//#endifRS_CLR;RW_CLR;EN_SET;DataPort=com;_nop_();EN_CLR;}/*寫入數(shù)據(jù)函數(shù)*/voidLCD_Write_Data(unsignedcharData){// #ifndefPROTEUS// while(LCD_Check_Busy());//忙那么等待// #else DelayUs2x(50);// #endif RS_SET; RW_CLR; EN_SET; DataPort=Data; _nop_(); EN_CLR;}/*清屏函數(shù)*/voidLCD_Clear(void){ LCD_Write_Com(0x01); DelayMs(5);}/*寫入字符串函數(shù)*/voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s){ if(y==0) { LCD_Write_Com(0x80+x);//表示第一行 } else { LCD_Write_Com(0xC0+x);//表示第二行 } while(*s) { LCD_Write_Data(*s); s++; }}/*初始化函數(shù)*/voidLCD_Init(void){ LCD_Write_Com(0x38);/*顯示模式設(shè)置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08);/*顯示關(guān)閉*/ LCD_Write_Com(0x01);/*顯示清屏*/ LCD_Write_Com(0x06);/*顯示光標(biāo)移動設(shè)置*/ DelayMs(5); LCD_Write_Com(0x0C);/*顯示開及光標(biāo)設(shè)置*/ shuju1[0]='1';shuju1[1]=':';shuju1[2]='F';shuju1[3]='';shuju1[4]='2';shuju1[5]=':';shuju1[6]='F';shuju1[7]='';shuju1[8]='3';shuju1[9]=':';shuju1[10]='F';shuju1[11]='';shuju1[12]='4';shuju1[13]=':';shuju1[14]='F';shuju1[15]='';shuju1[16]='\0'; shuju2[0]='T';shuju2[1]=':';shuju2[4]='.';shuju2[7]='C';shuju2[8]='';shuju2[9]='';shuju2[11]='H';shuju2[12]=':';shuju2[15]='C';shuju2[16]='\0'; }/*****初始化DS18B20*****/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;Delay(8);//稍做延時DQ=0;//單片機將DQ拉低Delay(80);//精確延時,大于480usDQ=1;//拉高總線Delay(14);x=DQ;//稍做延時后,如果x=0那么初始化成功,x=1那么初始化失敗Delay(20);}/*****讀一個字節(jié)*****/unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號dat>>=1;DQ=1;//給脈沖信號if(DQ)dat|=0x80;Delay(4);}return(dat);}/*****寫一個字節(jié)*****/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;}}voidTmpchange(void)//發(fā)送溫度轉(zhuǎn)換命令{Init_DS18B20();WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0x44);//啟動溫度轉(zhuǎn)換}/*****讀取溫度*****/unsignedintReadTemperature(void){unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Tmpchange();Init_DS18B20();WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0xBE);//讀取溫度存放器a=ReadOneChar();//讀低8位b=ReadOneChar();//讀高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*100+0.5;//放大10倍輸出并四舍五入return(t);}/*****數(shù)據(jù)轉(zhuǎn)換子程序*****/Disp_Temperature()//顯示溫度{e=ReadTemperature();//獲取溫度值m=e/100; //溫度整數(shù)位a=e/1000; //計算得到溫度十位數(shù)字shuju2[2]=ASCII_NUM[a];//把計算得到的數(shù)放到顯示的數(shù)組里b=e/100-a*10;//計算得到溫度個位數(shù)字shuju2[3]=ASCII_NUM[b]; //把計算得到的數(shù)放到顯示的數(shù)組里d=e%10;//計算得到溫度小數(shù)點后一位shuju2[6]=ASCII_NUM[d]; //把計算得到的數(shù)放到顯示的數(shù)組里c=(e%100)/10;//計算得到溫度小數(shù)點后兩位shuju2[5]=ASCII_NUM[c]; //把計算得到的數(shù)放到顯示的數(shù)組里shuju2[13]=ASCII_NUM[shangxian/10]; //計算得到上限十位,并把計算得到的數(shù)放到顯示的數(shù)組里shuju2[14]=ASCII_NUM[shangxian%10]; //計算得到上限個位,并把計算得到的數(shù)放到顯示的數(shù)組里 if(m>=shangxian){jdq4=0;shuju1[14]='N';}//溫度不在范圍內(nèi)接通繼電器else{jdq4=1;shuju1[14]='F';}j4=jdq4;}/*****初始化溫度檢測子程序*****/Disp_Temperature1()//顯示溫度{e=ReadTemperature();//獲取溫度值a=e/1000; //計算得到溫度十位數(shù)字shuju2[2]=ASCII_NUM[a];//把計算得到的數(shù)放到顯示的數(shù)組里b=e/100-a*10;//計算得到溫度個位數(shù)字shuju2[3]=ASCII_NUM[b]; //把計算得到的數(shù)放到顯示的數(shù)組里d=e%10;//計算得到溫度小數(shù)點后一位shuju2[6]=ASCII_NUM[d]; //把計算得到的數(shù)放到顯示的數(shù)組里c=(e%100)/10;//計算得到溫度小數(shù)點后兩位shuju2[5]=ASCII_NUM[c]; //把計算得到的數(shù)放到顯示的數(shù)組里shuju2[13]=ASCII_NUM[shangxian/10]; //計算得到上限十位,并把計算得到的數(shù)放到顯示的數(shù)組里shuju2[14]=ASCII_NUM[shangxian%10]; //計算得到上限個位,并把計算得到的數(shù)放到顯示的數(shù)組里 m=e/100; //溫度整數(shù)位}/*****顯示子程序*****/Disp(){LCD_Write_String(0,0,shuju1);LCD_Write_String(0,1,shuju2);}/*****初始化顯示*****/voidcsh(){intww=1,i;while(ww){i++; Disp_Temperature1();//初始化溫度檢測LCD_Write_String(0,0,"Welcome"); LCD_Write_String(0,1,""); if(i>=50) ww=0;}LCD_Write_String(0,0,"1:F2:F3:F4:F"); LCD_Write_String(0,1,"T:CH:C");IT1=1;//INT1下降沿觸發(fā)EX1=1;//外部中斷允許EA=1;//開總中斷IRIN=1;//I/O口初始化}/**********************************************************/{unsignedchari;while(x--){for(i=0;i<13;i++){}}}/**********************************************************/voidbeep(){unsignedchari;BEEP=0;for(i=0;i<100;i++){delay1(20);}BEEP=1;//關(guān)閉蜂鳴器}/**********************************************************/voidIR_IN()interrupt2using0{unsignedcharj,k,N=0;EX1=0; delay1(15); if(IRIN==1){ EX1=1; return; }//確認(rèn)IR信號出現(xiàn)while(!IRIN)//等IR變?yōu)楦唠娖?,跳過9ms的前導(dǎo)低電平信號。{ delay1(1); } for(j=0;j<4;j++)//收集四組數(shù)據(jù) { for(k=0;k<8;k++)//每組數(shù)據(jù)有8位 { while(IRIN)//等IR變?yōu)榈碗娖?,跳過4.5ms的前導(dǎo)高電平信號。 { delay1(1); } while(!IRIN)

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論