




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
倉庫溫濕度的監測系統設計1緒論1.1選題背景倉庫的日常管理直接影響到儲備物資的使用壽命和工作可靠性,而倉庫管理的主要問題就是就是加強倉庫內溫度和濕度的監測與控制工作。傳統的方法是用溫度表、毛發濕度表、雙金屬式測量計和濕度試紙等測試器材,通過人工進行檢測,對不符合溫度和濕度要求的庫房進行通風、去濕和降溫等處理。顯然這種人工檢測控制的方法費時費力,且測試的溫度及濕度誤差很大,隨機性很高,這會導致我們在倉庫的管理上出現很多的不必要性。對此我們迫切需要一種測量準確的溫濕度測量控制器來幫助我們更好的完成對倉庫的日常管理,而基于電子方面的溫濕度測量控制器就是我們最好的選擇。1.2基本功能及技術要求基本功能檢測溫度、濕度顯示溫度、濕度過限報警控制溫濕度1.2.2主要技術參數溫度檢測范圍:-30℃-50℃測量精度:0.5℃濕度檢測范圍:0%-100%RH檢測精度:1%RH顯示方式:溫度值和濕度值在一塊顯示器上顯示。報警方式:蜂鳴音報警和LED閃爍報警。1.3設計的重點與難點本次系統設計的任務是設計一個倉庫溫濕度監測系統,它能夠對倉庫的溫濕度進行實時檢測,測量時能夠清晰穩定的顯示出檢測結果,并且能夠在倉庫溫濕度超過我們所設限度時,控制倉庫的溫濕度。設計的難點:溫濕度控制模塊設計顯示電路模塊設計流程圖及程序的設計2系統總體分析與設計2.1系統總體方案溫度監控:對倉庫溫度進行測量,并通過控制溫度達到倉庫的最佳溫度。濕度監控:對倉庫濕度進行測量,并通過控制濕度達到倉庫的最佳濕度。控制處理:當溫濕度值越過限度時報警,根據報警信號發出報警,并且通過溫濕度控制模塊采取一定手段控制溫濕度。顯示:顯示模塊顯示倉庫實時的溫濕度。2.2系統實施措施實際倉庫溫度與給定界限比較,執行溫度調控措施。實際倉庫濕度與給定界限比較,執行濕度調控措施。越限報警:當溫濕度越限時,系統通過蜂鳴器報警。顯示:使用戶能夠實時觀測倉庫溫濕度,本設計用的是LCD1602顯示。2.3系統組成倉庫溫濕度的監測系統以89C51單片機作為中央控制裝置,SHT10溫濕度傳感器模塊,升溫設備,降溫設備,加濕設備,排潮設備,鍵盤顯示模塊,報警模塊等組成。各模塊功能如下:89C51作為中央控制芯片裝置,負責整個系統的中心運算和控制,協調系統的各個模塊工作。顯示模塊用液晶顯示器LCD1602顯示實時溫濕度。溫濕度傳感器:采用的是SHT10溫濕度傳感器采集倉庫的溫濕度,簡單,方便,直觀。升溫設備:負責系統的溫度上升控制工作。降溫設備:負責系統的溫度下升控制工作。噴霧設備:負責系統的加濕工作。排潮設備:負責系統的去濕工作。蜂鳴器模塊:負責系統的報警功能。如果當前的溫度超過用戶設定的界限值時系統將自動報警音效模塊發出報警聲,通知用戶采取相應的措施。系統框圖如圖2.3-1所示:AT89C51AT89C51SHT10溫濕度傳感器溫濕度控制系統矩陣鍵盤報警電路LCD1602圖2.3-1系統框圖3系統硬件設計3.1最小系統設計3.1.1最小系統芯片選擇硬件系統是應用系統的基礎、軟件系統設計的依據,而硬件系統的核心就是主控芯片。我考慮了多種芯片,根據系統的總體功能和運行速度及其每個器件的性價比等因素考慮,最終選定了ATMEL公司的AT89C51為本次系統設計的主機,它滿足本次設計方案措施的要求而且設計方便,不需要再存儲擴展。89C51在工業應用方面有許多明顯的特點,它作為一個8位的CPU,具有靈活方便的8位總線外圍支持器擴展功能和快速的應用數據處理能力,使用非常方便。由于電子集成技術的飛速發展,許多常用的輸入輸出控制模塊都制作在同一塊硅片上,大大地方便靈活了外部連線,增強了系統的速度和穩定性,這使得它非常適合于在工業環境下使用,總的來說89C51系統的CPU具有體積小,重量輕,抗干擾能力強,售價低,使用方便等特點。89C51芯片簡介及引腳介紹[1]89C51是Intel公司于80年代初推出的一種8位嵌入式微控制器。其內部數據總線為8位,外部數據總線為8位。89C51單片機引腳采用40雙列直插式封裝結構,引腳功能如下所示:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下所示:P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時器0外部輸入)P3.5T1(記時器1外部輸入)P3.6/WR(外部數據存儲器寫選通)P3.7/RD(外部數據存儲器讀選通)RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。其引腳圖如圖3.1-1所示:圖3.1.2-1AT89C51單片機引腳AT89C51CPU中的主要組件AT89C51CPU中的主要組件有:特殊功能寄存器、高速寄存器陣列、寄存器控制器和算術邏輯單元。它與外部通訊是通過特殊功能寄存器或存儲器、控制器進行的。此外,它還可以通過特殊功能寄存器直接控制A/D、I/O、PWM、串行口等部件的有效運行。最小系統[2]AT89C51工作時所需的時鐘可通過其XTALL輸入引腳由外部輸入,也可采用芯片內部的振蕩器。其工作頻率為6~12MHz,在本系統中采用11.0592MHz頻率。最小系統圖如圖3.1-2所示:圖3.1.4-1最小系統圖3.2溫濕度傳感器模塊設計3.2.1溫濕度傳感器的選擇本次系統設計考慮了兩種方案:第一種是采用AD590溫度傳感器和HS1100濕度傳感器共同完成對倉庫溫濕度的采集,第二種是采用最新型的SHT10溫濕度傳感器完成對倉庫溫濕度的采集。SHT10溫濕度傳感器采用CMOS過程微加工專利技術(CMOSenstechnology),確保產品具有極高的可靠性和出色的長期穩定性,整個傳感器組件采用單芯片無縫結合,且溫度和濕度可以同時采集,使得該產品具有功耗低、反應快、抗干擾能力強等優點。相對于AD590和HS1100來說,這種新型的傳感器更加符合本次設計,所以我選擇了第二種方案。SHT10溫濕度傳感器介紹SHT10溫濕度傳感器是Sensirion溫濕度傳感器家族的一員,傳感器由濕度傳感器,溫度傳感器,校準存儲器,14位A/D轉換器,信號放大器和I2C總線接口構成;它是一種將傳感元件和信號處理電路集成在一塊微型電路板上,輸出完全標準的數字信號的一種新型溫濕度傳感器。其外形實物圖如圖3.2.2-1所示:圖3.2.2-1SHT10外形實物總的來說,它具有以下特點:相對溫度和濕度的一體測量;精確露點測量;全量程的標定,不需要重新標定就可以互換使用;兩線制的數字接口,具有最簡單的系統集成和較低的價格;超小尺寸(7.5×5×2.5mm);高可靠性(工業CMOS工藝);具有長期穩定性;基于請求式的檢測,能耗很低;具有濕度傳感器元件的自檢測能力;傳感器元件加熱應用,具有極高的精度和穩定性。技術參數如下所示:濕度測量范圍:0~100%RH;濕度測量范圍:-40~+123.8℃;濕度測量精度:±4.5%RH;溫度測量精度:±0.5℃;響應時間:<4s。引腳說明及接口電路:SHT10內部結構框圖:圖3.2.2-2SHT10內部結構框圖SHT10命令表如表-1所示表-1SHT10命令表命令代碼保留0000X測量溫度00011測量濕度00101讀狀態寄存器00111寫狀態寄存器00110保留0101X-1110X軟復位,清除狀態寄存器為默認值111103.2.3SHT10溫濕度傳感器性能特點[3]帶有工業標準的I2C總線數字輸出接口;將溫濕度傳感器、信號放大、A/D轉換、I2C總線接口全部集成于一個芯片;可給出全校準相對濕度及溫度值輸出;具有露點值計算輸出功能;濕度值輸出分辨率為14位,溫度值輸出分辨率為12位,并可編程為12位和8位;具有數據傳輸校驗功能;片內裝載的校準系數可保證100%互換性;具有卓越的長期穩定性;電源電壓范圍為2.4~5.5V;電流消耗,測量時為550μA,平均為28μA,休眠時為3μA;體積小(7.65×5.08×23.5mm),可表面貼裝。SHT10溫濕度傳感器接口電路設計電源引腳(VDD、GND)SHT10的供電電壓為2.4V~5.5V。傳感器上電后,要等待11ms,從“休眠”狀態恢復。在此期間器件不發送任何指令。電源引腳(VDD和GND)之間可增加1個100nF的電容器,用于去耦濾波,使其更加準確。串行接口[4]SHT10的兩線串行接口(bidirectional2-wire)在傳感器溫濕度信號的讀取和器件的功耗方面都做了很大的優化處理,其總線類似I2C總線,但是不兼容I2C總線。串行時鐘輸入(SCK)。SCK引腳是系統主控芯片與SHT1O之間進行通信的同步時鐘,其接口包含了全靜態邏輯,因此沒有最小時鐘頻率。串行數據(DATA)。DATA引腳是1個三態門,用于系統主控芯片與SHT10之間進行數據傳輸。DATA的狀態在串行時鐘SCK的下降沿之后發生改變,在SCK的上升沿有效。在數據傳輸期間,當SCK為高電平時,DATA數據線上必須保持穩定狀態。為避免數據發生沖突,MCU應該驅動DATA使其處于低電平狀態,而外部接1個上拉電阻將信號拉至高電平。由于AT89C51不具備I2C總線接口,故使用單片機通用I/O口線來虛擬I2C總線,利用P2.6來虛擬時鐘線,利用P2.7口線來虛擬數據線DATA,并在DATA端接入一個10K的上拉電阻,同時在VCC及GND端接入一個0.1UF的去耦電容,AT89C51單片機與SHT10的接口電路如圖3.2.4-1所示[5]。圖SHT10接口電路圖3.3液晶顯示模塊設計LCD1602是字符型液晶顯示模塊,它由字符型液晶顯示屏、控制驅動主電路HD44780及其擴展驅動電路HD44100、少量電阻電容元件、結構件等裝配在一起而成。LCD1602字符型液晶顯示模塊目前在國際上已經規范化,無論顯示屏規格如何變化,其電特性和接口形式都是統一的。因此只要設計出一種型號的接口電路,在指令設置上稍加改動即可使用各種規格的字符型液晶顯示模塊。圖3.3-1LCD1602LCD1602液晶顯示模塊的基本特點[6]液晶顯示屏是以若干個58或511點陣塊組成的顯示字符群。每個點陣塊為一個字符位,字符間距和行距都為一個點的寬度。主控制驅動電路為HD44780(HITACHI)及其他公司全兼容電路,如SED1278(SEIKOEPSON)、KS0066(SAMSUNG)、NJU6408(NERJAPANRADIO)。具有字符發生器ROM可顯示192種字符(160個57點陣字符和32個510點陣字符,見附錄一)具有64個字節的自定義字符RAM,可自定義8個58點陣字符或四個511點陣字符。具有80個字節的RAM。標準的接口特性,適配M6800系列MPU的操作時序。模塊結構緊湊、輕巧、裝配容易。單+5V電源供電。低功耗、長壽命、高可靠性。LCD1602與系統的連接圖如圖3.3-2所示圖3.3-2LCD1602與系統連接圖3.4報警系統設計報警系統由警報燈和聲音報警報警組成。聲音報警通過P3.2口接SD口控制系統的音效模塊發聲,用CPU控制P3.2產生一定頻率的方波就可以實現音效模塊的發聲。音效模塊是一個帶有揚聲器的放大電路,如圖3.4-1所示:圖3.4-1聲音報警模塊警報燈模塊包含3個LED燈,分別由P2.0、P2.1、P2.2控制。其電路設計圖3.4-2所示:圖3.4-2警報燈模塊3.5按鍵電路設計本論文中倉庫溫濕度監測系統的硬件設計中按鍵電路有單片機AT89C51的復位電路和矩陣鍵盤電路。以下便是該復位電路圖和矩陣鍵盤電路。圖3.5-1單片機AT89C51的復位電路圖3.5-2矩陣鍵盤電路4軟件系統設計該系統軟件主要由主程序、系統中斷子程序、SHT10溫濕度傳感器數據采集程序、液晶顯示器LCD1602顯示程序、報警程序等模塊組成。因為用C語言編寫的程序具有結構簡單,程序的可讀性強,語法限制不是很嚴格,生成的目標代碼質量高,程序執行效率高,且具有很高的程序可移植性等特點,所以本次軟件設計我們采用C語言來編寫軟件。程序基于KeiluVision3為開發環境,使系統實現如下的功能:控制SHT10溫濕度傳感器采集倉庫的實時溫濕度值;通過液晶顯示器LCD1602顯示倉庫溫濕度值;比較監測到的實時倉庫溫濕度值和我們所設置的溫濕度報警值,發現其超出我們所設限度則系統控制報警模塊發出報警提示;根據所顯示的溫濕度值控制系統溫濕度調節模塊工作,使倉庫的溫濕度值回到開始所設置的溫濕度限度,且LCD1602顯示子程序對每次由SHT10溫濕度傳感器所采集的數值進行顯示。根據上述系統的功能,系統軟件流程圖如圖4-1所示。1602和SHT10初始化1602和SHT10初始化延時0.2秒讀取溫濕度值讀取成功1602顯示數據是否超限延時0.8秒SHT10通訊重啟動報警,發出控制信號圖4-1系統軟件流程圖溫濕度傳感器SHT10完成一次測量的工作順序一般為:設置傳感器分辨率→發送“啟動傳輸”命令→發送測量命令→讀取輸出的測量值→將輸出測量值轉換為物理量。則SHT10數據采集程序流程圖如圖4-2所示;NNYYYNNError=error+1Error=error+1設置傳感器分辨率狀態發送“啟動傳輸”發送測量指令讀出測量值測量值轉化成物理量一次測量結束Error是否為0?測量值判斷?指令判斷圖4-2SHT10數據采集程序流程圖5系統調試方案5.1硬件電路的調試此部分的任務是在系統各方面都連接好后,調試各個組件能否正常運行,能否實現本次設計的預期目標。其步驟如下:按照系統設計,將系統需要的各個組件連接好。根據實驗說明書,了解各個組件的工作原理,開始著手調試芯片。調試溫濕度傳感器SHT10,確保其各方面運行正常。按鍵電路,顯示電路運行正常。報警模塊運行正常。5.2功能模塊的調試方案把各個功能模塊編寫成單獨的源文件進行調試,調試成功以后,再將各部分聯合在一起。溫濕度判斷控制模塊是核心模塊,由于溫濕度對于倉庫的物品保存起著重要的作用,因此,如果這兩個因素不能控制好,這個系統就宣告失敗。這使得我們需要認真的考慮這一模塊的控制方式。外界溫濕度發生超過所設限度的變化做出了報警能否使溫濕度控制器件啟動,達到控制溫濕度的目的。鍵盤輸入模塊是這個系統在開始預設溫濕度時應用,監測輸入數字能否與顯示相對應。報警模塊在倉庫溫濕度超過所設限度時發揮作用,監測倉庫溫濕度超過所設限度能否報警。除了以上的模塊之外,還有一些小的模塊也很重要,我們都需要認真的調試,。調試了各模塊之后,接下來的工作就是將各源程序段連接起來,進行綜合調試了,綜合調試需要我們特別注意細節部分,這樣才能盡可能的減少錯誤的產生。如果整個調試都以完成,并且達到了我們預期的目標,我們都成功的完成了本次設計了。6結論經過了一段時間的畢業論文制作,使我學到了很多,也有了很多的感悟。我想到了設計開始時找到了夢寐以求的資料時那種興奮與激動;想到了親手設計電路圖,理想中的每一步思路實現時那幸福的心情;想到了為了論文忘時奮戰到深夜的激情;想到了在設計過程中學習到了一個新的知識和重新掌握了一個知識高興得暗自微笑的愉悅。本次設計能夠順利的完成,我應該感謝我的指導老師,你為給我提供了許多好用的資料來源,并通過你仔細的檢查,告訴我論文那里出了錯,應該怎么改正,提出了最中肯的意見。老師的嚴謹治學態度、淵博的知識、無私的奉獻精神使我深受啟迪。從尊敬的導師身上,我不僅學到了扎實淵博的專業知識,也學到了做人的道理。在此我要向我的導師致以最衷心的感謝和深深的敬意。本次設計,我深深了解了“學無止境”的真正含義,在今后的日子里,我仍然要不斷地充實自己,爭取在所學領域有所作為。附錄1:原理圖附錄2:程序//************************第一部分************************//Main.C#include<reg51.h>#include"LCD1602.h"#include"SHT10.h"http://#include<intrins.h>//#include<math.h>//Keillibrarysbitkongtiao=P3^6;sbitjiashi=P3^7;#defineucharunsignedchartypedefunion //定義共用同類型{ unsignedinti; floatf;}value;//延時函數voiddelay(intz) //z為毫秒數{ intx,y; for(x=z;x>0;x--) for(y=125;y>0;y--);}voidmain(){ unsignedinttemp,humi; valuehumi_val,temp_val; //定義兩個共同體,一個用于濕度,一個用于溫度 unsignedcharerror; //用于檢驗是否出現錯誤 unsignedcharchecksum; //CRC ucharwendu[6]; //用于記錄溫度 ucharshidu[6]; //用于記錄濕度 LCD_Initial(); //初始化液晶 GotoXY(0,0); //選擇溫度顯示位置 Print("TEMP:%C"); //5格空格GotoXY(0,1); //選擇濕度顯示位置 Print("HUMI:%RH"); //5格空格 s_connectionreset(); //啟動連接復位 while(1) { error=0; //初始化error=0,即沒有錯誤 error+=s_measure((unsignedchar*)&temp_val.i,&checksum,TEMP);//溫度測量 error+=s_measure((unsignedchar*)&humi_val.i,&checksum,HUMI);//濕度測量 if(error!=0)s_connectionreset();////如果發生錯誤,系統復位 else { humi_val.f=(float)humi_val.i;//轉換為浮點數 temp_val.f=(float)temp_val.i;//轉換為浮點數 calc_sth10(&humi_val.f,&temp_val.f);//修正相對濕度及溫度 temp=temp_val.f*10; humi=humi_val.f*10; GotoXY(5,0); //設置溫度顯示位置 wendu[0]=temp/1000+'0'; //溫度百位 wendu[1]=temp%1000/100+'0'; //溫度十位 wendu[2]=temp%100/10+'0'; //溫度個位 wendu[3]=0x2E; //小數點 wendu[4]=temp%10+'0'; //溫度小數點后第一位 Print(wendu); //輸出溫度 GotoXY(5,1); //設置濕度顯示位置 shidu[0]=humi/1000+'0'; //濕度百位 shidu[1]=humi%1000/100+'0'; //濕度十位 shidu[2]=humi%100/10+'0'; //濕度個位 shidu[3]=0x2E; //小數點 shidu[4]=humi%10+'0'; //濕度小數點后第一位 Print(shidu); //輸出濕度 } if(temp>30) { kongtiao=1; //升溫 } else kongtiao=0; //降溫 if(humi>30) { jiashi=1; //加濕 } else { jiashi=0;//除濕 } delay(800);//等待足夠長的時間,以現行下一次轉換 }}//************************第二部分************************//SHT1O.C#include<SHT10.h>#include<intrins.h>sbitDATA=P2^7;sbitSCK=P2^6;#definenoACK0 //繼續傳輸數據,用于判斷是否結束通訊#defineACK1//結束數據傳輸; //地址命令讀/寫#defineSTATUS_REG_W0x06//00000110#defineSTATUS_REG_R0x07//00000111#defineMEASURE_TEMP0x03//00000011#defineMEASURE_HUMI0x05//00000101#defineRESET0x1e//00011110//寫字節程序chars_write_byte(unsignedcharvalue){ unsignedchari,error=0; for(i=0x80;i>0;i>>=1)//高位為1,循環右移 { if(i&value)DATA=1;//和要發送的數相與,結果為發送的位 elseDATA=0; SCK=1; _nop_();_nop_();_nop_();//延時3us SCK=0; } DATA=1;//釋放數據線 SCK=1; error=DATA;//檢查應答信號,確認通訊正常 _nop_();_nop_();_nop_(); SCK=0; DATA=1; returnerror;//error=1通訊錯誤}//讀字節程序chars_read_byte(unsignedcharack)//-------------------------------------------------------------------------{ unsignedchari,val=0; DATA=1;//釋放數據線 for(i=0x80;i>0;i>>=1)//高位為1,循環右移 { SCK=1; if(DATA)val=(val|i);//讀一位數據線的值 SCK=0; } DATA=!ack;//如果是校驗,讀取完后結束通訊; SCK=1; _nop_();_nop_();_nop_();//延時3us SCK=0; _nop_();_nop_();_nop_(); DATA=1;//釋放數據線 returnval;}//啟動傳輸voids_transstart(void)//generatesatransmissionstart//_____________//DATA:|_______|//______//SCK:___||___||______{ DATA=1;SCK=0;//準備 _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0;}//連接復位voids_connectionreset(void)//communicationreset:DATA-line=1andatleast9SCKcyclesfollowedbytransstart//_____________________________________________________//DATA:|_______|//_______________//SCK:__||__||__||__||__||__||__||__||__||______||___||______{ unsignedchari; DATA=1;SCK=0;//準備 for(i=0;i<9;i++)//DATA保持高,SCK時鐘觸發9次,發送啟動傳輸,通迅即復位 { SCK=1; SCK=0; } s_transstart();//啟動傳輸}//軟復位程序chars_softreset(void)//resetsthesensorbyasoftreset{ unsignedcharerror=0; s_connectionreset();//啟動連接復位 error+=s_write_byte(RESET);//發送復位命令 returnerror;//error=1通訊錯誤}//溫濕度測量chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)//進行溫度或者濕度轉換,由參數mode決定轉換內容;{// enum{TEMP,HUMI}; //已經在頭文件中定義 unsignederror=0; unsignedinti; s_transstart();//啟動傳輸 switch(mode)//選擇發送命令{ caseTEMP:error+=s_write_byte(MEASURE_TEMP);break; //測量溫度 caseHUMI:error+=s_write_byte(MEASURE_HUMI);break; //測量濕度 default:break; } for(i=0;i<65535;i++)if(DATA==0)break;//等待測量結束 if(DATA)error+=1;//如果長時間數據線沒有拉低,說明測量錯誤 *(p_value)=s_read_byte(ACK);//讀第一個字節,高字節(MSB) *(p_value+1)=s_read_byte(ACK);//讀第二個字節,低字節(LSB) *p_checksum=s_read_byte(noACK);//readCRC校驗碼 returnerror; //error=1通訊錯誤}//溫濕度值標度變換及溫度補償voidcalc_sth10(float*p_humidity,float*p_temperature){ constfloatC1=-4.0;//12位濕度精度修正公式 constfloatC2=+0.0405;//12位濕度精度修正公式 constfloatC3=-0.0000028;//12位濕度精度修正公式 constfloatT1=+0.01;//14位溫度精度5V條件修正公式 constfloatT2=+0.00008;//14位溫度精度5V條件修正公式 floatrh=*p_humidity;//rh:12位濕度 floatt=*p_temperature;//t:14位溫度 floatrh_lin;//rh_lin:濕度linear值 floatrh_true;//rh_true:濕度ture值 floatt_C;//t_C:溫度℃ t_C=t*0.01-40;//補償溫度 rh_lin=C3*rh*rh+C2*rh+C1;//相對濕度非線性補償 rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;//相對濕度對于溫度依賴性補償 if(rh_true>100)rh_true=100;//濕度最大修正 if(rh_true<0.1)rh_true=0.1;//濕度最小修正 *p_temperature=t_C;//返回溫度結果 *p_humidity=rh_true;//返回濕度結果}//從相對溫度和濕度計算露點/*floatcalc_dewpoint(floath,floatt){ floatlogEx,dew_point; logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2); dew_point=(logEx-0.66077)*237.3/(0.66077+7.5-logEx); returndew_point;} //************************第三部分************************//LCD1602#include<reg51.h>#include<intrins.h>sbitLcdRs=P2^3;sbitLcdRw=P2^4;sbitLcdEn=P2^5;sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數據端口//內部等待函**************************************************************unsignedcharLCD_Wait(void){LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;returnDBPort;}//向LCD寫入命令或數********************************************************#defineLCD_COMMAND0//Command#defineLCD_DATA1//Data#defineLCD_CLEAR_SCREEN0x01//清屏#defineLCD_HOMING0x02//光標返回原點voidLCD_Write(bitstyle,unsignedcharinput){LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意順序LcdEn=1;_nop_();//注意順序LcdEn=0;_nop_();LCD_Wait();}//設置顯示模式************************************************************#defineLCD_SHOW0x04//顯示開#defineLCD_HIDE0x00//顯示關#defineLCD_CURSOR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫療機構裝修工人合同
- 脊柱手術室護理
- 策劃書行業分析
- 咖啡廳內部裝修設計協議
- 2024瑪納斯中等職業技術學校工作人員招聘考試及答案
- 2024河北雄安新區興達技工學校工作人員招聘考試及答案
- 簡化版代理銷售合同
- 化工制圖與識圖試題庫含答案
- 市政基礎設施工程施工承包合同范本
- 植物考試題及答案
- 原發性高血壓護理措施
- 人工智能基礎(Python實現)-課件 第8章 生成式大模型應用
- 2024年安徽寧馬投資有限責任公司招聘10人筆試參考題庫附帶答案詳解
- 紀檢監察審查調查業務培訓
- 《變頻器原理及應用》課件
- 2024年中考模擬試卷英語(蘇州卷)
- JT-T-1045-2016道路運輸企業車輛技術管理規范
- 7.4.2超幾何分布 課件(共14張PPT)
- 晶狀體相關的繼發性青光眼進展課件
- DB33T 1192-2020 建筑工程施工質量驗收檢查用表統一標準
- 電鍍與化學鍍
評論
0/150
提交評論