《基于51單片機的溫濕度檢測系統(tǒng)設計與實現(xiàn)》7900字_第1頁
《基于51單片機的溫濕度檢測系統(tǒng)設計與實現(xiàn)》7900字_第2頁
《基于51單片機的溫濕度檢測系統(tǒng)設計與實現(xiàn)》7900字_第3頁
《基于51單片機的溫濕度檢測系統(tǒng)設計與實現(xiàn)》7900字_第4頁
《基于51單片機的溫濕度檢測系統(tǒng)設計與實現(xiàn)》7900字_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

基于51單片機的溫濕度檢測系統(tǒng)設計與實現(xiàn)摘要在日常生活工作中和工農(nóng)業(yè)業(yè)生產(chǎn)中,工作人員需要不間斷的了解室內(nèi)或大棚中溫濕度等多種參數(shù),有一些要求比較嚴格的環(huán)境,例如對溫濕度要求極其嚴格的農(nóng)作物或者大型機房內(nèi)的溫濕度檢測等。這些都需要時刻了解每個時刻內(nèi)的溫濕度數(shù)值,讓其溫濕度數(shù)值保持在預先設定的數(shù)值范圍內(nèi)。以確保能正常運轉和生長,而本次設計中,采用了AT89C51作為系統(tǒng)為主控系統(tǒng),硬件包括C51單片機為核心、LCD液晶顯示器、DHT11溫濕度傳感器、蜂鳴報警器等元器件,連接電路后通過給傳感器溫濕度的變化,通過LCDY液晶顯示屏顯示出來,如果溫濕度超過一定數(shù)值后蜂鳴器發(fā)出報警,后續(xù)通過人工來調(diào)整溫濕度以達到正常溫濕度。關鍵詞:C51單片機,濕度傳感器,LCD顯示屏,蜂鳴器目錄一、引言 11.1課題開發(fā)的目的和意義 11.2溫濕度傳感器應用行業(yè) 2二、溫濕度檢測總體電路設計圖 32.1整體系統(tǒng)的結構圖 32.2系統(tǒng)方案介紹 4三、應用器件簡介 53.1AT89C51單片機簡介和設計圖 63.1.1單片機簡介 73.1.2單片機原理圖 83.1.3單片機系統(tǒng)完成的必要條件 83.2DHT11傳感器簡介 93.2.1傳感器的介紹 93.2.2傳感器的原理圖 103.3LCD顯示器 113.3.1LCD示器簡介 113.3.2LCD顯示器的原理圖 113.4蜂鳴器簡介 123.4.1蜂鳴器的介紹 123.4.2蜂鳴器的構成 13四、軟件設計 144.1系統(tǒng)運行圖 144.2按鍵運行圖 194.3Protues仿真結果 214.4整體電路圖和部分電路圖 22結論 23參考文獻 25附件 26一、引言1.1課題開發(fā)的目的和意義溫濕度監(jiān)測系統(tǒng)的設計在現(xiàn)實生活中十分重要,本次實驗論證的重要內(nèi)容是關于室內(nèi)外溫濕度的監(jiān)測和報警功能通過改變室內(nèi)外溫濕度,實施對溫濕度的監(jiān)測和顯示??萍嫉陌l(fā)展非常迅速,各種各樣的性能高的智能設備越來越多,在未來的幾年里智能設備會在每個家庭中出現(xiàn)并使用。長期以來,人們在溫濕度測量中,大部分使用常規(guī)的測量方法進行測量。而且在現(xiàn)代化生活中處處都有溫濕度監(jiān)測裝置,溫濕度監(jiān)測應用在家庭電器中、種植大棚中、重工業(yè)、汽車行業(yè)、食品生產(chǎn)等行業(yè)中并且溫濕度是一個十分重要的參數(shù),它決定著一個行業(yè)的發(fā)展、安全程度。過去的幾年里溫濕度的數(shù)值監(jiān)測是需要人工去監(jiān)測,而每天的不同時段中溫濕度的數(shù)值是在隨時間變化而變化的,這樣的話利用人工去監(jiān)測費時費力而且還提高了人力的成本,但是溫濕度傳感器智能監(jiān)測系統(tǒng)可以解決一些人工上的缺點和不足,它的工作方式如下:傳感器感應外界的溫濕度,單片機去判斷是否在控制的溫度范圍內(nèi),如果溫濕度異常,則進行報警。這樣對溫濕度的監(jiān)測的效率大大提高?,F(xiàn)在看來世界上的溫濕度傳感器開始從數(shù)字和集成話以及網(wǎng)絡化發(fā)展。溫濕度傳感器也可以分為兩類:一.接觸式二.非接觸式。如果想要被監(jiān)測問題的數(shù)值精度高必須要讓被測物體和溫濕度傳感器充分接觸,如果被測物體離傳感器距離較遠會導致測量的數(shù)值由很大的誤差,而非接觸式是通過熱輻射相互交換來進行不接觸方式測量,但是外界的溫濕度對非接觸方式測量的影響大,會使測量不準確。人們現(xiàn)在一般使用簡易的溫度計測量,而簡易的溫濕度傳感器所測量的數(shù)值并不準確,而且很容易受到外界環(huán)境的干擾。反而溫濕度在某些行業(yè)中要求極高,在一些大型電力企業(yè)中,溫度過高會引發(fā)漏電事故,在這些情況下通常會對工作人員的安全造成危害,所以我們對溫濕度傳感器的需求非常重要。最近幾年的發(fā)展中,越來越多的智能設備應用到我們的日常生活中,而這些智能設備都離不開溫濕度傳感器。而且我國現(xiàn)在也在大力發(fā)展研究溫濕度傳感器,傳感器也逐漸運用到各個領域,并且不同的行業(yè)都為了讓自己增大生產(chǎn)、提高生產(chǎn)效率,都在研究和制造適合自己的傳感器,溫濕度傳感器發(fā)展迅速,應用廣泛,前途不容小覷。1.2溫濕度傳感器應用行業(yè)每個行業(yè)自己的領域對溫濕度傳感器的要求都不同,溫濕度傳感器在每個行業(yè)也發(fā)揮著自己的作用例如:食品加工生產(chǎn):食品的儲存對溫濕度需要極高的要求,如果溫濕度達不到要求會導致食品變質(zhì),脹包,軟化等,會給生產(chǎn)商負面影響和麻煩,如果顧客使用可能還會給顧客造成身體上的疾病。大型檔案室:檔案室一般存放著重要的紙資文件,如果溫濕度不在準確的范圍內(nèi)會造成紙質(zhì)文件上的文字褪色、紙張發(fā)黃、軟化等,會對后期查看檔案內(nèi)容造成浪費時間、人力的影響。農(nóng)作物大棚:一些不是當季的水果,只能在大棚中種植,植物生長對溫濕度有一定的要求,達不到要求植物會停止生長或者死亡。醫(yī)藥業(yè):藥品儲存對溫濕度要求更為嚴格,一般藥品儲存范圍0-30℃,如果溫濕度不在可控范圍內(nèi),藥品可能會失去藥性,如誤食輕則生病重則可能會導致死亡。大型機房:機房中放置著許多大型交換機他維持這整個范圍內(nèi)的數(shù)據(jù)傳輸,如果溫濕度不可控會導致死機導致整個網(wǎng)絡癱瘓會給公司或者學校數(shù)據(jù)傳輸上造成重大影響。疫苗的儲存:疫苗儲存須有嚴格的溫度控制標準,而正規(guī)的疫苗存儲配送鏈應該全程配備溫濕度監(jiān)控設備,以符合藥品經(jīng)營質(zhì)量管理規(guī)范的要求。在疫苗存儲、運輸和配送流程中,冷鏈全程有溫度監(jiān)控記錄并備案。疾控中心對每一批次查驗貨時,必須同時查驗途中的溫濕度記錄,確認運輸途中溫度記錄符合GSP《藥品經(jīng)營質(zhì)量管理規(guī)范》相關規(guī)定后再驗收入庫??諝鈨艋鳎涸诳諝鈨艋髦?,溫濕度傳感器目前產(chǎn)品越來越小型化,其作用是檢測室內(nèi)濕度(干燥狀態(tài)),凈化器根據(jù)該數(shù)據(jù)控制加濕量,即可保證室內(nèi)環(huán)境在一定的濕度范圍內(nèi),以保持最舒適的濕度。二、溫濕度檢測總體電路設計圖2.1整體系統(tǒng)的結構圖圖2-1整體結構圖整體系統(tǒng)由四大部分組成(1.AT89C51單片機2.DHT11傳感器3.液晶顯示器4.報警器),各個部分發(fā)揮自己的作用,共同完成對溫濕度的檢測。2.2系統(tǒng)方案介紹此系統(tǒng)以AT89C51單片機為核心,單片機把溫濕度傳感器收集到數(shù)據(jù)進行處理,然后傳輸?shù)絃CD顯示器上進行顯示,溫濕度傳感器主要功能使根據(jù)周圍溫濕度的變化進行收集,把收集到的數(shù)據(jù)打包傳輸給單片機,我們可以利用鍵盤預先設置的溫濕度數(shù)值和控制電路的復位,蜂鳴器的主要功能是當溫濕度的數(shù)值超過我們預先設定的范圍時,蜂鳴器進行報警提示,顯示電路主要是為了顯示當前的溫濕度數(shù)值和我們預先設定的溫濕度數(shù)值。三、應用器件簡介3.1AT89C51單片機簡介和設計圖3.1.1單片機簡介AT89C51單片機是美國生產(chǎn)的具有低電壓、高性能的8位單片機,單片機內(nèi)是可以反復擦寫的只讀程序存儲器(PEROM)、128字節(jié)隨機儲存器,其器件具有密度高、不容易失性??梢詰迷诟鞣N各樣的生產(chǎn)環(huán)境中。AT89C51的一些主要的性能數(shù)據(jù)如下·可以完全兼容MCS-51的指令·4000bytes反復擦寫閃存儲存器·1000次的擦寫周期·完全靜態(tài)操作·三級程序加密功能·128*8bytes內(nèi)部儲存·32個可以編寫的I/O口·兩個16位的定時器·6個中斷·可以編寫串行USRT通道·功耗低·P0口:P0口是一個8位漏極開路雙向I/O口,P0是輸出口,其每一位可以吸收電流的方式驅動8個TTL邏輯門電路,如果用于訪問外部儲存器時其數(shù)據(jù)總線可以反復使用。·P1口:是一個帶內(nèi)部上拉8位雙向I/O口,P1可以驅動4個TTL邏輯門電路,P1可以用作輸入口,當閃存編程和檢驗程序時P1會接收較低的8位地址。作為輸入口,其中的一個引腳會被外部信號拉低輸出一個電流?!2口:P2口是一個內(nèi)部帶上拉電阻的8位雙向I/O口,P3口輸出可驅動4個TTL邏輯門電路。當閃存編程和檢驗程序時P2會接收高位地址和控制信號?!3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口,P3口作為輸出口可驅動4個TTL邏輯門電路,作為輸入端,會被外部拉低P3口用上拉電阻輸出電流。P3口也可以用于AT89C51的一些其他的功能口,如下表所示:端口引腳功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時器0外部輸入)P3.5T1(記時器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)P3口還可以接收閃存儲存器的控制信號。RST:復位輸入。振蕩器正常工作時,引腳上出現(xiàn)高電平把單片機復位。XTAL1:反向振蕩放大器的和時鐘電路的輸入端。XTAL2:反向振蕩器放大的輸出端。

VCC:接電源GND:接地3.1.2單片機原理圖單片機原理圖見下3-1圖3-1單片機原理圖3.1.3單片機系統(tǒng)完成的必要條件1:電源AT89C51單片機電壓范圍為4.0V-5.5V??梢岳肬SB進行供電。2:晶振電路每個單片機電路中都會有晶振,晶振頻率的快慢就代表著單片機的運行速度,晶振頻率越高單片機的運行速度就越快,晶振頻率越低單片機運行也就越慢,處理數(shù)據(jù)能力就越低,某些特殊情況下,還會通過附加電壓的方式使晶振的頻率穩(wěn)定在一個固定的數(shù)值內(nèi),可以讓電路工作穩(wěn)定。3:復位電路(表1)為了確保電路運行穩(wěn)定可靠,必須要有復位電路.通常情況下復位電路的工作需要穩(wěn)定的電壓,只有電壓在一定的范圍內(nèi),復位信號才會消失,電路才可順利運行。4:時鐘電路時鐘電路可以這樣理解,電路運行是需要有像時鐘一樣穩(wěn)定的振蕩電路其次電路工作需要按時間順序,時鐘電路是晶體振蕩器、晶振控制芯片、電容是三個部分構成。表1復位電路3.2DHT11傳感器簡介3.2.1傳感器的介紹DHT11溫濕度傳感器是一種高精度、及其穩(wěn)定的復合傳感器,它一般使用在溫濕度采集技術運用上,DTH11由電阻式感濕、NTC測溫兩個元器件構成,在本次實驗中溫濕度傳感器與AT89C51單片機相連接,它可以將檢測的外部環(huán)境數(shù)據(jù)傳輸?shù)絾纹瑱C中。DHT11溫濕度傳感器具有質(zhì)量好,運行快、不受外界干擾、便宜、偏于攜帶、消耗少等優(yōu)點,而且DHT11溫濕度傳感器適用與惡劣的環(huán)境,它有4個引腳,連接起來十分簡單。3.2.2傳感器的原理圖DHT11原理圖如3-2圖3-2溫濕度原理圖圖中溫濕度傳感器DHT11中1引腳連接電源,2號引腳連接單片機的I\O口,4號引腳連接地。DHTT11所需電壓為3.5-5.5V。溫濕度傳感器存儲及其使用溫濕度傳感器密封性很差。如果想要溫濕度傳感器保持靈敏的檢測功能,不應該存在含有酸堿性的環(huán)境中,與需要避免在粉塵環(huán)境中使用。利用溫濕度傳感器測量時應在空氣流通的地方使用,如果測量的環(huán)境較大時應放置多個傳感器(傳感器之間應避免距離較近導致傳感器之間互相干擾),使用時電量要高(電量較低時會影響測量精度)選擇傳感器的時需要選用配套的電源適配器。3.3LCD顯示器3.3.1LCD示器簡介LCD液晶顯示器(LiquidCrystalDispiay),LCD由兩個平行的玻璃基板中放入一個液晶盒,下面基板上放置薄膜晶體管,上面基板放置彩色的濾光片,利用上基板的薄膜晶體管和電壓來控制液晶分子運動,使每個像素點偏振光出射來達到顯示效果,因為LCD價格便宜所以常被使用。3.3.2LCD顯示器的原理圖見下圖3-3圖3-3LCD顯示電路原理圖3.4蜂鳴器簡介3.4.1蜂鳴器的介紹蜂鳴器式一個整體化的電子器件,使用直流電壓進行供電,蜂鳴器通常用于提示和報警,它可以根據(jù)不同場景所需要的聲音進行設定,它可以唱歌、汽車喇叭叫、電鈴、報警等各種聲音,蜂鳴器使用十分廣泛,列如電子玩具、農(nóng)業(yè)、汽車上、空調(diào)環(huán)境監(jiān)控等場景。蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、“ZZG”、“LB”、“JD”等)表示。3.4.2蜂鳴器的構成蜂鳴器主要由五大部分構成(1.振蕩器2.壓電式蜂鳴片3.阻抗匹配器4.共鳴箱5.保護殼),一些特別的蜂鳴器的保護殼上還會配有發(fā)光二極管。如圖3-4-2圖3-4蜂鳴器報警模塊蜂鳴器額定電流<=0mA,而AT89C51的P3.2口電流為15mA,所以光靠單片機的電流是無法讓蜂鳴器工作的,所以直接使用基極導通VCC直接給buzzer通電,晶體管一般情況下使用pnp型,如果我們所監(jiān)測環(huán)境中的溫濕度數(shù)值高于預先設定的數(shù)值時基極變?yōu)榈碗娖?,蜂鳴器報警。四、軟件設計4.1設計思路和流程剛開始需要構思的一個大概的流程圖,接著想明白程序的設計需要哪些部分和東西,構思完成后先建立一個整體的程序框架,把整體的框架分為幾個部分,每一個部分實現(xiàn)自己的功能,然后把每一個分部連接起來,搭建成一個總體程序,然后將編寫的代碼導入到單片機中進行編程。程序代碼的編寫分為三步:第一步、在網(wǎng)上搜集、去圖書館查閱、詢問老師的方式收集資料,然后根據(jù)每個元器件所需要的功能進行編寫代碼實現(xiàn)其基本功能。第二步、把所編寫成功的代碼用Keil軟件進行編譯,如果keil報錯誤則進行修改,編譯沒有錯誤后,生成hex文件。第三步、需要在Proteus軟件中繪制出電路的仿真電路圖,然后把生成的hex文件下載到電路圖中的單片機中進行仿真實驗,若有錯則進行檢查并修改錯誤,沒有錯誤后保存電路仿真的文件,最后焊接實物完成畢業(yè)設計所需硬件。4.2系統(tǒng)運行圖在系統(tǒng)運行中如何進行溫濕度檢測步驟:先給設備通電各個設備進行初始化設置,設定預先設置的溫濕度范圍,改變DHT11監(jiān)測范圍內(nèi)的溫度和濕度,溫濕度傳感器自動監(jiān)測到溫濕度數(shù)值,單片機主機進行判斷,若在設定范圍內(nèi)蜂鳴器不報警,LCD顯示當前溫濕度數(shù)值,若超出設定范圍蜂鳴器進行報警,控制設備啟動,LCD顯示出溫濕度數(shù)值。流程圖如下圖4-2所示:圖4-2整個系統(tǒng)軟件運行走向圖4.3按鍵流程圖檢查運行中是否有按鍵按下,見下圖4-2圖4-3檢驗按鍵圖4.4Proteus仿真圖圖4--44.5整體電路圖和部分電路圖1.整體電路框圖.整個電路的整體框圖,見下圖4-1圖4-1整體電路框圖2.運行模式下電路圖LCD液晶顯示器正常運作下的電路圖,見下圖4-2圖4-2運行模式下的電路圖LCD1602顯示器TA:預先設定的溫度值L手動設定的最低溫度值H手動設定的最高溫度值RH:預先設定的濕度值L手動設定的最低濕度值H手動設定的最高濕度值3.按鍵設置模式圖電路圖中按鍵的設置,見下圖4-3圖4-3按鍵設置模式圖4.LCD正確顯示設置成功下的顯示圖LCD液晶顯示屏顯示設定的數(shù)值,見下圖4-4圖4-4LCD正確顯示設置圖

結論本文設計了溫濕度監(jiān)測報警與控制系統(tǒng)。數(shù)字式溫濕度傳感器采用高性價比AT89C51單片機控制,溫濕度傳感器采集溫濕度數(shù)據(jù)。當所檢測的室內(nèi)外溫濕度超過我們預先設定的溫度、濕度值,數(shù)據(jù)傳輸?shù)絾纹瑱C上,單片機進行處理控制蜂鳴器發(fā)出警報聲音,當溫濕度降低到設定的數(shù)值內(nèi),蜂鳴器停止報警,讓其恢復正常。首先介紹了本設計的核心部分AT89C51的基本結構和原理,并且簡要說明了中斷、復位和時鐘三個主要構成電路。接下來還介紹了LED顯示器各個引腳的功能和連接方式。同時也介紹了傳感器和蜂鳴器兩個重要的器件,以準備以下程序。其次,還介紹了溫濕度傳感器的結構、功能、及其連接方式,而且還在protues軟件中進行仿真實驗檢驗其是否能正常工作。同時也列舉出在完成實驗的中所需要的軟件,整體電路連接完成后在protues軟件中畫出原理圖并進行仿真,所有工作準備就緒,將各個器件焊接起來組成成品,查看是否可以正常使用,能否無誤的對溫濕度進行檢測。

參考文獻[1]孫宏宇.牛舍環(huán)境及供料自動控制系統(tǒng)的研究[D].吉林農(nóng)業(yè)大學,2008:24[2]湯武輝.Proteus仿真軟件與單片機實驗教學[N].長江大學學報(自然版),2010,(3):33-36.[3]王劍,朱濤,李冬.protel99se電路仿真在電子實驗教學中的應用[J].2010,(5):38-40.[4]王國防.基于nRF24E1的數(shù)據(jù)采集及無線傳輸系統(tǒng)的研究[D].河北科技大學,2009:8-10.[5]張冬林,李鑫戴梅.基于DHT11的低成本蠶室溫濕度自動控制系統(tǒng)設計[J].現(xiàn)代農(nóng)業(yè)科技,2010,(18):11.[6]徐春河.淺談AT89S51[J].制造業(yè)自動化,2010,(12):6.[7]薛玲,孫曼,張志會,夏莉麗,魏希文.基于單片機AT89S51的溫濕度控制儀[J].2010,(7):12-14.[8]吳漢清.常用的典型單片機資料[J].無線電,2007,(11):50-57.[9]葉健斌.基于單片機嵌入式系統(tǒng)的GPS應用[J].電子質(zhì)量,2008,(7):16-24.[10]王靜.通用庫房溫濕度測控系統(tǒng)[D].中國海洋大學,2009:5.[11]劉寶元,張玉虹,姜旭,段存麗.基于單片機的溫濕度監(jiān)控系統(tǒng)設計[J].國外電子測量技術,2009,(12):30-33,35.[12]陳汝全.實用微機與單片機控制技術[M].電子科技大學出版社.2005:16-17.[13]張廣軍,黃俊欽.溫度傳感器現(xiàn)場動態(tài)校準方法與實驗研究[J]北京航空航天大學學報1997:7-9.[14]李建民.單片機在溫度控制系統(tǒng)中的應用[M].江漢大學學報,1996:72-78.[15]Vizimuller,P.Basicknowledgeoftransducers[J].WorldCement.2000[16]Tulone,S.Madden.Quorumsystemsforwirelesssensornetworks[J].2007

附錄本節(jié)列出了本次論文的代碼,并且順利在KeilⅤ軟件正確運行,將代碼輸入到protues仿真圖中的AT89C51單片機中,可以順利進行仿真,各個元器件正常工作。#include<reg51.h>//定義頭文件#include"key_contrl.h"#include"lcd1602.h"#defineLCM_DataP1#defineBusy0x80//用于檢測LCM狀態(tài)字中的標識externinttemp_value,humi_value;externintflag;externinttemp;sbitred=P2^6;sbitblue=P2^7;sbitLCM_RW=P2^4;//定義各個引腳sbitLCM_RS=P2^5;sbitLCM_E=P2^3;sbitbeep=P0^6;//到0時候發(fā)出聲音externinttemph,templ,disp_mode,huih,huil;externchartel,teh,hh,hl;//寫入數(shù)據(jù)voidalarm(){ beep=0; Delay5Ms(); Delay5Ms(); beep=1; Delay5Ms(); Delay5Ms();}voidWriteDataLCM(unsignedcharWDLCM){ReadStatusLCM();//檢測LCMLCM_Data=WDLCM;LCM_RS=1;LCM_RW=0;LCM_E=0;//定義晶振速度LCM_E=0;//延時0秒LCM_E=1;}//寫入相關指令指令voidWriteCommandLCM(unsignedcharWCLCM,BuysC)//為0時忽略盲檢測{if(BuysC)ReadStatusLCM();//根據(jù)需要檢測LCM_Data=WCLCM;LCM_RS=0;LCM_RW=0;LCM_E=0;LCM_E=0;LCM_E=1;}//讀取數(shù)據(jù)unsignedcharReadDataLCM(void){LCM_RS=1;LCM_RW=1;LCM_E=0;LCM_E=0;LCM_E=1;return(LCM_Data);}//讀取LCM狀態(tài)unsignedcharReadStatusLCM(void){LCM_Data=0xFF;LCM_RS=0;LCM_RW=1;LCM_E=0;LCM_E=0;LCM_E=1;while(LCM_Data&Busy);//檢測信號return(LCM_Data);}voidLCMInit(void)//LCM的初始化{LCM_Data=0;WriteCommandLCM(0x38,0);//三次顯示模式設置,不檢測信號Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1);//顯示模式設置,開始要求每次檢測忙信號WriteCommandLCM(0x08,1);//關閉顯示W(wǎng)riteCommandLCM(0x01,1);//顯示清屏WriteCommandLCM(0x06,1);//顯示光標移動設置WriteCommandLCM(0x0C,1);//顯示開及光標設置}//在指定位置顯示一個字符voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData){Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1if(Y)X|=0x40;//當要顯示第二行時地址碼0x40;X|=0x80;//算出指令碼WriteCommandLCM(X,0);//這里不檢測盲信號,發(fā)送地址碼WriteDataLCM(DData);}//在指定位置顯示一串字符voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData){unsignedcharListLength;ListLength=0;Y&=0x1;X&=0xF;//限制X不能大于15,Y不能大于1while(DData[ListLength]>0x20)//若到達字串尾則退出{if(X<=0xF)//X坐標應小于0xF{DisplayOneChar(X,Y,DData[ListLength]);//顯示單個字符ListLength++;X++;}}}//5ms延時函數(shù)voidDelay5Ms(void){unsignedintTempCyc=5552;while(TempCyc--);}/*voidDelay_xMs(unsignedintx){unsignedinti,j;for(i=0;i<x;i++){for(j=0;j<500;j++);}}*/voiddisplay_temp(void){ DisplayOneChar(0,0,''); DisplayOneChar(1,0,''); DisplayOneChar(2,0,'T'); DisplayOneChar(3,0,'e'); DisplayOneChar(4,0,'m'); DisplayOneChar(5,0,'p'); DisplayOneChar(6,0,':'); DisplayOneChar(10,0,'C'); DisplayOneChar(9,0,0xdf); DisplayOneChar(7,0,temp_value/100+0x30); DisplayOneChar(8,0,(temp_value/10)-(temp_value/100)*10+0x30); DisplayOneChar(11,0,''); DisplayOneChar(12,0,''); DisplayOneChar(13,0,''); DisplayOneChar(14,0,''); DisplayOneChar(15,0,''); DisplayOneChar(0,1,''); DisplayOneChar(1,1,''); DisplayOneChar(2,1,'H'); DisplayOneChar(3,1,'u'); DisplayOneChar(4,1,'m'); DisplayOneChar(5,1,'i'); DisplayOneChar(6,1,'d'); DisplayOneChar(7,1,'i'); DisplayOneChar(8,1,'t'); DisplayOneChar(9,1,'y'); DisplayOneChar(10,1,':'); DisplayOneChar(11,1,humi_value/100+0x30); DisplayOneChar(12,1,(humi_value/10)-(humi_value/100)*10+0x30); DisplayOneChar(13,1,'%'); DisplayOneChar(14,1,''); DisplayOneChar(15,1,'');} voiddisplay_temp1(void){ DisplayOneChar(0,0,''); DisplayOneChar(1,0,'T'); DisplayOneChar(2,0,'h'); DisplayOneChar(3,0,':'); if(flag&teh) { DisplayOneChar(4,0,0x20); DisplayOneChar(5,0,0x20); } else { DisplayOneChar(4,0,temph/10+0x30); DisplayOneChar(5,0,temph%10+0x30); } DisplayOneChar(6,0,0xdf); DisplayOneChar(7,0,'C'); DisplayOneChar(8,0,''); DisplayOneChar(9,0,'T'); DisplayOneChar(10,0,'h'); DisplayOneChar(11,0,':'); if(flag&tel) { DisplayOneChar(12,0,0x20); DisplayOneChar(13,0,0x20); } else { DisplayOneChar(12,0,templ/10+0x30); DisplayOneChar(13,0,templ%10+0x30); } DisplayOneChar(14,0,0xdf); DisplayOneChar(15,0,'C'); DisplayOneChar(0,1,''); DisplayOneChar(1,1,'H'); DisplayOneChar(2,1,'h'); DisplayOneChar(3,1,':'); if(flag&hh) { DisplayOneChar(4,1,0x20); DisplayOneChar(5,1,0x20); } else { DisplayOneChar(4,1,huih/10+0x30); DisplayOneChar(5,1,huih%10+0x30); } DisplayOneChar(6,1,'%'); DisplayOneChar(7,1,''); DisplayOneChar(8,1,''); DisplayOneChar(9,1,'H'); DisplayOneChar(10,1,'l'); DisplayOneChar(11,1,':'); if(flag&hl) { DisplayOneChar(12,1,0x20); DisplayOneChar(13,1,0x20); } else { DisplayOneChar(12,1,huil/10+0x30); DisplayOneChar(13,1,huil%10+0x30); } DisplayOneChar(14,1,'%'); DisplayOneChar(15,1,'');} voiddisplayfun1(){ display_temp();}voiddisplayfun2(){ display_temp1(); }voiddisplay(){ if((((temp_value/10)%100)<templ)||(((humi_value/10)%100)<huil)) {beep=0;red=0;}//溫度低于預設定溫度值,蜂鳴器報警 elseif(((temp_value/10)%100)>=temph||((humi_value/10)%100)>=huih) {beep=0;blue=0;}//溫度高于或等于預設定溫度值,蜂鳴器報警 else{beep=1;red=1;blue=1;}// if(((humi_value/10)%100)<huil){beep=0;led=0;}//溫度低于預設定溫度值,報警// elseif(((humi_value/10)%100)>=huih)beep=0;//溫度高于或等于預設定溫度值,報警// else{beep=1;led=1;} if(!disp_mode) displayfun1();//顯示正常 else displayfun2();//設置界面}#include"dht11.h"#include<reg52.h>//請根據(jù)自己的dht11接的IO口來改動位定義sbitdht11=P3^0;//防止在與硬件通信時發(fā)生死循環(huán)的計數(shù)范圍#defineNUMBER20#defineSIZE5staticunsignedcharstatus;//存放五字節(jié)數(shù)據(jù)的數(shù)組staticunsignedcharvalue_array[SIZE];/*可在其他的文件引用溫濕度值,實際是溫度的整數(shù)的10倍如dht11讀回的溫度是26,則temp_value=260,濕度同理*/inttemp_value,humi_value;staticunsignedcharReadValue(void);voidDelay_1ms(unsignedintms){ unsignedintx,y; for(x=ms;x>0;x--) { for(y=124;y>0;y--); }}staticvoidDHT11_Delay_10us(void){ unsignedchari; i--; i--; i--; i--; i--; i--;}/*讀一個字節(jié)的數(shù)據(jù)*/staticunsignedcharDHT11_ReadValue(void){ unsignedcharcount,value=0,i; status=OK;//設定標志為正常狀態(tài) for(i=8;i>0;i--) { //高位在先 value<<=1; count=0; //每一位數(shù)據(jù)前會有一個50us的低電平時間.等待50us低電平結束 while(dht11==0&&count++<NUMBER); if(count>=NUMBER) { status=ERROR;//設定錯誤標志 return0;//函數(shù)執(zhí)行過程發(fā)生錯誤就退出函數(shù) } //26-28us的高電平表示該位是0,為70us高電平表該位1 DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us(); //延時30us后檢測數(shù)據(jù)線是否還是高電平 if(dht11!=0) { //進入這里表示該位是1 value++; //等待剩余(約40us)的高電平結束 while(dht11!=0&&count++<NUMBER) { dht11=1; } if(count>=NUMBER) { status=ERROR;//設定錯誤標志 return0; } } } return(value);}//讀溫度和濕度函數(shù),讀一次的數(shù)據(jù),共五字節(jié),讀出成功函數(shù)返回OK,錯誤返回ERRORunsignedcharDHT11_ReadTempAndHumi(void){ unsignedchari=0,check_value=0,count=0; EA=0; dht11=0;//拉低數(shù)據(jù)線大于18ms發(fā)送開始信號 Delay_1ms(20);//需大于18毫秒 dht11=1;//釋放數(shù)據(jù)線,用于檢測低電平的應答信號 //延時20-40us,等待一段時間后檢測應答信號,應答信號是從機拉低數(shù)據(jù)線80us DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us(); DHT11_Delay_10us(); if(dht11!=0)//檢測應答信號,應答信號是低電平 { //沒應答信號 EA=1; returnERROR; } else { //有應答信號 while(dht11==0&&count++<NUMBER);//等待應答信號結束 if(count>=NUMBER)//檢測計數(shù)器是否超過了設定的范圍 { dht11=1; EA=1; returnERROR;//讀數(shù)據(jù)出錯,退出函數(shù) } count=0; dht11=1;//釋放數(shù)據(jù)線 //應答信號后會有一個80us的高電平,等待高電平結束 while(dht11!=0&&count++<NUMBER); if(count>=NUMBER) { dht11=1; EA=1;

溫馨提示

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

最新文檔

評論

0/150

提交評論