久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6140|回復: 0
打印 上一主題 下一主題
收起左側

51單片機+DHT11的恒溫控制系統資料+程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:702467 發表于 2020-5-12 18:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
   溫度和濕度是兩個基本的環境參數。在我們的生活中,我們要時刻關心環境的變化,只有很好的把握好環境的差異變化,我們才能更好的生存與發展。比如說在一些養殖廠,牲畜的成長,和溫濕度是離不開的,它們只有在適宜的環境下,在適宜的溫度和濕度下,才能成長的更快,我們才能獲取更大的效益。準確測量溫濕度在生物藥學、食品加工、造紙業等行業更是至關重要。總之,無論在日常生活中還是在工業、農業方面都離不開對周圍環境溫濕度的測量。因此,研究溫濕度的控制和測量具有非常重要的意義。
由于傳感器能將各種物理量、化學量和生物量等信號轉變為電信號,使得人們可以利用計算機實現自動測量、信息處理和自動控制。傳感器主要用于測量和控制系統,它的性能好壞直接影響系統的性能。因此我們必須掌握各種傳感器的結構、原理及其性能指標,通過對傳感器實例的分析了解,才能將傳感器和信息通信和信息處理結合起來,適應傳感器的生產、研制和開發及應用。溫濕度傳感器發展速度快,應用領域也很廣泛,并且還有很大發展潛力,為了提高對傳感器的認識和了解,尤其是對溫濕度傳感器的深入研究,基于實時、準確和廣泛的原則進行了設計。
本文設計的是基于單片機AT89C51的溫濕度檢測和控制系統,主要以廣泛應用的DHT11溫濕度傳感器作為溫度和濕度數據的采集,該傳感器具有測量精度高、硬件電路簡單、數據傳輸方便,可測試不同環境溫濕度的特點。另外和控制電路相連,可以進行閾值的控制,使溫度和濕度參數在預先設定的范圍內,不需要人的直接參與。

空氣中的水蒸汽吸附在感濕材料上后,元件的阻抗、介質常數發生很大的變化,從而制成濕敏元件。近年來,國內外在濕度傳感器研發領域取得了較大的發展。濕敏傳感器正從簡單的濕敏元件向集成化、智能化、多參數檢測的方向迅速發展。國內外各廠家的濕度傳感器產品水平不一,質量價格都相差較大,用戶如何選擇性能價格比最優的理想產品確有一定難度,需要在這方面作深入的了解。現在國內市場上出現了不少國內外濕度傳感器產品,電容式高分子聚合物,氯化鋰和金屬氧化物。
    測量溫濕度的關鍵是溫濕度傳感器。過去測量溫度與濕度是分開的。隨著技術的進步和人們生活的需要出現了溫濕度共測的傳感器。溫度傳感器的發展經歷了3個階段:傳統的分立式溫度傳感器、模擬集成溫度傳感器、智能集成溫度傳感器。目前,國際上新型溫度傳感器正從模擬式向數字式、從集成化向智能化、網絡化的方向發展。溫濕度傳感器也是經歷了這樣一個階段逐漸走向數字智能化。
溫濕度檢測系統在國內各行業的發展水平仍然不高,雖然應用已經十分廣泛,但從國內生產的溫濕度檢測器來講發展水平仍然不高,同日本、美國、德國等先進國家相比,仍然有著較大的差距。
進入21世紀后,特別在我國加入WTO后,國內產品面臨巨大挑戰。各行業特別是傳統產業都急切需要應用電子技術、自動控制技術進行改造和提高。例如紡織業,溫濕度是影響紡織品質量的重要因素,但紡織企業對溫濕度的控制手段仍很粗糙,十分落后,絕大多數仍然在使用干濕球溫度計,采用人工觀測,人工調節閥門、風機的方法,其控制效果可想而知。制藥行業里也基本如此。在食品行業里,則基本上憑經驗,很少有人使用溫濕度傳感器。
1.3 設計的市場現狀分析
縱觀市場,溫濕度檢測技術已經比較成熟,已有的各種溫濕度檢測產品,五花八門,如A2000家用溫濕度報警表、YD-808A工業用溫濕度顯示器等產品。 從功能上分析這些產品可以看出,一個比較完整的環境溫濕度檢測系統應該具備以下主要的三個功能:
   (1)實時檢測出環境中的溫度和濕度參數;
   (2)檢測的參數值顯示在顯示設備上(如數碼管,液晶顯示器等);
   (3)根據環境要求,設定溫度濕度報警的上下限值,并實時報警。
因此,本設計也應該具備這些功能,并且對每一個部分進行優化設計,也可以擴展系統功能。
除了功能上的分析之外,再看這些產品還存在一個問題就是價格太高,不符合普通消費者的消費水平,如A2000家用溫濕度報警表,售價300元左右。
    綜上所述,本設計設計出的環境溫濕度檢測系統,除了具備市場上已有產品的功能之外,還應該盡量降低制作價格。
1.4 溫濕度檢測技術和存在的問題
傳統的溫度和濕度檢測系統主要有以下幾種:
   (1)水汽壓(e):是水汽在大氣總壓力中的分壓力。它表示了空氣中水汽的絕對含量的大小,以毫巴為單位;
   (2)相對濕度(rh):濕空氣中實際水汽壓e與同溫度下飽和水汽壓E的百分比,相對濕度的大小能直接表示空氣距離飽和的相對程度。空氣完全干燥時,相對濕度為零。相對濕度越小,表示當時空氣越干燥。當相對濕度接近于100%時,表示空氣很潮濕,越接近于飽和;
   (3)露點(或霜點)溫度:指空氣在水汽含量和氣壓都不改變的條件下,冷卻到飽和時的溫度;
   (4)干濕球溫度表:用一對并列裝置的、形狀完全相同的溫度表,一支測氣溫,稱干球溫度表,另一支包有保持浸透蒸餾水的脫脂紗布,稱濕球溫度表;
   (5)發濕度表(計):利用脫脂人發(或牛的腸衣)具有空氣潮濕時伸長,干燥時縮短的特性,制成毛發濕度表或濕度自記儀器,它的測濕精度較差,毛發濕度表通常在氣溫低于-10℃時使用;
   (6)電阻式濕度片:利用吸濕膜片隨濕度變化改變其電阻值的原理,常用的有碳膜濕敏電阻和氯化鋰濕度片兩種。前者用高分子聚合物和導電材料碳黑,加上粘合劑配成一定比例的膠狀液體,涂覆到基片上組成的電阻片;后者是在基片上涂上一層氯化鋰酒精溶液,當空氣濕度變化時,氯化鋰溶液濃度隨之改變從而也改變了測濕膜片的電阻;
   (7)薄膜濕敏電容:是以高分子聚合物為介質的電容器,因吸收(或釋放)水汽而改變電容值。它制作精巧,性能優良,常用在探空儀和遙測中。
隨著智能檢測系統的飛速發展,基于單片機的溫濕度檢測系統將多傳感器系統結合在一起。如何把多傳感器集中于一個檢測控制系統,綜合利用來自多傳感器的信息,獲得對被測對象的可靠了解和解釋,以利于系統做出正確的響應、決策和控制,是智能檢測控制系統中需要解決的首要問題。在溫濕度要求嚴格的場合,利用多傳感技術可以提高系統的可靠性和精度,亦可以提高系統的時間空間的覆蓋范圍。
1.5 設計內容和預期結果
1.5.1 主要完成內容
本文主要完成的內容有:
(1) 確定系統的總體功能設計方案;
(2) 完成總體設計方案原理圖的繪制;
(3) 完成硬件電路的焊接及調試;
(4) 完成軟件系統的設計及編譯。
1.5.2 本文的設計思路
本文的設計目的是要對空氣中的溫度和濕度進行檢測。系統的數據采集部分是溫濕度傳感器完成的,溫濕度傳感器將采集到的數據送入AT89C51單片機中,然后通過液晶顯示器LCD1602進行顯示,單片機將預設的參考值與測量值進行比較,根據比較結果作出判斷,當溫濕度值超過允許的誤差范圍,系統將發出報警聲音。
(1)系統硬件設計
通過比較,選用AT89C51單片機來構造本系統。在設計過程當中,單片機的P0口用于液晶LCD1602顯示, P3.4、P3.5、P3.6、P3.7為獨立式鍵盤接口,P1.0口接溫濕度傳感器DHT11,P2.4口連接蜂鳴報警器。
(2)系統模塊設計
測控模塊:檢測所處環境的溫濕度數據。顯示模塊:溫度和濕度采用液晶顯示,分兩行顯示使測量結果更直觀,便于管理人員做出決策。報警模塊:系統采用三極管驅動的蜂鳴音報警,當溫濕度超過系統所設置的閾值時,蜂鳴器就會發生報警。鍵盤模塊;鍵盤采用的是獨立式鍵盤,可分別設置溫度和濕度的上限值。
1.5.3 預期結果
根據設計方案及思路,預測出現的設計結果,當系統完好的設計完后,連接所有的硬件設備,運行相應的軟件設備。
軟硬件連接完好,電路完善的情況下,肉眼能看到的是經過一系列的軟硬件編譯過的在LCD液晶顯示器上顯示的數字,當液晶顯示器顯示的溫濕度值超過了預定的值時系統發出報警提示,當溫濕度值沒有超過預定的溫濕度范圍,測系統接收下一次的溫濕度采集值。

2  溫濕度測量系統方案設計
2.1系統總體設計
系統要完成的設計功能如下:
(1)實現對環境溫濕度參數的實時采集,由單片機對數據進行循環檢測、數據處理、顯示,實現溫濕度的連續測量;
(2)實現超限數據的及時報警;
(3)現場檢測設備應具有較高的靈敏度、可靠性、抗干擾能力;
(4)軟件設計既要具有完成數據采集、處理的功能,其軟件編程應具有功能強大、界面友好、便于操作和執行速度快。
設計要達到的技術指標:
(1)測量范圍: 濕度20-90%RH, 溫度0-50℃;                  
(2)測量精度: 濕度±5%RH, 溫度±2℃;                                           
(3)分 辨 率: 濕度1%RH, 溫度1℃。
(4)測量數據無線上傳到手機進行顯示。
    該設計的總體方案是數據采集用的是DHT11溫濕度傳感器,它是一款含有已校準數字信號輸出的溫濕度復合傳感器,傳感器包括一個電阻式感濕元件和一個NTC測溫元件,具有品質卓越、超快響應、抗干擾能力強、性價比極高等特點。單片機采用AT89C51,液晶顯示采用LCD1602,報警采用蜂鳴器,鍵盤使用獨立鍵盤,外加復位電路和時鐘電路,測量數據無線上傳串口WIFI模塊。
溫度濕度信號通過溫濕度傳感器進行信號的采集并轉換成數字信號,再運用單片機AT89C51進行數據的分析和處理,并在LCD1602上顯示當前溫濕度。外加復位電路、時鐘電路、鍵盤電路和報警電路。系統程序主要包括數據采集程序、溫溫度閾值設置程序、報警程序及顯示程序等。本設計可以通過鍵盤手動設置溫度濕度的上、下限值,該設定值為系統閾值。溫濕度傳感器將檢測到的值傳輸給單片機,通過分析比較,當檢測數值超出閾值時,驅動蜂鳴器報警,以便管理人員及時切斷電源,實現系統的保護。

2.2 系統設計原則
要求單片機系統應具有可靠性高、操作維護方便、性價比高等特點。設計原則有以下幾個:
(1)可靠性高 可靠性是單片機系統應用的前提,在系統設計的每一個環節,都應該將可靠性作為首要的設計準則。提高系統的可靠性通常從以下幾個方面考慮:使用可靠性高的元器件;設計電路板時布線和接地要合理;對供電電源采用抗干擾措施;輸入輸出通道抗干擾措施;進行軟硬件濾波等。

溫度、濕度設置參數斷電保存模塊

電路選擇了AT24C01電路作為溫度、濕度參數的儲存電路。AT24C01是美國Atmel公司的低功耗CMOS型E2PROM,內含256×8位存儲空間,具有工作電壓寬(2.5~5.5 V)、擦寫次數多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強、數據不易丟失、體積小等特點。而且他是采用了I2C總線式進行數據讀寫的串行器件,占用很少的資源和I/O線,并且支持在線編程,進行數據實時的存取十分方便。AT24C01中帶有的片內地址寄存器。每寫入或讀出一個數據字節后,該地址寄存器自動加1,以實現對下一個存儲單元的讀寫。所有字節均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字節的數據。I2C總線是一種用于IC器件之間連接的二線制總線。他通過SDA(串行數據線)及SCL(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,并根據地址識別每個器件。 AT24C01正是運用了I2C規程,使用主/從機雙向通信,主機(通常為單片機)和從機(AT24C01)均可工作于接收器和發送器狀態。主機產生串行時鐘信號(通過SCL引腳)并發出控制字,控制總線的傳送方向,并產生開始和停止的條件。無論是主機還是從機,接收到一個字節后必須發出一個確認信號ACK。AT24C01的控制字由8位二進制數構成,在開始信號發出以后,主機便會發出控制字,以選擇從機并控制總線傳送的方向。
管腳描述:
●  SCK 為串行時鐘:
    串行時鐘輸入管腳用于產生器件所有數據發送或接收的時鐘這是一個輸入管腳。
● SDA 為串行數據/地址:
雙向串行數據/地址管腳用于器件所有數據的發送或接收SDL,是一個開漏輸出管腳可與其它開漏輸出或集電極開路輸出進行線。
●  A0、A1、A2 為器件地址輸入端:
當使用24C02 時最大可級聯8個器件,如果只有一個24C01被總線尋址,這三個地址輸入腳A0、A1、A2可懸空或連接到Vss。
● WP為寫保護:
如果WP 管腳連接到Vcc 所有的內容都被寫保護只能讀當WP, 管腳連接到Vss 或懸空,允許器件進行正常的讀/寫操作。管腳圖如圖3-3所示。

特點:
內建128x8存儲序列
2線制串行接口
雙向數據傳送協議
100kHz(1.8V,2.5V,2.7V) 和400kHz(5V)兼容
寫同步時鐘(最大10ms)
高可靠性
-極限:1M寫時鐘周期
-數據保存:100年
AT24C01提供電可擦除的串行1024位存儲或可編程只讀存儲器(EEPROM)128字(8位/字)。
芯片在低壓的工業與商業應用中進行了最優化。AT24C01的封裝為8腳PDIP、8腳JEDEC
SOIC、8腳TSSOP,通過2線制串行接口進行數據傳輸。
設備操作: SDA管腳通常外部要拉高。SDA管腳上的數據只能在SCL低期間改變。數據在SCL高期間改變定義為一個開始或停止信號。
開始狀態:在任何操作之前必須有一個開始信號----在SCL為高時SDA上產生一個下降沿。
停止狀態: SCL為高時SDA產生一個上升沿是停止信號,停止信號后將停止所有通信。
在一個讀的序列之后,停止信號將讓EEPROM進入備用電源模式。

3.8報警模塊及溫度濕度控制模塊

本系統采用蜂鳴器作為報警裝置,蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。 蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、“LB”、“JD”等)表示。

3.8.1蜂鳴器報警原理及溫度濕度控制模塊原理

本設計采用蜂鳴音報警電路,其工作過程就是把傳感器采集的數據通過單片機處理后,與該參數上限給定值進行比較,如果高于上限值則進行報警。同時當溫度,濕度低于設計值時,自動啟動加溫電、加濕設置進行加溫、加濕工作。
蜂鳴器發聲原理是電流通過電磁線圈,使電磁線圈產生磁場來驅動振動膜發聲的,因此需要一定的電流才能驅動它,單片機I/O口引腳輸出的電流較小,單片機輸出的TTL電平基本上驅動不了蜂鳴器,因此需要增加一個電流放大的電路。所以才用一個三極管來放大驅動蜂鳴器。在本系統中峰鳴器報警接口電路的設計采用壓電式蜂鳴器,通過AT89C51的1根I/O口線經驅動器驅動蜂鳴音發聲。壓電式蜂鳴器約需10mA的驅動電流,可以用一個晶體三極管驅動,P2.4接晶體管基極輸入端。當P2.4輸出高電平“1”時,晶體管導通,壓電蜂鳴器兩端獲得約+5V電壓而鳴叫;當P2.4輸出低電平“0”時,三極管截止,蜂鳴器停止發聲。

3.8.2 報警電路接口

聲光報警系統由一個電阻R2,一個三極管BG1和一個蜂鳴器BY以及發光二極管D5與限流電阻R10組成,三極管用來放大電路中的電流,來驅動蜂鳴器發聲,在發聲的同時發光二極管D5閃亮。報警系統連接單片機的I/O口P2.3,當單片機檢測到溫度或者濕度超出所設置的閾值時,就會給P2.3置低電平0,這時三極管導通,蜂鳴器報警,如果沒有超出閾值,P2.3置高電平1,三極管截止。R4與D1組成溫度過低的報警指示電路及啟動加溫控制指示電路,溫度低于溫度設置下限值時,D1點亮,同時P1.7腳由高電平變為低電平,經R9、BG3驅動繼電器工作,電機M2轉動(用來模擬加熱電器及加熱通風機工作),當溫度高于下限值時,D1O熄,同時M2停止工作。R5與D2組成溫度高報警電路,溫度高于上限值時,D2點亮。R6與D3組成濕度過低的報警指示電路及啟動加濕水泵控制指示電路,R7、D4組成濕度高的報警指示電路,當濕度低于設置下限值時,D3點亮,同時P1.6腳由高電平變為低電平,經R8、BG2驅動繼電器工作,電機M1轉動(用來模擬加濕水泵工作),當濕度高于下溫度下限值時,D3熄滅,這時水泵繼續工作,當濕度高于濕度設置上限值時,D4點亮,同時停止加濕水泵工作。報警模塊及加濕模塊電路圖如圖3.12所示。

圖3.12報警電路及加濕加溫電路模塊

3.9供電電路

整個濕度溫度測量裝置的供電設計采用5伏直流電源進行供電,圖中C1,C2作為電源濾波電容。供電電源可以直接選用目前市面上比較多的手機充電電源作為供電電源,這種電源工作可靠,安全適用,成本低。

3.9小結

本系統設計主要有主控模塊、顯示模塊、溫濕度采集模塊、WIFI串口通信模塊、鍵盤模塊、報警模塊、復位電路和時鐘電路八大模塊。其中主控模塊AT89C51的晶振電路采用12MHz的無源晶振,微調電容大小取22pF。顯示模塊選用LCD1602字符型液晶模塊,是目前工控系統中使用最為廣泛的液晶屏之一。溫濕度采集模塊所采用的DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器,它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性與穩定性;其單線制串行接口,使系統集成變得簡易快捷。報警模塊采用蜂鳴器,采用PNP型晶體管9012放大單片機I/O口的電流。系統的輸入模塊采用獨立式鍵盤,操作簡單,溫濕度檢測方便準確。該設計最終要實現的目標是,溫濕度采集數據并傳輸到單片機,單片機經過數據處理在發送到液晶顯示器顯示,同時單片機會將采集到的數據同系統設置溫度、濕度值進行比較,如果超過定值,報警電路就會發出報警聲光信號,如果溫度、濕度在設置范圍內,單片機就會繼續采集溫濕度數據。            
鍵盤一共有四個鍵,開關K1、K2、K3、K4分別接單片機的I/O口P3.4、P3.5、P3.6 、P3.7。K1是模式選擇鍵,用來選擇溫度、濕度上下限值。K2和K3分別為設置溫度、濕度上下限值, K4為保存鍵,設置完成按下該鍵后儲存設置參數。顯示器一共是兩行顯示,第一行顯示的是溫度,第二行顯示的是濕度。
在完成了系統硬件的設計后,再設計系統軟件,首先要建立程序框架的流程圖,對整個設計劃分模塊,逐個模塊實現其功能,最終把各個子模塊合理的連接起來,構成總的程序,這樣能快速準備的進行編程。首先建立主程序框架流程圖,弄明白整個系統程序設計,其次再分別設計顯示模塊、傳感器模塊和鍵盤模塊的程序,最后在進行整合,形成一個完整的程序。
本系統采用C語言編程。C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。
C語言編程的優點有:
(1)簡潔緊湊、靈活方便。C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元。   
(2)運算符豐富。C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。   
(3)數據類型豐富。C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。并引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。
(4)語法限制不太嚴格,程序設計自由度大。雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。   
4.1 主程序模塊程序設計
本系統的整個程序流程是首先上電,系統各部分進行初始化,單片機初始化,液晶顯示器初始化等。初始化完成后進行鍵盤掃描,然后再進行延時一段時間,供傳感器采集數據,延時完成后就進行數據的采集并傳輸到單片機,單片機處理之后傳輸到液晶顯示器,液晶顯示器顯示溫濕度值。并且判斷溫度和濕度是否超出閾值,如果沒有超過,就繼續執行數據采集程序,如果有一個值超出閾值,則啟動報警系統,蜂鳴器發出聲音,溫濕度檢測結束。主程序流程圖如圖4.1所示。


液晶顯示模塊是一個慢顯示器件,在執行每條指令之前要確認模塊的忙標志為低電平,表示不忙,則此指令失效,要顯示字符時要先輸入顯示字符地址,告訴模塊在哪里顯示了字符。1602液晶顯示模塊可與單片機接口直接連接,無需再加驅動。
LCD1602的顯示數據過程是首先液晶初始化,初始化完成后執行延時程序,等待數據的采集,延時完成后LCD會先寫入一些指令和顯示字符的地址,在這完成后單片機會向LCD發送數據即寫數據,數據發送完LCD就會讀取寫入的地址并顯示出來,最后返回。軟件流程圖如圖4.2所示。





圖4.3 DHT11傳感器模塊的軟件流程圖

傳感器模塊負責溫濕度數據源的采集,首先數據口連接端P1.0輸出低電平,延時18ms之后P1.0輸出高電平,延時40ms之后,讀P1.0引腳是否為低電平,如果不是低電平就繼續讀,如果是低電平就執行判斷從機80μs高電平是否結束,如果沒有結束就繼續判斷,如果結束就進行單片機數據接收,將接收到的數據按十進制數位存入指定的數組中,數據采集結束并保持數據采集持續進行。

4.4 鍵盤模塊設計

鍵盤模塊是用來設置系統閾值的,首先通過模式選擇鍵開閾值并選擇溫度和濕度的設置,加一鍵和減一鍵是對溫度和濕度的設置。第一次按模式鍵然后經過延時可以開閾值和進行濕度的設置,第二次按模式鍵并延時是溫度的設置,第三次按模式鍵是關閾值。
鍵盤模塊軟件流程圖如圖4.4所示。







圖4.4 鍵盤模塊軟件流程圖

4.5 小結

本系統的軟件設計采用了C語言編程,只需對溫度和濕度進行相應的采集處理后,即可讓液晶實時顯示當前的溫度與濕度值。報警模塊只需接上單片機的I/O 口,并對其接口線進行編程方可,當溫度與濕度超過閾值時報警模塊就會報警。這樣就可以完成環境中溫濕度的檢測。
    本設計在完成硬件電路設計并焊接好電路硬件的基礎上,通過串口模塊將軟件代碼下載至AT89C51單片機中完成系統集成。由于采用了AT89C51單片機,性能可靠、電路簡單,系統中還可充分利用AT89C51中先進的軟件硬件資源,便于軟件系統的升級,操作方便。


設計制作51單片機DHT11的溫濕度檢測系統,程序設計及試工作是一項重要內容,所設計的程序51單片機DHT11的溫濕度檢測系統程序只是在編譯環境下通過編譯,消除編程工作中產生的語法錯誤后,直接將程序寫入單片機中與硬件一起進行聯調,如果這時硬件設計制作是正確的還好說,只需要進行軟件的調試修改,燒寫到硬件環境中驗證直到達到設計要求即可,但這個工作也是需要反復不停地修改程序并燒錄到硬件單片機中進行調試,但如果說硬設計、制作及程序設計都存在問題,整個調試工作就顯得無從下手,給軟件調試、硬件故障排出帶來非常大的困難,增加不少工作量,甚至造成系統設計制作的失敗。有好的解決辦法嗎?回答是肯定的,就是程序仿真,編譯通過的程序,在Proteus環境下,按設計的硬件原理圖,把仿真圖畫好,調入程序在Proteus仿真環境下進行程序的仿真,來驗證程序設計的正確性及各項功能是否達到設計要求,在仿真環境下完成程序的調試工作。通過仿真調試滿意后的程序,再燒寫到硬件環境下調試,這時,如果硬件工作正常,可以進一步的驗證程序的功能及正確性,如果工作不正常,這時可排出軟件設計的問題,集中精力排出硬件設計、制作的問題,有針對性的排出,從而可提高設計制作過程中的效率,大大減輕制作工作量,使單片機DHT11的溫濕度檢測系統制作成功率可以得到100%的保證。下圖是本設計的仿真圖。

6  設計中遇到的問題及解決方法

6.1 硬件問題及解決方法

   (1)LCD1602不顯示:
    檢查LCD各個端口與單片機的連接是否接通,發現都通著,又檢查了LCD數據口連接順序與單片機的I/O口順序是否一致,最后發現LCD的數據口順序接反了,最后把LCD的D0-D7接單片機的I/O口P0.0-P0.7后,工作正常了。。
   (2)蜂鳴器不響:
因為剛開始不知道老師給的三極管是啥型號的,自己就用萬用表測試了一下就焊接上了,結果不響,我就按照三極管的型號上網查了一下結果發現自己檢測錯了,自己的是PNP型的,三個管腳分別是字面對著自己ebc。然后卸下來重新焊上去蜂鳴器就響了。
   (3)LCD1602顯示亂碼:
把程序下載到單片機上,液晶顯示的不是程序要顯示的內容。我就用萬用表檢查8根數據線是否都接通,結果發現都是連通的。然后就考慮是不是數據線短路了,用萬用表分別測量8跟數據線有沒有短路的,結果發現有一根在焊接的時候不小心焊到旁邊的焊盤上了,導致數據線接到了電源線上,那根數據線就會一直顯示高電平,所以顯示就亂碼了。用烙鐵把連接的焊錫分開以后,重新上電發現液晶顯示正常了。

6.2 軟件所遇問題及解決方法

   (1)鍵盤問題
按鍵沒有按照程序設計的工作,模式鍵沒有起作用,加減鍵也不規律的進行加減。通過仔細檢查程序,通過檢查按鍵硬件電路發現按鍵電路都好著呢,然后再檢查程序,發現程序中按鍵按下之后沒有用延時程序,就給程序中各個按鍵后邊加了個延時程序,下載程序之后發現按鍵可以實現功能了。
   (2)濕度顯示不穩定
在數據采集完成以后,顯示在顯示器上,發現濕度顯示不穩定,一直在跳動。剛開始以為是正常情況,可是最后發現跳動的特別厲害,跳動幅度也很大。最后想到可能是單片機一直在采集數據然后顯示數據,中間沒有停歇才導致顯示不穩定,就給數據采集前加了個延時程序,通過串口下載程序后,發現濕度顯示穩定了。

隨著社會的發展,科技越來越越發達,我們的生活也越來越智能化。溫濕度是我們生活環境中的兩個重要的參數,在我們的生活中,我們要時刻關心環境的變化,只有很好的把握好環境的差異變化,我們才能更好的生存與發展。
本文設計的溫、濕度智能測控系統主要有以下幾個各方面:
(1)采用AT89C51單片機為控制核心;
(2)采用數字式溫度傳感器DHT11為溫、濕度數據采集器件,通過PC機作為人機接口,實現了數據采集與測控指令參數的設置;
(3)顯示部分采用已標準的1602液晶為顯示屏,具有顯示質量高、體積小、功耗低等優點。
本系統整體設計具有界面友好、控制靈活、硬件系統集成度高、電路簡單、功能強、性能可靠、成本低等特點。對我們的生活特別有幫助 。
在這次設計中我也學到了很多東西主要,原來在課堂上學習的單片機知識都是理論,從沒有實踐過,這次設計就讓我的理論知識應用到了實踐中。經過近這一段時間的努力,從拿到題目,到后來查找資料,理論學習,焊接電路板,實驗編程調試,這一切都使我的理論知識和動手能力有了很大的提高。了解了單片機的硬件結構和軟件編程方法,對單片機的工作方式有了很大的認知。同時,對一些外圍設備比如傳感器、液晶屏、鍵盤、蜂鳴器等有了一定的了解。
本系統具有較強的實用性,具體方面有:
(1)我對DHT11與DS18B20及一些水銀溫濕度測量器的測量數據進行了比較,驗證了DHT11測量數據的準確性和穩定性。低廉的價格、小巧的體積、準確穩定的測量數據、簡單的單總線控制方式、簡潔的電路連接,這些將使DHT11擁有良好的應用前景;
(2)LCD1602液晶具有顯示質量高、體積小、功耗低等優點,在以后會得到更廣泛的應用。


附錄1 硬件原理圖




附錄2 PCB圖

附錄3元件布置圖
源程序
  1. #include <REGX51.H>
  2. #include <intrins.h>
  3. #include <math.h>     
  4. #include <stdio.h>      

  5. #define uchar unsigned char
  6. #define uint unsigned int
  7.                         //24c02讀指令
  8. sbit DATA=P1^0;
  9. // AT24C02 數據端

  10. sbit k1=P3^4;                               //按鍵
  11. sbit k2=P3^5;                               //按鍵
  12. sbit k3=P3^6;                               //按鍵
  13. sbit k4=P3^7;                               //按鍵
  14. sbit beep=P2^3;
  15. sbit led1=P1^2;
  16. sbit led2=P1^3;
  17. sbit led3=P1^4;
  18. sbit led4=P1^5;
  19. sbit led5=P1^6;
  20. sbit led6=P1^7;

  21. sbit RS  = P2^0;
  22. sbit RW  = P2^1;
  23. sbit E  = P2^2;
  24. sfr DBPort  = 0x80;     //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數據端口



  25. uchar temp,humi;
  26. uchar error;                                //用于檢驗是否出現錯誤
  27. uchar checksum,nn;                          //CRC                    
  28. uchar nn;                                         //蜂鳴器                    
  29. uchar TEMP_data[6];                         //用于記錄實測的溫度
  30. uchar HUMI_data[5];                         //用于記錄實測的濕度
  31. uchar set_temp[5];                          //保存設定的溫度
  32. uchar set_humi[4];                          //保存設定的濕度
  33. uchar idata temp_humi_cache[8];             //溫濕度設置緩存
  34. uint temp_high;                                 //溫度上限變量
  35. uint temp_low;                              //溫度下限變量
  36. uint humi_high;                             //濕度上限變量
  37. uint humi_low;                              //濕度下限變量
  38. uchar presskeynum;                          //按鍵次數變量
  39. uchar  U8FLAG,k;
  40. uchar  U8count,U8temp;
  41. uchar  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  42. uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  43. uchar  U8comdata;
  44. uchar  count, count_r=0;

  45. /********     1602函數聲明     ********/
  46. void LCD_Initial();
  47. void GotoXY(unsigned char x, unsigned char y);
  48. void Print(unsigned char *str);
  49. void LCD_Write(bit style, unsigned char input);

  50. /*************************************************************************/


  51. void Delay1(uint );
  52. void  Delay_10us(void);
  53. void  COM(void);
  54. uchar RH(void);

  55. //1602程序
  56. //內部等待函數*************************************************************
  57. unsigned char LCD_Wait(void)
  58. {
  59.     RS=0;
  60.     RW=1;    _nop_();
  61.     E=1;    _nop_();           
  62.     E=0;
  63.     return DBPort;  
  64. }
  65. //向LCD寫入命令或數據********************************************************
  66. #define LCD_COMMAND         0      // Command
  67. #define LCD_DATA            1      // Data
  68. #define LCD_CLEAR_SCREEN    0x01      // 清屏
  69. #define LCD_HOMING          0x02      // 光標返回原點
  70. void LCD_Write(bit style, unsigned char input)
  71. {
  72.     E=0;
  73.     RS=style;
  74.     RW=0;        _nop_();
  75.     DBPort=input;   _nop_();//注意順序
  76.     E=1;        _nop_();//注意順序
  77.     E=0;        _nop_();
  78.     LCD_Wait();
  79. }

  80. //設置顯示模式************************************************************
  81. #define LCD_SHOW            0x04    //顯示開
  82. #define LCD_HIDE            0x00    //顯示關

  83. #define LCD_CURSOR          0x02    //顯示光標
  84. #define LCD_NO_CURSOR       0x00    //無光標        

  85. #define LCD_FLASH           0x01    //光標閃動
  86. #define LCD_NO_FLASH        0x00    //光標不閃動

  87. void LCD_SetDisplay(unsigned char DisplayMode)
  88. {
  89.     LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
  90. }

  91. //設置輸入模式************************************************************
  92. #define LCD_AC_UP       0x02
  93. #define LCD_AC_DOWN         0x00      // default

  94. #define LCD_MOVE            0x01      // 畫面可平移
  95. #define LCD_NO_MOVE         0x00      //default

  96. void LCD_SetInput(unsigned char InputMode)
  97. {
  98.     LCD_Write(LCD_COMMAND, 0x04|InputMode);
  99. }

  100. //初始化LCD************************************************************
  101. void LCD_Initial()
  102. {
  103.     E=0;
  104.     LCD_Write(LCD_COMMAND,0x38);           //8位數據端口,2行顯示,5*7點陣
  105.     LCD_Write(LCD_COMMAND,0x38);
  106.     LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開啟顯示, 無光標
  107.     LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  108.     LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC遞增, 畫面不動
  109. }

  110. //液晶字符輸入的位置************************
  111. void GotoXY(unsigned char x, unsigned char y)
  112. {
  113.     if(y==0)
  114.         LCD_Write(LCD_COMMAND,0x80|x);
  115.     if(y==1)
  116.         LCD_Write(LCD_COMMAND,0x80|(x-0x40));
  117. }

  118. //將字符輸出到液晶顯示
  119. void Print(unsigned char *str)
  120. {
  121.     while(*str!='\0')
  122.     {
  123.         LCD_Write(LCD_DATA,*str);
  124.         str++;
  125.     }
  126. }


  127. /****************************24C02程序部分******************************************

  128. /**********************************************************************************/

  129. void Delay24(void)
  130. {unsigned char i;
  131.    for(i=0;i<20;i++);

  132. }
  133. //***********************************************************************************
  134. void Delay24_10ms(void)
  135. {unsigned int i;
  136.    for(i=0;i<500;i++);
  137. }

  138. //****讀一字節************************************

  139. void  Delay_10us(void)
  140. {
  141.     uchar i;
  142.     i--;
  143.     i--;
  144.     i--;
  145.     i--;
  146.     i--;
  147.     i--;
  148. }

  149. void  COM(void)
  150. {
  151.     uchar i;
  152.     for(i=0;i<8;i++)           
  153.     {
  154.               U8FLAG=2;
  155.                    while((!DATA)&&U8FLAG++);
  156.                 Delay_10us();
  157.                 Delay_10us();
  158.                 Delay_10us();
  159.                   U8temp=0;
  160.         if(DATA)U8temp=1;
  161.                 U8FLAG=2;
  162.                 while((DATA)&&U8FLAG++);                  
  163.                    if(U8FLAG==1)break;
  164.                     U8comdata<<=1;
  165.                    U8comdata|=U8temp;        
  166.     }
  167. }

  168. //--------------------------------
  169. //-----溫濕度讀取子程序 ------------
  170. //--------------------------------
  171. //----以下變量均為全局變量--------
  172. //----溫度高8位== U8T_data_H------
  173. //----溫度低8位== U8T_data_L------
  174. //----濕度高8位== U8RH_data_H-----
  175. //----濕度低8位== U8RH_data_L-----
  176. //----校驗 8位 == U8checkdata-----
  177. //----調用相關子程序如下----------
  178. //---- Delay();, Delay_10us();,COM();
  179. //--------------------------------
  180. uchar RH(void)
  181. {
  182.     DATA=0;                                                  //主機拉低18ms
  183.         Delay1(180);                                  //原來為5
  184.         DATA=1;                                                //總線由上拉電阻拉高 主機延時20us
  185.         Delay_10us();
  186.         Delay_10us();
  187.         Delay_10us();
  188.         Delay_10us();
  189.         DATA=1;                                                   //主機設為輸入 判斷從機響應信號
  190.         if(!DATA)                 //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行         
  191.         {
  192.             U8FLAG=2;

  193.             while((!DATA)&&U8FLAG++);        //判斷從機是否發出 80us 的低電平響應信號是否結束         
  194.             U8FLAG=2;
  195.                   while((DATA)&&U8FLAG++);    //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  196.             COM();                                                //數據接收狀態
  197.             U8RH_data_H_temp=U8comdata;
  198.             COM();
  199.             U8RH_data_L_temp=U8comdata;
  200.             COM();
  201.             U8T_data_H_temp=U8comdata;
  202.             COM();
  203.             U8T_data_L_temp=U8comdata;
  204.             COM();
  205.             U8checkdata_temp=U8comdata;
  206.             DATA=1;
  207.             U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);        //數據校驗
  208.             if(U8temp==U8checkdata_temp)
  209.             {
  210.                       U8RH_data_H=U8RH_data_H_temp;
  211.                       U8RH_data_L=U8RH_data_L_temp;
  212.                       U8T_data_H=U8T_data_H_temp;
  213.                       U8T_data_L=U8T_data_L_temp;
  214.                       U8checkdata=U8checkdata_temp;
  215.             }

  216.                 return 1;
  217.         }
  218.         else                                                                           //傳感器不響應
  219.         {
  220.            return 0;
  221.         }
  222. }

  223. void delay(uint z)                          //延時函數z為毫秒數
  224. {
  225.    int a,b;
  226.    for(a=z;a>0;a--)
  227.    for(b=120;b>0;b--);
  228. }

  229. void key()
  230. {
  231.    uchar m;
  232.    if (k1==0)                               //調整按鍵檢測
  233.    {
  234.       delay(10);
  235.       if (k1==0)
  236.       {
  237.          presskeynum++;
  238.          if(presskeynum==5)
  239.          presskeynum=0;
  240.          while(k1==0);
  241.          LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  242.       }
  243.    }
  244.    if(presskeynum==1)//溫度上限設置
  245.    {
  246.       if(k2==0)// 加
  247.       {
  248.          delay(300);
  249.          temp_high++;
  250.          if (temp_high>99)
  251.          temp_high=0;
  252.          if (temp_high<0)
  253.          temp_high=99;
  254.          while(k2==0);       //加上此句必須松按鍵才處理
  255.       }
  256.       if(k3==0)//減
  257.       {
  258.          delay(300);
  259.          temp_high--;
  260.          if (temp_high>99)
  261.          temp_high=0;
  262.          if (temp_high<0)
  263.          temp_high=99;
  264.          while(k3==0);       //加上此句必須松按鍵才處理
  265.       }
  266.    }
  267.    if(presskeynum==2)//溫度下限設置
  268.    {
  269.       if(k2==0)// 加
  270.       {
  271.          delay(300);
  272.          temp_low++;
  273.          if (temp_low>99)
  274.          temp_low=0;
  275.          if (temp_low<0)
  276.          temp_low=99;
  277.          while(k2==0);
  278.       }
  279.       if(k3==0)
  280.       {
  281.          delay(300);
  282.          temp_low--;
  283.          if (temp_low>99)
  284.          temp_low=0;
  285.          if (temp_low<0)
  286.          temp_low=99;
  287.          while(k3==0);
  288.       }
  289.    }
  290.    if(presskeynum==3)//濕度上限設置
  291.    {
  292.       if(k2==0)// 加
  293.       {
  294.           delay(300);
  295.           humi_high++;
  296.           if (humi_high>99)
  297.           humi_high=0;
  298.           if (humi_high<0)
  299.           humi_high=99;
  300.           while(k2==0);
  301.       }
  302.       if(k3==0)
  303.       {
  304.           delay(300);
  305.           humi_high--;
  306.           if (humi_high>99)
  307.           humi_high=0;
  308.           if (humi_high<0)
  309.           humi_high=99;
  310.           while(k3==0);
  311.       }
  312.    }
  313.    if(presskeynum==4)//濕度下限設置
  314.    {
  315.       if(k2==0)//加
  316.       {
  317.           delay(300);
  318.           humi_low++;
  319.           if (humi_low>99)
  320.           humi_low=0;
  321.           if (humi_low<0)
  322.           humi_low=99;
  323.           while(k2==0);
  324.       }
  325.       if(k3==0)// 減
  326.       {
  327.           delay(300);
  328.           humi_low--;
  329.           if (humi_low>99)
  330.           humi_low=0;
  331.           if (humi_low<0)
  332.           humi_low=99;
  333.           while(k3==0);
  334.       }
  335.    }
  336.    if(k4==0)// 退出鍵
  337.    {
  338.       delay(10);
  339.       if(k4==0)
  340.       {
  341.           while(k4==0);
  342.           presskeynum=0;

  343.           LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);                           //清屏
  344.        }
  345.    }
  346. }
  347. void main()                                                         //主函數
  348. {
  349.    uchar t;
  350.    k1=k2=k3=k4=1;
  351.    for (t=0;t<=7;t++)

  352.    LCD_Initial();    //液晶初始化

  353.    while(1)
  354.    {
  355.        key();
  356.        if(presskeynum==0)
  357.        {  
  358.                         RH();                                               //測量溫濕度
  359.                            temp=U8T_data_H;
  360.                            humi=U8RH_data_H;
  361.                    GotoXY(0,0);                                       //選擇溫度顯示位置
  362.             Print("Temp:     C");                                             //5格空格
  363.             GotoXY(0,1);                                       //選擇濕度顯示位置
  364.             Print("Humi:     %");                                             //5格空格                           
  365.             GotoXY(5,0);                                       //設置溫度顯示位置
  366.                         if(temp>=10)
  367.                         {
  368.                     TEMP_data[0]=temp/10+'0';                                         //溫度十位      
  369.                     TEMP_data[1]=temp%10+'0';                           //溫度個位
  370.                         }
  371.                         else
  372.                         {
  373.                     TEMP_data[0]=' ';                                                         //溫度十位      
  374.                     TEMP_data[1]=temp%10+'0';                           //溫度個位
  375.                         }
  376.             TEMP_data[2]=0x2e;                                  //小數點
  377.             TEMP_data[3]='0';                               //溫度小數點后第一位            
  378.             TEMP_data[4]=0xdf;                                  //顯示溫度符號℃
  379.             TEMP_data[5]='\0';
  380.             Print(TEMP_data);                                   //輸出溫度               
  381.             GotoXY(5,1);
  382.                         if(humi>=10)
  383.                         {
  384.                             HUMI_data[0]=humi/10+'0';                                         //濕度十位      
  385.                     HUMI_data[1]=humi%10+'0';                           //濕度個位
  386.                         }
  387.                         else
  388.                         {
  389.                             HUMI_data[0]=' ';                                                         //濕度十位      
  390.                     HUMI_data[1]=humi%10+'0';                           //濕度個位                        
  391.                         }                                                                   //設置濕度顯示位置                                       
  392.             HUMI_data[2]='.' ;                                  //小數點
  393.             HUMI_data[3]='0';                               //濕度小數點后第一位   
  394.             HUMI_data[4]='\0';
  395.             Print(HUMI_data);                                   //輸出濕度         
  396.             if ((temp)<temp_low)
  397.             {
  398.                                 led1=0;
  399.                                 led6=0;
  400.                         }
  401.                         else
  402.                         {
  403.                     led1=1;
  404.                                  led6=1;
  405.                         }
  406.             if ((temp+1)>temp_high)
  407.             led2=0;
  408.             else
  409.             led2=1;
  410.             if ((humi)<humi_low)
  411.             led3=0;
  412.             else
  413.             led3=1;
  414.             if ((humi+1)>humi_high)
  415.             led4=0;
  416.             else
  417.             led4=1;
  418.             if ((humi)<humi_low)                                                  //控制繼電器加濕
  419.             led5=0;
  420.             else if ((humi)>=humi_high)  
  421.             led5=1;
  422.             if (((temp)<temp_low)|((temp+1)>temp_high)|((humi)<humi_low))
  423.             {
  424.                 for (nn=0;nn<50;nn++)
  425.                 {
  426.                     beep=0;
  427.                     delay(1);
  428.                     beep=1;
  429.                     delay(1);
  430.                 }
  431.             }
  432.             if ((humi)>humi_high)
  433.             {
  434.                 for (nn=0;nn<10;nn++)
  435.                 {
  436.                     beep=0;
  437.                     delay(1);
  438.                     beep=1;
  439.                     delay(1);
  440.                 }
  441.             }               
  442.         }
  443.         if(presskeynum==1)                                      //設定溫度上限時顯示的內容
  444.         {
  445.             set_temp[0]=temp_high/10+0x30;
  446.             set_temp[1]=temp_high%10+0x30;
  447.             set_temp[2]=0xdf;
  448.             set_temp[3]='C';
  449.             set_temp[4]='\0';
  450.             GotoXY (0,0);
  451.             Print("SET TEMP HIGH:");
  452.             GotoXY (0,1);
  453.             Print(set_temp);
  454.         }
  455.         if(presskeynum==2)                                      //設定溫度下限時顯示的內容
  456.         {
  457.             set_temp[0]=temp_low/10+0x30;
  458.             set_temp[1]=temp_low%10+0x30;
  459.             set_temp[2]=0xdf;
  460.             set_temp[3]='C';
  461.             set_temp[4]='\0';
  462.             GotoXY (0,0);
  463.             Print("SET TEMP LOW:");
  464.             GotoXY (0,1);
  465.             Print(set_temp);
  466.         }
  467.         if(presskeynum==3)                                      //設定濕度上限時顯示的內容
  468.         {
  469.             set_humi[0]=humi_high/10+0x30;
  470.             set_humi[1]=humi_high%10+0x30;
  471.             set_humi[2]='%';
  472.             set_humi[3]='\0';
  473.             GotoXY (0,0);
  474.             Print("SET HUMI HIGH:");
  475.             GotoXY (0,1);
  476.             Print(set_humi);
  477.         }
  478.         if(presskeynum==4)                                      //設定濕度下限時顯示的內容
  479.         {
  480.             set_humi[0]=humi_low/10+0x30;
  481.             set_humi[1]=humi_low%10+0x30;
  482.             set_humi[2]='%';
  483.             set_humi[3]='\0';
  484.             GotoXY (0,0);
  485.             Print("SET HUMI LOW:");
  486.             GotoXY (0,1);
  487.             Print(set_humi);
  488.         }      
  489.     }
  490. }

復制代碼
以上的Word格式文檔51黑下載地址:
源程序.docx (17.1 KB, 下載次數: 22)
SD002_基于DHT11的溫濕度控制系統設計.doc (4.77 MB, 下載次數: 29)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 81精品国产乱码久久久久久 | 欧美中文字幕一区二区三区亚洲 | 特黄视频 | 午夜www| www.日韩系列 | 亚洲精品www | 蜜桃视频在线观看免费视频网站www | 在线中文字幕国产 | 99久久精品国产一区二区三区 | 中文字幕第一页在线 | 亚洲免费视频在线观看 | 天堂中文在线播放 | 久久高清| 精品美女久久久 | 日韩一区二区在线免费观看 | www国产成人免费观看视频 | 中文字幕成人在线 | 欧美在线视频二区 | 超碰人人艹| 国产一区二区三区 | 精品视频在线免费观看 | 欧美一级欧美三级在线观看 | 国产成人一区二区三区 | 国产精品久久久久久福利一牛影视 | 黄色成人av | 欧美a在线看 | 欧美一a一片一级一片 | av大片在线观看 | 日本成人在线观看网站 | 毛片在线视频 | 91精品国产综合久久久久久丝袜 | 国产伦精品一区二区三区四区视频 | 密色视频 | 欧美一区在线视频 | 精品一区二区三区在线播放 | 黄网站色大毛片 | 亚洲国产专区 | 欧美久久精品一级黑人c片 91免费在线视频 | 久久精品日产第一区二区三区 | 久久久精 | 亚洲国产精品va在线看黑人 |