溫濕度檢測儀_第1頁
溫濕度檢測儀_第2頁
溫濕度檢測儀_第3頁
溫濕度檢測儀_第4頁
溫濕度檢測儀_第5頁
已閱讀5頁,還剩58頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

個人資料整理 僅限學習使用前言溫度和濕度的檢測和控制是許多行業的重要工作之一,不論是貨品倉庫、生產車間,都需要有規定的溫度和濕度,然而溫度和濕度卻是最不易保障的指標,針對這一情況,研制可靠且實用的溫度和濕度檢測與控制系統就顯得非常重要。溫濕度的檢測與控制是工業生產過程中比較典型的應用之一 [1],隨著傳感器在生產和生活中的更加廣泛的應用。在生產中,溫濕度的高低對產品的質量影響很大。由于溫濕度的檢測控制不當,可能使我們導致無法估計的經濟損失。為保證日常工作的順利進行,首要問題是加強生產車間內溫度與濕度的監測工作,但傳統的方法過于粗糙,通過人工進行檢測,對不符合溫度和濕度要求的庫房進行通風、去濕和降溫等工作。這種人工測試方法費時費力、效率低,且測試的溫度及濕度誤差大,隨機性大。由于溫濕度傳感器及其控制系統是20世紀90年代才興起的行業,因此設計出一款精度高、穩定性好、成本低的溫濕度檢測控制系統具有一定的市場前景。此研究工程采用具有高精度,防干擾等優點的傳感器,結合單片機嵌入式系統技術,設計完成的系統具有易攜帶、低功耗等特點,從而克服了傳統溫濕度檢測系統需要復雜的校準過程和精度較低的缺點。本設計所介紹溫濕度檢測儀與傳統的溫濕度計相比具有讀數方便,測溫濕范圍廣,測溫濕準確,其輸出溫濕度度采用LED數碼管顯示,該設計控制器使用單片機,數字溫濕度傳感器 DS18B20,DHT11,用LED數碼管,實現溫濕度度顯示,能準確達到要求。b5E2RGbCAP本次論文只要有四章,其中第一章主要介紹了本次設計的主要內容;第二章主要是介紹了主要的元器件以及硬件設計及其內容;第三章主要介紹了軟件流程的過程;第四章主要軟硬件的調試。 p1EanqFDPw第1章 緒論1.1設計任務設計一個基于單片機的測溫濕度控制系統,用單片機作為主控芯片,通過溫濕度傳感器監控對溫濕度進行實時性控制,通過設置警戒溫度,利用單片機控制,當溫濕度高于設定溫濕度基準值時啟動報警,以達到控制的目的。DXDiTa9E3d0/61個人資料整理 僅限學習使用設計的功能如下:<1)實現LED數碼管顯示;<2)能通過按鍵選擇工作模式和基準值的設定。設計技術指標如下:<1)顯示三位溫度三位濕度;<2)溫度采集精度為±0.5℃,濕度采集精度為±5%。1.2原理描述本設計主要由電源模塊、溫濕度采集模塊、按鍵模塊、報警模塊、單片機控制模塊以及數據顯示模塊幾部分組成。如下圖1-1所示:RTCrpUDGiT溫濕度度采集模塊單數據顯示模塊片機按鍵模塊控制模報警模塊塊電源模塊圖1-1 系統總體結構框圖1.2.1 總體方案的設計用溫溫度傳感器DS18B20,DHT11主要實現檢測溫度、濕度的檢測,將溫度濕度[2]信號通過傳感器進行信號的采集并轉換成數字信號,再運用單片機進行數據的分析和處理,為顯示和報警電路提供信號。設定模塊主要為設定溫濕度報警的閾值,其流程圖 1-1所示:5PCzVD7HxA1.2.2 系統原理溫濕度采集模塊使用的是 DS18B20,DHT11數字溫濕度傳感器,它使用單總線方式,接口簡單,而且無需另外校準,完全能夠滿足日常環境溫濕度的檢測要求。jLBHrnAILg數據處理模塊使用的是 AT89S51單片機,其完成溫濕度數據的采集、運算和邏輯控制的功能。其余模塊主要由按鍵、 LED和蜂鳴器構成。其中按鍵用于用戶設定溫濕度1/61個人資料整理 僅限學習使用閾值,LED用于數據顯示,蜂鳴器用于提示用戶。按照系統的設計功能所要求的,溫濕度監控系統原理圖如下圖 1-2所示:xHAQX74J0X溫濕度傳感器LED溫濕度顯示 單片機 蜂鳴器按鍵模塊圖1-2 溫濕度監控系統原理圖單片機作為主控制器,主要負責處理由溫濕度傳感器送來數據,并把處理好的數據送向顯示器模塊,溫濕度傳感器主要用來采集周圍的環境參數,并把所采集到得數據送向單片機,按鍵電路主要是用來完成單片機的復位操作和溫濕度初始值的設定。蜂鳴器電路就是用三極管來實現的,用來判斷周圍的溫度或者濕度是否超出設定數值,顯示電路主要用來顯示當前的溫濕度。 LDAYtRyKfE1.3整體方案的論證1.3.1 溫濕度檢測電路方案一:選用DS18B20溫度傳感器和 HS1101濕度傳感器。DS18B20是一線式數字溫度傳感器,具有獨特的單線式接口方式,測量范圍在- 55℃~125℃,10℃~85℃,誤差為0.5℃。最高精度可達0.0625℃。HS1101是電容式濕度傳感器,可測相對濕度范圍在0%~100%RH,誤差為2%RH。Zzz6ZB2Ltk方案二:選用DHT11作為溫濕度檢測模塊。DHT11是一款數字輸出的復合傳感器,包含一個電阻式感濕元件和NTC式溫度檢測元件,可測20~90%RH濕度,誤差5%RH,0~50℃,誤差2℃。dvzfvkwMI1由于 HS1101所構成的測濕度電路對電阻的精度要求高并電路繁瑣,而DHT11溫度精度達不到要求,所以取兩者方案優點用 DS18B20測溫度和 DHT11測濕度來完成本設計。rqyn14ZNXI1.3.2 利用單片機實現控制系統當今,單片機的技術已經非常成熟了,它集成度高、功能強、存儲量大、速度快、抗干擾性強和指令豐富等的優點,使它的應用遍及各個領域。本文設計的系統就是單片機應用于溫濕度控制的一個例子,其優點如下: EmxvxOtOco2/61個人資料整理 僅限學習使用<1)片內存儲容量越來越大;<2)抗干擾性好,可靠性高;<3)芯片引線齊全,容易擴展;<4)運行速度高,控制功能強。<5)單片機內部的數據信息保存時間很長,有的芯片可以達到100年以上。本系統是一種高精度、測控速度快、測控溫度范圍廣的應用性比較強的基于單片機的溫度測控系統。由于本系統對單片機的資源要求不高,故選用了廉價的51單片機AT89S51,大大提高了本系統的性價比。 SixE2yXPq51.4本章小結本章詳細介紹了本次設計的主要任務,以及對于所要實現的內容加以分析。第2章 溫濕度檢測儀的硬件設計單片機是整個系統的控制中樞,它指揮外圍器件協調工作,從而完成特定的功能,硬件實現上采用模塊化設計,每一模塊只實現一個特定功能,最后再將各個模塊搭接在一起,這種設計方法可以降低系統設計的復雜性,本系統主要硬件設計包括電源模塊、溫濕度采集模塊、按鍵模塊、報警模塊、單片機控制模塊以及數據顯示模塊。 6ewMyirQFL2.1器件的介紹2.1.1 溫濕度傳感器溫度傳感器DS18B20DS18B20溫度傳感器[3]是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,它是單線數字溫度傳感器,即“一線器件”,其具有獨特的優點:kavU42VRUs<1)采用單總線的接口方式與微處理器連接僅需要一條口線即可實現微處理器與 DS18B20的雙向通訊。單總線具有經濟性好,抗干擾能力強,適合于惡劣環境的現場溫度測量,使用方便等優點,使用戶可輕松地組建傳感器網絡,為測量系統的構建引入全新概念。 y6v3ALoS893/61個人資料整理 僅限學習使用<2)測量溫度范圍寬測量精度高 DS18B20的測量范圍為-55℃~+125℃;在-10~+85℃范圍內,精度為±0.5℃。M2ub6vSTnP<3)在使用中不需要任何外圍元件<4)持多點組網功能多個DS18B20可以并聯在惟一的單線上,實現多點測溫。<5)供電方式靈活DS18B20可以通過內部寄生電路從數據線上獲取電源。因此,當數據線上的時序滿足一定的要求時,可以不接外部電源,從而使系統結構更趨簡單,可靠性更高。0YujCfmUCw(6>測量參數可配置DS18B20的測量分辨率可通過程序設定 9~12位。(7>負壓特性電源極性接反時,溫度計不會因發熱而燒毀,但不能正常工作。(8>掉電保護功能DS18B20內部含有EEPROM,在系統掉電以后,它仍可保存分辨率及報警溫度的設定值。DS18B20具有體積更小、適用電壓更寬、更經濟、可選更小的封裝方式,更寬的電壓適用范圍,適合于構建自己的經濟的測溫系統。 eUts8ZQVRdDS18B20外部結構如圖2-1所示圖2-1DS18B20引腳圖1.GND為電源地;4/61個人資料整理 僅限學習使用2.DQ為數字信號輸入/輸出端;3.VDD為外接供電電源輸入端;DS18B20的使用注意DS18B20雖然具有測溫系統簡單 [4]、測溫精度高、連接方便、占用口線少等優點,但在實際應用中也應注意以下幾方面的問題: sQsAEJkW5TDS18B20從測溫結束到將溫度值轉換成數字量需要一定的轉換時間,這是必須保證的,不然會出現轉換錯誤的現象。GMsIasNXkA在實際使用中發現,應使電源電壓保持在5V左右,若電源電壓過低,會使所測得的溫度精度降低。3. 較小的硬件開銷需要相對復雜的軟件進行補償,由于 DS1820與微處理器間采用串行數據傳送,因此,在對 DS1820進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。在使用 PL/M、C等高級語言進行系統程序設計時,對DS1820操作部分最好采用匯編語言實現。 TIrRGchYzg在DS18B20的有關資料中均未提及單總線上所掛DS18B20數量問題,容易使人誤認為可以掛任意多個DS18B20,在實際應用中并非如此,當單總線上所掛DS18B20超過8個時,就需要解決微處理器的總線驅動問題,這一點在進行多點測溫系統設計時要加以注意。7EqZcWLZNX在DS18B20測溫程序設計中,向DS18B20發出溫度轉換命令后,程序總要等待DS18B20的返回信號,一旦某個DS18B20接觸不好或斷線,當程序讀該DS18B20時,將沒有返回信號,程序進入死循環,這一點在進行 DS18B20硬件連接和軟件設計時也要給予一定的重視。 lzq7IGf02E濕度傳感器DHT11DHT11為溫濕度傳感器[5],由于DHT11測量的溫度精度不符合本設計,本設計只采用DHT11測量濕度部分,把 DHT11當做濕度傳感器運用。zvpgeqJ1hkDHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器,它應用專用的溫濕度傳感和數字模塊采集技術,具有很高的穩定性和可靠性,DHT11傳感器內含一個 NTC測溫和一個電阻式感濕元件,并與一個 8位的高性能單片機相連接,在精確的濕度校驗室中 DHT11傳感器進行過校準,以程序的形式校準系數儲存在 0TP內存中,檢測信號的時候,在處理過程中傳感器內部要調用這些校準系數,采用單線制的串行接口,使系統集成可以有較低5/61個人資料整理 僅限學習使用的功耗,而且更加簡單快速,信號傳輸距離超過 20M,作為一個數字溫濕度傳感器DHT11具有響應快速、抗干擾強、性價比高等優點。 NrpoJac3v1典型的應用電路如圖 2-2所示:圖2-2典型的應用電路DHT11實物圖如圖2-3所示:圖2-3DHT11實物圖DHT11引腳說明如表2-1所示表2-1DHT11引腳說明pin 名稱 注釋1 VDD 供電3-5.5V6/61個人資料整理 僅限學習使用2DATA串行數據,單總線3NC空腳,懸空4GND接地,電源負極封裝信息如圖2-4:如圖2-4DHT11的封裝信息2.1.2 單片機[6]是美國ATMEL公司生產的低功耗、高性能CMOS的8位單片機,AT89S51片內含4K的可編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準 8051指令系統及引腳,它集 Flash程序存儲器既可在線編程(ISP>,也可用傳統方法進行編程及通用 8位微處理器于單片機芯片中,ATMEL公司的功能強大,低價位 AT89S51單片機可為您提供許多高性價比的應用場合,可靈活應用于各種控制的領域。引腳圖如下圖 2-5所示:1nowfTG4KI7/61個人資料整理 僅限學習使用圖2-5AT89S51引腳圖8051單片機的引腳[7]主電源引腳VCC<40腳):接+5V電源正端GND<20腳):接+5V電源地端一般VCC和GND間應接高頻去耦電容和低頻濾波電容。2.外接晶體或外部振蕩器引腳XTAL1<19腳):接外部晶振的一個引腳。在單片機內部,它是一個反相放大器的輸入端,這個放大器構成了片內振蕩器 OSC。當采用外部振蕩器時,此引腳應接地。fjnFLDa5ZoXTAL2<18腳):接外部晶振的另一個引腳。在片內接至反相放大器的輸出端和內部時鐘電路的輸入端。當采用外部振蕩器時,此腳接外部振蕩器的輸出端。tfnNhnE6e5控制信號線RST/VPD<9腳):復位信號輸入端,復位 /掉電時內部 RAM的備用電源輸入8/61個人資料整理 僅限學習使用端ALE/PROG<30腳):地址鎖存允許/編程脈沖輸入。用ALE鎖存從P0口輸出的低8位地址;在對片內EPROM編程時,編程脈沖由此輸入。HbmVN777sLPSEN<29腳):外部程序存儲器讀選通信號,低電平有效。EA/VPP<31腳):訪問外部存儲器允許 /編程電壓輸入。EA為高電平時,訪問內部存儲器;低電平時,訪問外部存儲器。對片內 EPROM編程時,此腳接21V編程電壓。V7l4jRB8Hs3.多功能I/O口引腳8051單片機設有 4個雙向I/O口<P0、P1、P2、P3),每一組 I/O口線都可以獨立地用作輸入或輸出口,其中: 83lcPA59W9P0口<32~39腳)——雙向口<三態),可作為輸入/輸出口,可驅動 8個LSTTL門電路。實際應用中常作為分時使用的地址 /數據總線口,對外部程序或數據存儲器尋址時低 8位地址與數據總線分時使用 P0口:先送低8位地址信號到P0口,由地址鎖存信號ALE的下降沿將地址信號鎖存到地址鎖存器后,再作為數據總線的口線對數據進行輸入或輸出。mZkklkzaaPP1口<1~8腳)——準雙向口<三態),可驅動4個LSTTL門電路。用作輸入線時,口鎖存器必須由單片機先寫入“1”,每一位都可編程為輸入或輸出線。AVktR43bpwP2口<21~28)——準雙向口<三態),可驅動 4個LSTTL門電路。可作為輸入/輸出口,實際應用中一般作為地址總線的高 8位,與P0口一起組成16位地址總線,用于對外部存儲器的接口電路進行尋址。 ORjBnOwcEdP3口<10~17腳)——準雙向口<三態),可驅動 4個LSTTL門電路。雙功能口,作為第一功能使用時,與 P1口一樣;作為第二功能使用時,每一位都有特定用途,其特殊用途如表 2-2所示:2MiJTy0dTT表2-2 第二功能端口引腳 第二功能 注 釋P3.0 RXD 串行口數據接收端P3.1 TXD 串行口數據發送端9/61個人資料整理 僅限學習使用P3.2INT0外中斷請求0P3.3INT1外中斷請求1P3.4T0定時/計數器0外部計數信號輸入P3.5T1定時/計數器1外部計數信號輸入P3.6WR外部RAM寫選通信號輸出P3.7RD外部RAM讀選通信號輸出優越性AT89S51提供以下的功能標準[8]:4K字節閃爍存儲器,128字節隨機存取數據存儲器,2個16位定時/計數器,32個I/O口,1個串行通信口,1個5向量兩級中斷結構,另外,AT89S51還可以進行0HZ的靜態邏輯操作,并支持兩種軟件的節電模式,閑散方式停止中央處理器的工作,可允許隨機存取數據存儲器、定時/計數器、串行通信口及中斷系統繼續工作。掉電方式保存隨機存取數據存儲器中的內容,但震蕩器停止工作并禁止其它所有部件的工作直到下一個復位,在AT89C51上新增加的功能使AT89S51性能有了較大提升,它的價格甚至更低,它的工作頻率可達33MHz,比AT89C51的工作頻率更高,ISP在線編程功能的優越性在于它不必要將芯片從工作狀態下分離,特別是在改寫存儲器內的程序,這是一個相當方便簡單的功能,它不需要像 AT89C51那樣外接看門狗計時器單元電路,由于它內部具有雙工 UART串行通道內部集成看門狗計時器,它具有全新的加密算法,大大加強的程序的保密性,有效的保護知識產權不被侵犯 ,它向下完全兼容51全部字系列產品。gIiSpiue7A2.1.3LEDLED數碼管實際上是由七個發光管組成 8字形構成的,加上小數點就是 8個。這些段分別由字母 a,b,c,d,e,f,g,dp 來表示。當數碼管特定的段加上電壓后,這些特定的段就會發亮,以形成我們眼睛看到的 字樣了。如:顯示一個“2”字,那么應當是 a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED數碼管有一般亮和超亮等不同之分,也有 0.5寸、1寸等不同的尺寸。小尺寸數碼管的顯示筆畫常用一個發光二極管組成,而大尺寸的數碼管由二個或多個發光二極管組成,一般情況下,單個發光二極管的管壓降為 1.8V左右,電流不超過 30mA。發光二極管的陽極連接到一起連接到電源正極的稱為共陽10/61個人資料整理 僅限學習使用數碼管,發光二極管的陰極連接到一起連接到電源負極的稱為共陰數碼管。常用LED數碼管顯示的數字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。管腳圖如圖2-6所示:uEh0U1Yfmh圖2-6LED的管腳圖及共陰共陽內部內部電路2.1.4 三端穩壓管穩壓電路是用三端穩壓芯片構成的,本設計選用的是三端穩壓集成電路lm7805是+5V穩壓芯片。電子產品中,常見的三端穩壓集成電路有正電壓輸出的 lm78×× 系列和負電壓輸出的 lm79××系列。顧名思義,三端 IC是指這種穩壓用的集成電路,只有三條引腳輸出,分別是輸入端、接地端和輸出端。它的樣子象是普通的三極管,TO-220的標準封裝,也有lm9013樣子的TO-92封裝。本設計采用的是TO-220封裝的。管腳圖如圖2-7所示:IAg9qLsgBXLM78xx LM79xx圖2-7三端穩壓管11/61個人資料整理 僅限學習使用2.1.5 蜂鳴器蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。WwghWvVhPE1壓電式蜂鳴器 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發光二極管。多諧振蕩器由晶體管或集成電路構成。當接通電源后 <1.5~15V直流工作電壓),多諧振蕩器起振,輸出 1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發聲。壓電蜂鳴片由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。 asfpsfpi4k2電磁式蜂鳴器 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發聲。ooeyYZTjj1本設計采用壓電式蜂鳴器,如圖 2-8所示圖2-8 蜂鳴器2.2主要模塊的電路2.2.1 單片機最小系統單片機的最小系統 [9]是指使單片機能運行程序、正常工作的最簡單電路系統,是保證單片正常啟動、開始工作的必須電路,缺一不可。單片機最小系統一般由單片機、程序存儲器、時鐘電路和復位電路組成。對于 8051單片機,由于片內有程序存儲器,所以其最小系統除了單片機本身外,只需外接時鐘電路12/61個人資料整理 僅限學習使用與復位電路即可。 BkeGuInkxI復位及復位電路8051單片機的復位復位是使 CPU和系統中其他功能部件都處于一個確定的初始狀態,并從這個狀態開始工作。8051單片機在RST輸入端<9腳)出現高電平時實現系統的復位和初始化。在振蕩器運行的情況下,要實現復位操作,必須使 RST端的高電平至少保持兩個機器周期 <24個振蕩周期)。CPU在第二個機器周期內執行復位操作,以后每一個機器周期重復一次,直到 RST降為低電平。復位期間不產生ALE及/PSEN信號。復位的內部操作使SP為07H,各端口<P0~P3)都為0FFH,特殊功能寄存器都為0,但不影響RAM的狀態。當復位結束<RST變為低電平)后,CPU從0000H開始執行程序。PgdO0sRlMo值得注意的是:8051單片機通電后并不運行ROM里的程序,只有正常復位后,才能開始工作。復位電路單片機的復位分為上電自動復位、按鍵手動復位兩種和看門狗強制復位三種等。上電復位通常利用電容的充放電來實現,按鍵復位則可分為按鍵脈沖復位和按鍵電平復位兩種,看門狗復位則通過外接看門狗電路或軟件看門狗程序實現。常見的上電復位和按鍵復位電路如圖2-9所示。3cdXwckm15(a>上電復位 (b> 按鍵脈沖復位 (c> 按鍵電平復位圖2-9 復位電路圖中,(a>為最簡單的單片機復位電路。當系統上電時,由于電容 C兩端的電壓不會瞬間改變,所以 8051的第9腳復位端會得到短暫的高電平,隨后,電容通過電阻 R進行充電,經過一段時間后, RST端變為低電平。當電容的充放13/61個人資料整理 僅限學習使用電時間常數RC足夠大,能保證在RST端得到超過兩個機器周期的高電平時,單片機完成復位操作,開始正常運行ROM里的程序[10]。h8c52WOngM(b>為按鍵脈沖復位電路。當系統上電時,單片機并不復位,不能運行 ROM里的程序,只有當系統上電后,按一下復位按鍵 <圖中未畫出),反相器輸出超過兩個機器周期的高電平,才能完成系統復位。 v4bdyGious(c>為包括上電復位功能的按鍵電平復位電路,是最常見的單片機復位電路之一。當系統上電時,單片機的 RST端得到兩個以上機器周期的高電平,隨后電容C經電阻R充電,變為低電平,完成單片機的上最復位。在單片機的運行過程中,如果由于外界干擾等因素的影響,使單片機的程序跑飛,則可以通過按下按鍵K,使單片機完成復位操作。當按下 K鍵時,電容兩端短路,RST接到電源VCC變為高電平,同時電容迅速放電,使電容的兩個極板電位一致。釋放按鍵K后,電容C通過電阻R充電,經過兩個以上機器周期的時間后,RST端變為低電平,完成單片機的復位。J0bm4qMpJ9本系統采用的是上電復位,充電之后,RST被拉至高電平,單片機進入工作狀態。時鐘電路時鐘電路[11]用于產生單片機的基本時鐘信號。 8051的時鐘信號可由內部振蕩器產生,也可由外部電路直接提供。內部振蕩器的輸入和輸出腳分別為XTAL1和XATL2,由XTAL2給單片機內部電路提供時鐘信號。當時鐘信號由外部電路提供時,外部時鐘引入 XTAL2,而XTAL1腳接地。兩種時鐘信號的連接電路如圖2-10所示。XVauA9grYP圖2-10時鐘電路AT89S51中有一個用于構成內部正當其的放大器,引腳 XTAL1和XTAL2分別是放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或者陶瓷諧振器構成自激振蕩器,他們與電容 C1,C2接在放大器的反饋電路中構14/61個人資料整理 僅限學習使用成并聯震蕩電路,雖然電容沒有一個嚴格的要求,但是電容的大小會輕微影響振蕩頻率的高低、溫度穩定性以及振蕩器工作的穩定性。 bR9C6TJscw本系統采用晶振電路[12]。單片機系統都有晶振,在單片機系統中晶振的作用非常大,全稱叫做晶體振蕩器,它結合單片機內部電路產生所需時鐘頻率,單片機晶振提供的時鐘頻率越高,那么單片機的運行速度就會越快,單片機的一切指令執行都是建立在單片機晶振所提供的時鐘頻率。在通常的工作條件下,普通的晶振頻率的絕對精度可以達到百萬分之五十,高級晶振精度更高,有些晶振還可以由外加的電壓在一定范圍內調整頻率,稱為壓榨振蕩器,在共振的狀態下晶振用一種能把電能和機械能相互轉化的晶體工作,以提供穩定,精確的單頻振蕩。pN9LBDdtrd單片機晶振的作用是為系統提供及本周的時鐘信號,通常一個系統共用一個晶振,以便于各部分保持同步,有些通訊系統的基頻和射頻使用不同的晶振,而是通過電子調整頻率的方法保持同步。晶振通常與鎖相環電路配合使用,以提供系統所需的時鐘頻率,可以用于同一個晶振項鏈的不同鎖相環來提供的。單片機 AT89S51的晶振電路采用無源晶振,微調電容取 22pf。圖2-11即為晶振電路。 DJ8T7nHuGT圖2-11晶振電路2.2.2 報警模塊微型計算機控制系統中 [13],為了安全起見,對于一些重要的參數或系統,15/61個人資料整理 僅限學習使用都設定有緊急狀態報警系統,以便于提醒操作人員注意,或者采取緊急措施,本設計采用把計算機采集的數據進行數據處理、標度變換、數字濾波之后,與該參數上下限與給定值進行比較,如果高于上限值則進行報警,否則就作為采樣的正常值,進行顯示。QF81D7bvUA本設計采用峰鳴音報警電路。如圖2-12所示。蜂鳴器額定電流≤30mA,而對于AT89S51單片機,P3口的灌電流為15mA,由此可見,僅靠單片機的P3口電流是不能驅動蜂鳴器的,必須使用晶體管放大電路,為了使單片機的功率更小,所以使用 PNP型晶體管,當外部環境的溫度或者濕度超過預設值的時候,基級變為低電平,蜂鳴器導通鳴叫。 4B7a9QFw9h圖2-12報警模塊2.2.3 數據顯示模塊顯示器常用作單片機最簡單的輸出設備,用以顯示單片機的運行結果和運行狀態等。常用的顯示器主要有 LED和LCD,它們都具有耗電少、成本低、線路簡單、壽命長等優點,廣泛應用于單片機顯示數字量的場合。設計中采用LED顯示器。ix6iFA8xoX對LED管的顯示可分為靜態和動態兩種。本設計采用動態顯示,其優點為:1.能降低顯示器的功耗。2.能大大減少顯示器的外部接線,給安裝調試帶來方便。wt6qbkCyDELED動態顯示原理:由于各個數碼管的段選線并聯,段選碼的輸出對各個數碼管都是相同。因此同一時刻如果各個數碼管的位選線都處于選通狀態的16/61個人資料整理 僅限學習使用話,四位LED將顯示相同字符。若要各位LED顯示出與本位相應的顯示字符,就必須采用掃描顯示方式。即在某一時刻只讓某一位的位選線處于選通狀態而其它各位的位選線處于關閉狀態.同時段選線上輸出相應位要顯示字符的代碼這樣同一時刻四位LED中只有選通的那一位顯示出字符,而其它位則是熄滅的。此循環下去就可以使各位數碼管顯示出將要顯示的字符。顯然,這些字符是在不同時刻出現的,而且同一時刻只有一位顯示其它各位熄滅,但由于各位數碼管的通斷時間是非常短的,且人眼有視覺暫留現象,只要每位顯示間隔足夠短則可造成多位同時亮的假象達到顯示的目的。 Kp5zH46zRk為了顯示相應的字符,必須將該字符轉換成相應的段選碼。這種轉換也稱為譯碼。譯碼可以采用硬件的方法,也可以采用軟件的方法。設計中采用軟件的方法進行譯碼。Yl4HdOAA61在總體電路中,顯示電路是設計的主要部分[14],通過單片機的P0口,控制四位七段數碼管的段碼,而數碼管的位碼由P2.0、P2.2、P2.4、P2.6四個端口來分別控制顯示數字的小數位、個位、十位、百位和符號位。在位碼控制端通過單片機P2口輸出的高低電平來選通數碼管的顯示位。ch4PJx4BlI數據顯示模塊選用LED數碼管顯示,電路圖如圖2-13所示:圖2-13 數據顯示模塊2.2.4 溫濕度采集模塊DS18B20電源供電方式17/61個人資料整理 僅限學習使用DS18B20可以采用外部電源供電和寄生電源供電兩種模式。外部電源供電模式是將DS18B20的GND直接接地,DQ與單總線相連作為信號線, VDD與外部電源正極相連。如圖 2-14所示qd3YfhxCzo圖2-14 溫度采集模塊DHT11是數字型溫濕度傳感器,可直接以數字方式傳輸所采集的當前環境溫濕度,DHT11采用的是單總線通信,因此只需將單片機的與 DHT11的通信接口連接就可以實現數據的采集和傳送,相對于其他電路來說比較簡單。如圖 2-15所示:E836L11DO5圖2-15濕度采集模塊2.2.5 按鍵模塊鍵盤是標準的輸入設備,實現鍵盤有兩種方案:一是采用現有的一些芯片實現鍵盤掃描,如 8279、CII451、IMC9768等,二是用軟件實現鍵盤掃描。使用現成的芯片可以節省 CPL的開銷,但增加了成本,而用軟件實現具有較強的靈活性,也只需要很少的 CPL開銷,可以節省開發成本。本文便使用軟件實現鍵盤的掃描。S42ehLvE3M常見的鍵盤可分為獨立按鍵式鍵盤和行列掃描式鍵盤 [15]。獨立按鍵式鍵盤應用在需要少量按鍵的情況,按鍵和單片機的 I/O 口線直接連接。而行列掃描式鍵盤用在按鍵需求較多的情形下,考慮到面向大多數人群,需操作簡,所以18/61個人資料整理 僅限學習使用采用獨立按鍵式鍵盤。501nNvZFis本次設計采用的是 4個獨立式鍵盤來控制對基準值的調整 S1,S2,S3,S4,分別為加,減,切換,確定四個功能,如圖 2-17所示:jW1viftGw9圖2-17 按鍵模塊2.2.6 電源模塊用lm78/lm79系列三端穩壓IC來組成穩壓電源所需的外圍元件極少,電路內部還有過流、過熱及調整管的保護電路,使用起來可靠、方便,而且價格便宜。該系列集成穩壓IC型號中的lm78或lm79后面的數字代表該三端集成穩壓電路的輸出電壓,如lm7806表示輸出電壓為正6V,lm7909表示輸出電壓為負9V。xS0DOYWHLP本設計采用lm7805為電路提供正5V電壓,如圖2-18所示:圖2-18電源模塊2.3主控制電路和測溫濕控制電路本次硬件的核心就是 AT89S51,其他的外圍電路都是圍繞它所設計的。數字溫濕度傳感器 DS18B20,DHT11的DQ,DATA口分別連接單片機 AT89S51的19/61個人資料整理 僅限學習使用P2.1,P3.7 口。顯示電路就是把 LED和單片機的P0口分別相連,當溫度或濕度高于預設值的時候蜂鳴器蜂鳴報警,增加單片機的輸出能力,增加單片機的輸出電流,故使用電阻排來完成。 LOZMkIqI0w2.4本章小結本章節主要介紹了硬件設計的元器件及其各部分電路的主要設計方法,并且詳細的給出了各個模塊 <電源模塊、溫濕度采集模塊、按鍵模塊、報警模塊、單片機控制模塊以及數據顯示模塊)的電路設計。 ZKZUQsUJed第3章溫濕度檢測儀的軟件設計軟件是整個控制系統設計的另一個重要環節,靈活性很強,可以根據系統的要求和功能而變化。在硬件結構一定的情況下,只要改變相應的軟件就能實現一些不同的功能,單片機的智能性都是由軟件實現。 dGY2mcoKtT在本系統中,軟件結構采用模塊化設計,各功能程序分別編寫和調試。各模塊調試成功后,再將所有模塊連接起來,構成系統的軟件。這樣的設計有利于程序代碼的優化,而且便于編程、調試和維護。 rCYbSWRLIA3.1系統軟件設計的原則應用系統中的應用軟件是根據系統功能要求設計的,應可靠實現系統的各種功能在本系統中,軟件設計要求做到以下幾點: FyXjoFlMWh(1>軟件結構清晰、簡捷、流程合理。(2>并功能程序實現模塊化,子程序化。這樣,既便于調試,連接,又便于移植,修改。(3>程序存儲區,數據存儲區要合理規劃,既能節約內存容量,又使操作方便。(4>運行狀態實現標志化管理。這個功能程序運行狀態,運行結果以及運行要求都要設置狀態標志以便查詢,程序的轉移、運行、控制都可通過狀態標志條件來控制。TuWrUpPObX(5>經過調試修改后程序應進行規范化,出去修改的痕跡,以便于交流和借鑒,也為以后的軟件模塊化、標準化打下基礎。 7qWAq9jPqE(6>實現全面軟件抗干擾設計。軟件抗干擾是單片機應用系統提高可靠性的20/61個人資料整理 僅限學習使用有利措施。3.2系統流程圖在主程序中,當系統上電完成,定義寄存器等初始化操作后,首先判斷按鍵是否有按下,并判斷按鍵標志位,根據按鍵標志位顯示溫濕度上限,實時顯示溫濕度及進行報警程序。llVIWTNQFk根據溫濕度監控系統功能,系統軟件流程圖如圖3-1所示;開始初始化按鍵設置子程序溫濕度采集子程序溫濕度處理子程序讀取成功溫濕度數據是報警是否超限顯示溫濕度圖3-1系統軟件流程圖3.3按鍵設置流程圖雖然把按鍵子程序直接放在了主程序中,但是作為控制模塊,按鍵程序仍然是比較重要的模塊。按鍵設置過程中,流程如下圖 3-2所示:yhUQsDgRT121/61個人資料整理 僅限學習使用開始按鍵是否按下S1S2S3S4增加減少切換確定圖3-2按鍵設置流程圖3.4溫濕度采集流程圖溫濕度子程序流程如下圖 3-3,3-4所示:開始初始化從18B20讀字節向18B20寫字節讀取溫度圖3-3DS18B20溫度采集流程圖22/61個人資料整理 僅限學習使用開始定義數據端口,數據端口啟動傳輸函數,連接復位讀寫函數測量濕度函數讀取濕度圖3-4DHT11濕度采集流程圖3.5編程思想本次設計主要是能夠實時顯示出當前確切的溫濕度,并且在高于預設值的時候能夠發出蜂鳴。一旦接通電源,蜂鳴器報警。在程序設計中,分別定義溫濕度參數,根據數據轉換過來的數值,判斷是否超過了預設值。 MdUZYnKS8I3.6本章小結本章節主要介紹了本次設計軟件部分的流程圖和主體編程思想。第4章 系統軟硬件調試4.1硬件調試硬件調試主要是針對電源模塊、溫濕度信號采集處理模塊和單片機控制顯示部分的調試。主要分為兩部分:上電前的調試和上電調試。 09T7t6eTno4.1.1 上電前的調試在上電前,必須確保電路中不存在短路或斷路情況,這一工作是整個調試的第一步,也是非常重要的一個步驟。因為本設計用到多個電源,應該確保每個電源都連接正確。在這部分調試中主要使用的工具是萬用表,用來檢測電路中是否存在斷路或者短路情況等。 e5TfZQIUB5通過萬用表的檢測,沒有發現短路或斷路的地方,且電源電路連接正23/61個人資料整理 僅限學習使用確,則電路基本正常,可以進行下一步的調試。 s1SovAcVQM4.1.2 上電調試在確保硬件電路正常,無異常情況下方可上電調試,上電調試的目的是檢測電路是否接錯,同時還要檢測原理是否正確。 GXRw1kFW5s<1)電源模塊的調試電源模塊先不連接主電路,接上 220V電源后用萬用表檢測輸出電壓,測得±5V電壓正確時才能接入主電路供電。 UTREx49Xj9<2)單片機顯示及按鍵電路的調試編寫一個直接顯示的簡單程序,用按鍵控制顯示值,若顯示正常且按鍵也有效,則說明電路正確。4.2軟件調試在對硬件調試后再對軟件進行調試,因為先對硬件檢查沒有問題的的情況下在對軟件進行調試。軟件調試是通過對用戶程序的匯編、連接、執行來發現程序中存在的語法錯誤與邏輯錯誤并加以排除糾正的過程。程序運行后編輯,查看程序是否有邏輯的錯誤,然后畫出相應的電路圖,導入程序對其進行系統的仿真。8PQN3NDYyP本系統調試采用了ISISProfessional,和Keil軟件,ISISProfessional主要用于系統的仿真,Keil用于程序的檢錯,兩者結合,節省很多時間方便實用。 mLPVzx7ZNw軟件的調試是一個模塊一個模塊地進行的,在每個模塊調通的基礎上,進行最后的聯調,即對主程序進行調試。軟件調試是直接在計算機上進行的,用的是 keil4 軟件。程序編寫出來后要進行編譯,一般都會出現一些小問題,而導致編譯出錯,這就需要進行糾正。 Keil 自帶出錯提示,可以根據錯誤信息進行改正,當然這只是語法錯誤才會發現, 語法完全正確后編譯結果如圖 4-1 所示:AHP35hB02d24/61個人資料整理 僅限學習使用圖4-1keil 編譯圖對于非語法錯誤,keil 是不能發現的,這里就用到 proteus 仿真軟件了將單片機部分的電路搭建起來。將軟件編譯后生成的 HEX文件載入到 proteus中,就可以仿真,測試軟件是否完全正確。 NDOcB141gT4.3整機聯調各部分均測試完成后就可以進行整機連調了,先將所有電路搭建起來。然后下載程序,利用軟件進行下載,其界面如圖 4-2所示:1zOk7Ly2vA圖4-2 程序下載界面25/61個人資料整理 僅限學習使用4.4本章小結本章節介紹了在軟硬件調試中如何調試并達到本設計的基本要求。結 論大學的學習中,畢業設計是一個很重要的環節,是我們步入社會參與社會實踐的很好鍛煉,從最初的選題,開題構思,繪圖,編程,仿真直到完成設計,這中間,查找資料,老師指導,同學交流,編寫程序,直至仿真調試,以及硬件焊接,每一個過程都是一次成長和對自己的一次的檢驗。本次設計是基于單片機的溫濕度設計,包括硬件電路和軟件兩部分。設計初對于單片機的應用并不是很了解,本科學習中初步接觸過 C語言,由于本次設計需要硬件和軟件兩部分,因此我是從軟件部分先開始的,然后才開始硬件電路的設計,是由于軟件的不完美影響了硬件電路設計的不是很美觀。fuNsDv23Kh在軟件設計過程中,我基本是一步步開始學起的,在學習中遇到很多問題,經過老師的指點和同學的討論,我學到了很多編程技巧,同時也掌握了一些編程思想。由于原器件的局限性,硬件電路不是很美觀,其中一些電容和電阻并不是原理圖中設計的大小,但是這并不影響結果,再畫原理圖的過程中我又進一步掌握了protel的基本應用,并有了較為深入的了解。通過本次設計,對于主要芯片AT89S51有了基本的了解,基本掌握了該芯片的基本功能。經過軟件在硬件電路的挑時候,基本功能均能實現,如果把手放在傳感器上面,溫度和濕度會立即發生變化。tqMB9ew4YX參考文獻楊文龍.單片機原理及應用[M].陜西:西安電子科技大學出版社,1995.張洪潤,張亞凡.傳感器技術與應用教程[M].北京:清華大學出版社,2005.彭立,張建洲,王少華.自適應溫度控制系統的研制[J].東北師大學報(自然科學版>,1994,(01>9-11.HmMJFY05dE沙占友.智能集成溫度傳感器原理與應用[M].北京:機械工業出版社,2002.張冬林,李鑫,戴梅.基于DHT11的低成本蠶室溫濕度自動控制系統設計[J]. 現代農業科技,2018,<18):14-15.ViLRaIt6sk26/61個人資料整理 僅限學習使用蔡美琴,張為民.MCS-51系列單片機系統及其應用[M].北京:高等教育出版社,1992.李建民.單片機在溫度控制系統中的應用[J].江漢大學學報,1991,<11):6-7.[8] 何立民.MCS-51系列單片機應用系統設計系統配置與接口技術 [M].北京:航空航天大學出版社,1990.9eK0GsX7H1范風強,蘭嬋麗.單片機語言C51應用實戰集錦[J].電子工業出版社,2005,<10):2-18.naK8ccr8VI劉春起.居室溫濕度監控系統設計[J].石家莊職業技術學院報,2007,<15):4-6.[11] 張杰,趙旭.單片機實驗教案改革初探 [J].實驗科學與技術 2008,6(1>:86-88.[12] 劉東文.嵌入式溫濕度控制器的研究與設計 [J]. 貴州大學學報 ,2007,<9):21-25. B6JgIVV9ao[13]WANGSHX,WUGN,JIANGW,etal.Theprincipleandilluminationappliesoflightemittingdiode[J].LightandLighting,2006,30(4>:32-35.P2IpeFpap5[14]IsaoTakahashi,TemperatureandHumidityMonitoringSystemDevelopment[J].IEEETransonIndAppl,1986,22(5>:820-827.3YIxKpScDM[15]XUTai-zhong,ZOUGao-Ping.Lowpowerdesignofportableelectronicsystem[J].ApplicationofMCUandEmbeddedSystem,2001(8>:11-13.gUHFg9mdSs致謝四年的大學生活接近尾聲,我的畢業設計也順利的完成了,這里首先向我的指導老師表示最誠摯的感謝,同時也感謝那些幫助過我的同學們。 uQHOMTQe79在本次的畢業設計中老師給我提供了極大的幫助,首先在一開始的選題中我便遇到了難題,由于當時選題的時候過于疏忽大意,沒有認真的加以分析,其次,在畢業設計的過程中,老師不厭其煩的為我們講解了畢業設計中可能出現的問題,同時每周要求見面一次,督促我們抓緊時間完成畢業設計,每次見27/61個人資料整理 僅限學習使用面都要求我詳解上周所做的東西以及自己下周要做的東西,有問題或者不合理的地方便為我指出來,加以指導。老師認真負責的態度讓我倍受感激。同時在此也感謝我的同學,解決了許多我在畢業設計中遇到的問題,給了我很大的幫助。在此向所有畢業設計的過程中給予我幫助的老師和同學最誠摯的謝意。IMGWiDkflP附錄附錄一程序#defineset_timerTH0=0xb1。TL0=0xdf。#include<reg51.h>#include<intrins.h>//typedefunsignedcharU8。/*definedforunsigned8-bitsintegervariable無符號8位整型變量*/WHF4OmOgAwtypedefsignedcharS8。/*definedforsigned8-bitsintegervariable有符號8位整型變量*/aDFdk6hhPdtypedefunsignedintU16。/*definedforunsigned16-bitsintegervariable無符號16位整型變量*/ozElQQLi4TtypedefsignedintS16。/*definedforsigned16-bitsintegervariable有符號16位整型變量*/CvDtmAfjiAtypedefunsignedlongU32。/*definedforunsigned32-bitsintegervariable無符號32位整型變量*/QrDCRkJkxhtypedefsignedlongS32。/*definedforsigned32-bitsintegervariable有符號32位整型變量*/4nCKn3dlMXtypedeffloatF32。/*singleprecisionfloatingpointvariable(32bits>單精度浮點數<32位長度)*/ijCSTNGm0EtypedefdoubleF64。/*doubleprecisionfloatingpointvariable(64bits>雙精度浮點數<64位長度)*/vfB1pxanfk//#defineucharunsignedchar28/61個人資料整理 僅限學習使用#defineuintunsignedint#defineData_0_time4voidKeyProcessTask1(void>。voidKeyProcessTask2(void>。voidKeyProcessTask3(void>。voidKeyProcessTask4(void>。voiddisbuffer_shidu(void>。voiddisbuffer_wendu(void>。voiddisbuffer_shidu_alarm(void>。voiddisbuffer_wendu_alarm(void>。voiddisplay11(void>。voiddelay_ms(uchari>。voidalarm(void>。voidReadTemperature(void>。//////////////////////////////////**************************************/unsigneddataTemp1=0。unsignedcharc=0。unsignedchard=0。unsigneda[4]。//溫度數值存放unsignedcharcodeditab[16]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9}。JbA9VhEou1sbitDQ=P2^1。////////////////////////////////sbitP3_7=P2^6。sbitP3_5=P2^4。sbitP3_3=P2^2。sbitP3_1=P2^0。#definedigit_1_onP3_1=0。29/61個人資料整理 僅限學習使用#definedigit_1_offP3_1=1。#definedigit_2_onP3_3=0。#definedigit_2_offP3_3=1。#definedigit_3_onP3_5=0。#definedigit_3_offP3_5=1。#definedigit_4_onP3_7=0。#definedigit_4_offP3_7=1。sbitcheck1=P1^0。sbitcheck2=P1^1。sbitcheck3=P1^2。sbitcheck4=P1^3。sbitBUZZER=P3^7。#defineBUZZERonBUZZER=0#defineBUZZERoffBUZZER=1////////////////////////////////U8wendu=40。U8alarm_flag。U8shidu=60。U8alarm_work。//U8alarm_flag。U8alarm_flag=1。U8NewKey3[3]={0,0,0}。U8NewKey1[3]={0,0,0}。U8NewKey2[3]={0,0,0}。U8NewKey4[3]={0,0,0}。U8dis_buff[4] 。//----------------------------------------------////----------------IO 口定義區--------------------////----------------------------------------------//30/61個人資料整理 僅限學習使用sbitP2_0=P3^6 。//----------------------------------------------////---------------- 定義區--------------------////----------------------------------------------//U8U8FLAG,k。U8U8count,U8temp。U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata。X7Ahr18pJIU8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp。b3zqXLCqXoU8U8comdata。U8outdata[5] 。// 定義發送的字節數U8indata[5] 。U8count,count_r=0。U8str[5]={"RS232"}。U16U16temp1,U16temp2。U8HaveKey。U8codeled_7[23]={0x80,0x9b,0x42,0x0a,0x19,0x0c,0x04,0x9a,0x00,0x18,0xff,

pZyytu5rc5有點01234567890xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x38,0xe4,0x31} 。DVyGZezsrM//無點0123456789SendData(U8*a>{outdata[0]=a[0] 。31/61個人資料整理 僅限學習使用outdata[1]=a[1] 。outdata[2]=a[2] 。outdata[3]=a[3] 。outdata[4]=a[4] 。count=1。SBUF=outdata[0]。}voidDelay(U16j>{ U8i 。for( 。j>0。j-->{for(i=0 。i<27。i++>。}}voidDelay_10us(void>{U8i 。i-- 。i-- 。i-- 。i-- 。i-- 。i-- 。}voidCOM(void>{U8i 。for(i=0 。i<8。i++>{32/61個人資料整理 僅限學習使用U8FLAG=2。while((!P2_0>&&U8FLAG++>。Delay_10us(>。Delay_10us(> 。Delay_10us(>。U8temp=0。if(P2_0>U8temp=1 。U8FLAG=2。while((P2_0>&&U8FLAG++>。超時則跳出for循環if(U8FLAG==1>break。判斷數據位是0還是1如果高電平高過預定0高電平值則數據位為1U8comdata<<=1。U8comdata|=U8temp。 //0}//rof}//--------------------------------//----- 濕度讀取子程序 ------------//--------------------------------//---- 以下變量均為全局變量--------//---- 溫度高8位==U8T_data_H------//---- 溫度低8位==U8T_data_L------//---- 濕度高8位==U8RH_data_H-----//---- 濕度低8位==U8RH_data_L-----//---- 校驗8位==U8checkdata-----//---- 調用相關子程序如下----------//----Delay(> 。,Delay_10us(>。,COM(>。//--------------------------------33/61個人資料整理 僅限學習使用voidRH(void>{主機拉低18msP2_0=0。Delay(180> 。P2_0=1。總線由上拉電阻拉高主機延時20usDelay_10us(> 。Delay_10us(> 。Delay_10us(> 。Delay_10us(> 。主機設為輸入判斷從機響應信號P2_0=1。// 判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行if(!P2_0> //T!{U8FLAG=2。判斷從機是否發出80us的低電平響應信號是否結束while((!P2_0>&&U8FLAG++>。U8FLAG=2。判斷從機是否發出80us的高電平,如發出則進入數據接收狀態while((P2_0>&&U8FLAG++>。數據接收狀態COM(>。U8RH_data_H_temp=U8comdata。COM(>。U8RH_data_L_temp=U8comdata。COM(>。34/61個人資料整理 僅限學習使用U8T_data_H_temp=U8comdata。COM(>。U8T_data_L_temp=U8comdata。COM(>。U8checkdata_temp=U8comdata。P2_0=1。數據校驗U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp>。RQxPvY3tFsif(U8temp==U8checkdata_temp>{U8RH_data_H=U8RH_data_H_temp。U8RH_data_L=U8RH_data_L_temp。U8T_data_H=U8T_data_H_temp。U8T_data_L=U8T_data_L_temp。U8checkdata=U8checkdata_temp。}//fi}//fi}//----------------------------------------------//main(>功能描述:AT89C5111.0592MHz 串口發//送溫濕度數據,波特率9600//----------------------------------------------voidmain(>{// U8i,j 。//ucharstr[6]={"RS232"} 。/* 系統初始化*/35/61個人資料整理 僅限學習使用/*TMOD=0x21。//定時器T1使用工作方式2TH1=253。//設置初值TL1=253。TR1=1。//開始計時SCON=0x50。//工作方式1,波特率9600bps,允許接收ES=1。EA=1。//打開所以中斷TI=0。RI=0。SendData(str> 。 // 發送到串口Delay(1>。 // 延時100US<12M晶振>*/TMOD=0x21。SCON=0x50。RI=0。TI=0。TH0=0x70。TL0=0x00。TR0=1。P3=0XFF。打開中斷IP=0x10。// 中斷優先級//PT0=0 。PS=1。TR1=1。ES =1。ET0=1。EA =1。while(1>{//------------------------調用溫濕度讀取子程序36/61個人資料整理 僅限學習使用RH(>。串口顯示程序alarm(> 。ReadTemperature(> 。//--------------------------//--------------------------將顯示數據發送至緩沖區KeyProcessTask1(>。KeyProcessTask2(>。KeyProcessTask3(>。KeyProcessTask4(>。if(HaveKey==1>{if(alarm_flag==3&&wendu<85>{wendu++。}if(alarm_flag==4&&shidu<99>{shidu++。}HaveKey=0。}if(HaveKey==2>{if(alarm_flag==3&&wendu>=1>{wendu--。}37/61個人資料整理 僅限學習使用if(alarm_flag==4&&shidu>=10>{shidu--。}HaveKey=0。}if(HaveKey==3>{alarm_flag++。if(alarm_flag>=5>{alarm_flag=1 。}HaveKey=0。}if(HaveKey==4>{alarm_work++。if(alarm_work>=2>{alarm_work=0。}HaveKey=0。}if(alarm_flag==4>{disbuffer_shidu_alarm(> 。}if(alarm_flag==1>38/61個人資料整理 僅限學習使用{disbuffer_wendu(> 。}if(alarm_flag==2>{disbuffer_shidu(> 。}if(alarm_flag==3>{disbuffer_wendu_alarm(> 。}str[0]=U8RH_data_H 。str[1]=U8RH_data_L 。str[2]=U8T_data_H 。str[3]=U8T_data_L 。str[4]=U8checkdata 。SendData(str> 。// 發送到串口讀取模塊數據周期不易小于2S//Delay(20000>。}//elihw}//mainvoidRSINTR(>interrupt4using2{U8InPut3。if(TI==1>// 發送中斷{TI=0。if(count!=5>// 發送完5位數據{39/61個人資料整理 僅限學習使用SBUF=outdata[count] 。count++。}}if(RI==1> // 接收中斷{InPut3=SBUF。indata[count_r]=InPut3 。count_r++。RI=0。if(count_r==5>// 接收完4位數據{數據接收完畢處理。count_r=0。str[0]=indata[0] 。str[1]=indata[1] 。str[2]=indata[2] 。str[3]=indata[3] 。str[4]=indata[4] 。P0=0。}}}voidKeyProcessTask1(void>{//uchari 。uchartemp1,temp2 。do // 讀鍵值{40/61個人資料整理 僅限學習使用temp1=check3。temp2=check3。}while(temp1!=temp2> 。存儲鍵值NewKey1[0]=NewKey1[1]。NewKey1[1]=NewKey1[2]。NewKey1[2]=temp1。鍵值處理if((NewKey1[0]!=NewKey1[1]>&&(NewKey1[1]==NewKey1[2]>&&(NewKey1[2]!=0>>5MxX1IxuU9{HaveKey=3。}}voidKeyProcessTask2(void>{//uchari 。uchartemp3,temp4 。do // 讀鍵值{temp3=check2。temp4=check2。}while(temp3!=temp4> 。存儲鍵值NewKey2[0]=NewKey2[1]。NewKey2[1]=NewKey2[2]。NewKey2[2]=temp3。鍵值處理41/61個人資料整理 僅限學習使用if((NewKey2[0]!=NewKey2[1]>&&(NewKey2[1]==NewKey2[2]>&&(NewKey2[2]!=0>>jIw5xs0v9P{HaveKey=2。}}voidKeyProcessTask3(void>{//uchari 。uchartemp5,temp6 。do // 讀鍵值{temp5=check1。temp6=check1。}while(temp5!=temp6> 。存儲鍵值NewKey3[0]=NewKey3[1]。NewKey3[1]=NewKey3[2]。NewKey3[2]=temp5。鍵值處理if((NewKey3[0]!=NewKey3[1]>&&(NewKey3[1]==NewKey3[2]>&&(NewKey3[2]!=0>>xEve2buwnw{HaveKey=1。}}voidKeyProcessTask4(void>42/61個人資料整理 僅限學習使用{//uchari 。uchartemp7,temp8 。do // 讀鍵值{temp7=check4。temp8=check4。}while(temp7!=temp8> 。存儲鍵值NewKey4[0]=NewKey4[1]。NewKey4[1]=NewKey4[2]。NewKey4[2]=temp7。鍵值處理if((NewKey4[0]!=NewKey4[1]>&&(NewKey4[1]==NewKey4[2]>&&(NewKey4[2]!=0>>KAvmyVYxCd{HaveKey=4。}}//***************** 時間顯示掃描**************//voiddisplay11(void>{uchari 。P0=led_7[dis_buff[i]] 。digit_1_on 。i++。delay_ms(2>。P0=led_7[dis_buff[i]] 。43/61個人資料整理 僅限學習使用digit_1_off 。digit_2_on 。i++。delay_ms(2>。P0=led_7[dis_buff[i]] 。digit_2_off 。digit_3_on 。i++。delay_ms(2>。P0=led_7[dis_buff[i]] 。digit_3_off 。digit_4_on 。i=0。delay_ms(2>。digit_4_off 。}/////////////////////////////////////////////voidalarm(void>{if(U8T_data_H>=wendu&&alarm_work==0>{BUZZERon。}if(U8RH_data_H>=shidu&&alarm_work==0>{BUZZERon。}if(U8RH_data_H<shidu&&U8T_data_H<wendu&&alarm_work==0>Ywuu4FszRT44/61個人資料整理 僅限學習使用{BUZZERoff。}if(alarm_work==1>{BUZZERoff。}}//***************** 數據送到緩沖區**************//voiddisbuffer_shidu(void>{dis_buff[0]=U8RH_data_H/10+0x0b 。dis_buff[1]=U8RH_data_H%10 。dis_buff[2]=U8RH_data_L_temp/10+0x0b 。dis_buff[3]=0x16 。}voiddisbuffer_wendu(void>{dis_buff[0]=Temp1/10+0x0b 。dis_buff[1]=Temp1%10 。dis_buff[2]=ditab[c]+0x0b 。dis_buff[3]=0x15 。}voiddisbuffer_shidu_alarm(void>{dis_buff[0]=shidu/10+0x0b 。dis_buff[1]=shidu%10 。dis_buff[2]=0x0a 。dis_buff[3]=0x16 。45/61個人資料整理 僅限學習使用}voiddisbuffer_wendu_alarm(void>{dis_buff[0]=wendu/10+0x0b 。dis_buff[1]=wendu%10 。dis_buff[2]=0x0a 。dis_buff[3]=0x15 。}voiddelay_ms(uchari>{ucharj 。for(。i>0。i-->{for(j=0 。j<=120。j++>{

溫馨提示

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

評論

0/150

提交評論