從開始到最后都有詳細的過程
摘 要 本次設計是采用MSC-51系列單片機中的AT89S51和DHT11構成的低成本的溫濕度的檢測控制系統(tǒng)。單片機AT89S51是一款低消耗、高性能的CMOS8位單片機,由于它強大的功能和低價位,因此在很多領域都是用它。DHT11溫濕度傳感器是一款含有已校準數字輸出的溫濕度復合傳感器,傳感器包括一個電阻式感濕原件和一個NTC測溫元件,該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優(yōu)點。設計主要包括硬件電路的設計和系統(tǒng)軟件的設計。 硬件電路主要包括單片機、溫濕度傳感器、顯示模塊、報警器以及控制設備等5部分。其中由DHT11溫濕度傳感器及1602字符型液晶模塊構成系統(tǒng)顯示模塊;測溫濕度控制電路由溫濕度傳感器和預設溫度值比較報警電路組成;用戶根據需要預先輸入預設值,當實際測量的溫濕度不符合預設的溫濕度標準時,發(fā)出報警信號(蜂鳴器蜂鳴),啟動相應控制。 軟件部分包括了主程序、顯示子程序、測溫濕度子程序。
目 錄 前 言 1.1本文研究的背景及意義 1.2研究現狀 1.3本文研究的主要內容 第2章 設計任務分析及方案論證 2.1設計過程及其工藝要求設計 2.2設計總體方案及其論證 2.3器件選定 2.4 AT89S51單片機 2.5中斷系統(tǒng) 2.6復位電路 2.7時鐘電路 2.8顯示部分 2.9本章小結 第3章 硬件設計 3.1主控制電路和測溫時控制電路 3.2主要模塊的電路 3.3硬件實施控制 3.4設備運行 3.5控制設備: 3.6 本章小結 第4章 軟件設計 4.1系統(tǒng)流程圖 4.2按鍵流程圖 4.3 Protues運行結果 4.4 本章小結 結 論 參考文獻 附 錄
前 言1.1本文研究的背景及意義糧庫已經被廣泛的運用,是存儲糧食的一個重要方式。是糧食倉庫的簡稱,是糧食倉儲企業(yè)習慣稱謂,屬于全民所有制企業(yè),是我國糧食企業(yè)的一個重要組成部分,由糧食部門統(tǒng)一管理,擔負著國家糧食儲備、地方糧食儲備、糧食流通的主渠道作用,其主要任務是完成糧食的接受、保管和調運輸送等糧食流通諸環(huán)節(jié)。在不同季節(jié)內,尤其是不利于存儲食物的季節(jié)內進行的一種保護措施。 因此研究溫濕度的控制非常有必要,它可以進一步優(yōu)化儲存控制方式,提升水平。 1.2研究現狀我國地大物博,各地的自然環(huán)境條件不同,所以在不利于存儲糧食的自然環(huán)境中,具有可調節(jié)溫濕度的可控糧庫更能夠創(chuàng)造適宜存儲的條件,中國各地經濟水平和發(fā)達水平有比較大的差異,所以研制出又具有實用價值并且采用最低的成本達到最好的效果是非常有必要的,既節(jié)約了人力親自檢查,又節(jié)約制造成本,不會對貧困地區(qū)造成經濟負擔,又避免了能源和經濟浪費[1]。 本系統(tǒng)所要完成的任務是: ①人性化的設計。界限溫度值及濕度值能夠由用戶根據不同被儲存的糧食的存儲需求輸入并通過顯示器顯示,能夠實時、準確的顯示采樣溫度值與濕度值。 ②通過采集溫度及濕度值,準確的判斷標準值與當前值之間的差異,看是否符合標準值,及時的啟動報警裝置(包括警報燈的提示功能以及蜂鳴等)進行報警,并采取相應控制溫濕度的方案。 1.3本文研究的主要內容一、首先我們必須了解溫濕度控制對儲存糧食的重要性,其次我們才能夠對此作出更好的判斷,以求更好的解決用戶所需要的問題。 二、溫濕度的監(jiān)測和控制是我們研究的主要內容。數字化溫濕度檢測的方法為一旦環(huán)境中的溫濕度發(fā)生變化時,濕度傳溫度感器和濕度傳感器隨著溫濕度的變化而變化,然后將變化的電阻通過轉換電路和轉換信號檢測為與之對應變化的電壓,然后把模擬電壓信號由A/D轉換器轉換為數字信號并送入到單片機中,對采集到的信號單片機進行濾波處理并通過查表得到實際測量的濕度值,之后通過單片機的各外部接口電路顯示該溫濕度值。 三、該系統(tǒng)通過按鈕設定最適宜的溫度和濕度,傳感器向中央控制系統(tǒng)輸送監(jiān)控信號,超過預設值的話,蜂鳴器就會報警提醒,控制溫、濕度的設備即可作出調整,回到正常范圍內,系統(tǒng)正常運行。 四、根據各種不同糧食的適宜溫度進行溫室溫度調節(jié),若低于下限溫度則采取升溫措施,通常采取電熱增溫和火力增溫等,電熱增溫比較方便。若高于上限溫度則采取降溫措施,通常通過水管降溫和風扇降溫,風扇降溫比較方便;為滿足糧庫不同種類糧食對濕度的要求,可以在地上、臺階、盆壁灑水,還可以在空中懸掛濕布,以增加水分的蒸發(fā),最好的辦法是設置自動噴霧裝置,自動調節(jié)濕度。如果濕度過大,容易導致植被過于潮濕,發(fā)生腐爛,可采用烘干技術,加快水分流失,保持被存儲糧食的干燥。為滿足對于不同糧食的儲存方式和需求,我們可以隨時對溫、濕度進行調節(jié),對于不利情況能夠及時的作出顯示,并能夠采取相應的措施提醒用戶進行調整,以達到最適宜的溫濕度。
第2章 設計任務分析及方案論證本章詳細介紹了本次設計的主要任務,以及對于所要實現的內容加以分析,同時詳細的介紹了主要元器件的選擇,以及各自的特性。 2.1設計過程及其工藝要求設計一個以單片機為核心的溫濕度控制系統(tǒng),需要實現的功能為: ①能夠準確的顯示當前的溫度以及濕度。溫度檢測的范圍0℃-60℃,測溫精度:±2℃;濕度檢測范圍20%-100%RH, 測濕精度:±5%RH。 ②能夠自主調節(jié)當前需要溫度以及濕度的預設溫濕度值,在系統(tǒng)上面有調節(jié)按鈕,可隨時根據需要增加或者減少預設值。 ③一旦發(fā)現超過了預設值,蜂鳴器蜂鳴報警,控制設備立即啟動,立即調控溫濕度。 ④報警方式為三極管驅動的蜂鳴音報警。 ⑤系統(tǒng)的顯示方式均為四位顯示,采用LCD顯示。 2.2設計總體方案及其論證2.2.1設計總體方案及其論證本設計要實現的功能是:實時顯示當前環(huán)境的溫濕度,并且允許用戶設定溫濕度標準值,當環(huán)境溫濕度超過或低于標準值時,系統(tǒng)會以蜂鳴器鳴響的方式進行報警提示,并且控制設備自啟動,待達到標準值時,蜂鳴器停止鳴響,控制設備停止運行,系統(tǒng)正常工作,工作指示燈亮。
(1)溫度監(jiān)控:對溫室溫度進行測量和控制并反映在顯示器上。 (2)濕度監(jiān)控:對溫室濕度進行測量和控制反映在顯示器上。 (3)顯 示:LCD就地顯示此時此刻溫濕度值,擺放在生產現場用于顯示當前的溫濕度。 依據功能設定,本系統(tǒng)主要分為以下三個模塊:
(1)溫濕度采集模塊
(2)數據處理模塊
(3)用戶交互模塊
其中溫濕度采集模塊使用的是DHT11數字溫濕度傳感器,它使用單總線方式,接口簡單,而且無需另外校準。分辨率為8bit,完全能夠滿足日常環(huán)境溫濕度的檢測要求。
數據處理模塊使用的是AT89S51單片機,其完成溫濕度數據的采集、運算和邏輯控制的功能。
用戶交互模塊主要由按鍵、1602點陣液晶、蜂鳴器和控制器構成。其中按鍵用于用戶設定溫濕度準確值,1602用于數據顯示,蜂鳴器用于提示用戶,控制器用于調節(jié)控制不符合要求的溫、濕度。按照系統(tǒng)的設計功能所要求的,溫濕度監(jiān)控系統(tǒng)原理圖如下圖2.2.1所示:(在附件中)
圖2-2-1 溫濕度監(jiān)控系統(tǒng)原理圖
單片機作為主控制器,主要負責處理由溫濕度傳感器送來數據,并把處理好的數據送向顯示器模塊,數據溫濕度傳感器主要用來采集周圍的環(huán)境參數,并把所采集到得數據送向單片機,按鍵電路主要是用來完成單片機的復位操作和溫濕度初始值的設定。蜂鳴器電路就是用三極管來實現的,用來判斷周圍的溫度或者濕度是否超出設定數值,控制設備等候指令,當蜂鳴器響起,溫、濕度不在標準范圍內,控制設備自行啟動,直到溫、濕度正常,顯示電路主要用來顯示當前的溫濕度[10]。 2.3器件選定將單片機用作測控系統(tǒng)時,總要有被測信號輸入通道,由計算機拾取必要的輸入信息。對于測量系統(tǒng)而言,其核心任務是怎么樣獲得準確的被測信號;而對測控系統(tǒng)來說,不可缺少的環(huán)節(jié)是對條件的監(jiān)測和對被控對象狀態(tài)的測試,傳感器是實現測量與控制的第一環(huán)節(jié),是測控系統(tǒng)的關鍵部分,一切準確的測量和控制都將在傳感器對于原始信號的準確可靠的轉換和捕捉,工業(yè)生產過程的自動化測量和控制,基本主要依賴各種傳感器來控制和檢測生產過程中的各種量,使系統(tǒng)和設備在最佳狀態(tài)正常運行,從而保證生產的高質量和高效率 [6]。 2.3.1測量部分:溫濕度傳感器DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器,它應用專用的溫濕度傳感和數字模塊采集技術,具有很高的穩(wěn)定性和可靠性,DHT11傳感器內含一個NTC測溫和一個電阻式感濕元件,并與一個8位的高性能單片機相連接,在精確的濕度校驗室中DHT11傳感器進行過校準,以程序的形式校準系數儲存在0TP內存中,檢測信號的時候,在處理過程中傳感器內部要調用這些校準系數,采用單線制的串行接口[13],使系統(tǒng)集成可以有較低的功耗,而且更加簡單快速,信號傳輸距離超過20米,作為一個數字溫濕度傳感器DHT11具有響應快速、抗干擾強、性價比高等優(yōu)點,它的性能指標如下:濕度測量范圍為20%~90%RH;濕度測量精度為±5%RH;溫度測量范圍為0~50 ℃,溫度測量精度為±2℃,工作電壓3.0~5.5 V,相應時間<5S,DHT1l采用4針單排引腳封裝, 傳感器通電后,需要等待1s,這是因為要越過不穩(wěn)定的狀態(tài),在此期間不需發(fā)送指令,電源引腳(VDD,GND)之間可增加一個100nF 的電容,用以去耦濾波[7]。
1.012.jpg (21.24 KB, 下載次數: 226)
下載附件
2017-5-17 17:14 上傳
圖2-3-1典型的應用電路 電源引腳 四條引角中有兩條是電源引腳,有兩條是輸出數據的引腳,你只需要給他供上額定電壓,然后再他的輸出引腳采集信號就可以了,輸出信號如果是模擬量的話,通過A/D芯片,將模擬量轉換為數字信號,然后傳送給單片機。DHT11是數字傳感器,所以不需要進行模數的轉換。
1.013.jpg (8.53 KB, 下載次數: 219)
下載附件
2017-5-17 17:14 上傳
圖2-3-1 DHT11實物圖 (1)DHT11溫濕度傳感器產品參數: 相對濕度 分 辨 率:16Bit 重 復 性:±1%RH 精 度:25°C ±5%RH 互 換 性:可完全互換 響應時間:1/e(63%)25°C 6s 1m/s 空氣 6s 遲 滯:<±0.3%RH 長期穩(wěn)定性:<±0.5%RH/yr
溫度 分 辨 率:16Bit 重 復 性:±0.2°C 量程范圍:25°C ±2°C 響應時間:1/e(63%) 10s
電氣特征 供 電:DC 3.5-5.5V 供電電流:測量0.3mA 待機60μA 采樣周期:次 大于2秒
引腳說明 (1)VDD 供電3.5-5.5V (2)DATA 串行數據,單總線 (3)NC 空腳 (4)GND 接地,電源負極 2.3.2串行接口(單線雙向)DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數據格式,一次通訊時間4ms左右,數據分小數部分和整數部分,具體格式在下面說明,當前小數部分用于以后擴展,現讀出為零.操作流程如下:一次完整的數據傳輸為40bit,高位先出。 數據格式:8bit濕度整數數據+8bit濕度小數數據+8bit溫度整數數據+8bit溫度小數數據+8bit校驗和。 數據傳送正確時校驗和數據等于“8bit濕度整數數據+8bit濕度小數數據+8bi溫度整數數據+8bit溫度小數數據”所得結果的末8位。 用戶MCU發(fā)送一次開始信號后,DHT11從低功耗模式轉換到高速模式,等待主機開始信號結束后,DHT11發(fā)送響應信號,送出40bit的數據,并觸發(fā)一次信號采集,用戶可選擇讀取部分數據.如果沒有接收到主機發(fā)送開始信號,DHT11不會主動進行溫濕度采集.采集數據后轉換到低速模式。 總線空閑狀態(tài)為高電平的時候主機把總線拉低等待DHT11響應, DHT11能檢測到起始信號,主機必須把總線拉低,至少大于18ms。DHT11一旦接收到主機的開始信號,接著就等待開始信號的結束,然后發(fā)送80us的低電平響應信號,要讀取DHT11的響應信號,必須等待開始信號的結束,并延時等待20-40us后才能夠接受,主機發(fā)送開始信號后,這時候就可輸出高電平或切換到輸入模式,接著總線由上拉電阻拉高。 DHT11發(fā)送響應信號的時候總線為低電平 ,DHT11把總線拉高80us之前,必須等到響應信號發(fā)送,準備發(fā)送數據時,每一bit數據都以50us低電平時隙開始,數據位是0或1是由高電平的長或短來決定。假如響應信號的讀取為高電平,但是DHT11無響應響應,這時候說明路線可能連接不正常,當最后一bit數據傳送結束后,DHT11把總線拉低50us,接著總線由上拉電阻拉高進入空閑狀態(tài)。 2.3.3電氣特性VDD=5V,T = 25℃ 圖2-3-3電氣特性(注:采樣周期間隔不得低于1秒鐘)
2.3.4性能說明
表2-3-4 性能說明 2.3.5引腳說明表2.3.5 DHT11引腳說明
注意 引腳2在接單片機時,同時要在數據線接一上拉電阻,接到電源上[4]。 2.3.6應用信息電阻式溫、濕度傳感器暴露在化學物質中會受到干擾,導致靈敏度下降,當處于極限狀態(tài)時,傳感器可以通過程序處理,回復到初試的校準狀態(tài),在不符合規(guī)范的范圍內使用傳感器,不僅會導致幾乎3%的臨時漂移信號,而且會加速產品的老化,轉為正常的使用范圍后,會漸漸恢復校準狀態(tài);溫度是影響氣體相對濕度的關鍵,因此測量時最好讓濕度傳感器工作溫度相同[5]。 2.3.7 封裝信息
1.014.jpg (8.89 KB, 下載次數: 194)
下載附件
2017-5-17 17:14 上傳
1.015.jpg (6.41 KB, 下載次數: 180)
下載附件
2017-5-17 17:14 上傳
1.016.jpg (5.64 KB, 下載次數: 176)
下載附件
2017-5-17 17:14 上傳
圖2-3-6 DHT11的封裝信息 2.4 AT89S51單片機2.4.1單片機介紹AT89S51是美國ATMEL公司生產的低功耗、高性能CMOS 的8位單片機,片內含4K的可編程的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準8051指令系統(tǒng)及引腳。它集Flash程序存儲器既可在線編程(ISP),也可用傳統(tǒng)方法進行編程及通用8位微處理器于單片機芯片中,低價位AT89S51單片機可為您提供許多高性價比的應用場合,可靈活應用于各種控制的領域【8】。AT89S51提供以下的功能標準:4K字節(jié)閃爍存儲器,128字節(jié)隨機存取數據存儲器,2個16位定時/計數器,32個I/O口, 1個串行通信口,1個5向量兩級中斷結構,另外,AT89S51還可以進行0HZ的靜態(tài)邏輯操作,并支持兩種軟件的節(jié)電模式,閑散方式停止中央處理器的工作,可允許隨機存取數據存儲器、定時/計數器、串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存隨機存取數據存儲器中的內容,但震蕩器停止工作并禁止其它所有部件的工作直到下一個復位,在AT89C51上新增加的功能使AT89S51性能有了較大提升,它的價格甚至更低,它的工作頻率可達33MHz,比AT89C51的工作頻率更高,ISP在線編程功能的優(yōu)越性在于它不必要將芯片從工作狀態(tài)下分離,特別是在改寫存儲器內的程序,這是一個相當方便簡單的功能,它不需要像AT89C51那樣外接看門狗計時器單元電路,由于它內部具有雙工UART串行通道內部集成看門狗計時器,它具有全新的加密算法,大大加強的程序的保密性,有效的保護知識產權不被侵犯,它完全兼容51全部字系列產品[8]。
1.017.jpg (47.81 KB, 下載次數: 201)
下載附件
2017-5-17 17:14 上傳
圖2-5-1 AT89S51引腳圖 2.4.2引腳說明:VCC:電源電壓輸入端。 GND:電源地 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P0口在訪問外部存儲器時,P0口既是一個真正的雙向數據總線口,又是輸出8位地址口。它包括一個輸出鎖存器,兩個三態(tài)緩沖器,一個輸出驅動電路和一個輸出控制電路 P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入”1”后,被內部上拉為高電平,可用作輸入。P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。專門為用戶使用的I/O口,是準雙向口,P1口為8位準雙向口,每一位均可單獨定義為輸入或輸出口。在編程校驗期間,用做輸入低位字節(jié)地址。P1口可以驅動4個TTL負載。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流,這是由于上拉的緣故。P2口也是雙向口。它是供系統(tǒng)擴展時輸出高8位地址。如果沒有系統(tǒng)擴展時,也可以作為用戶的I/O口使用。P2口作為外部數據存儲器或程序存儲器的地址總線的高8位輸出口AB8-AB15,P0口由ALE選通作為地址總線的低8位輸出口AB0-AB7。外部的程序存儲器由PSEN信號選通,數據存儲器則由WR和RD讀寫信號選通,因為2=64k,所以AT89S51最大可外接64kB的程序存儲器和數據存儲器。P3口除了作為普通I/O口,還有第二功能:
表2-5-2 P3口的第二功能 RST:復位輸入端,高電平有效。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:地址鎖存允許/編程脈沖信號端。當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 PSEN:外部程序存儲器的選通信號,低電平有效。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。 EA/VPP:外部程序存儲器訪問允許。注意加密方式1時,EA將內部鎖定為RESET;當EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:片內振蕩器反相放大器和時鐘發(fā)生器的輸入端。 XTAL2:片內振蕩器反相放大器的輸出端。 現在已經對四個8位雙向并行I/O口有了初步的了解。根據以上的內容可知只有P1口是標準的I/O口,所以我們選用P1口作為數據端口,P1口可逐位分別定義各口線為輸入或輸出線[7]。 2.4.3單片機最小系統(tǒng)所謂單片機的最小系統(tǒng)是指使單片機能運行程序、正常工作的最簡單電路系統(tǒng),是保證單片正常啟動、開始工作的必須電路,缺一不可。單片機最小系統(tǒng)一般由單片機、程序存儲器、時鐘電路和復位電路組成。對于AT89S51單片機,由于片內有4K的程序存儲器,所以其最小系統(tǒng)除了單片機本身外,只需外接時鐘電路與復位電路即可。 2.4.4主要性能特點和優(yōu)越性(1)4k Bytes Flash片內程序存儲器; (2)128 bytes的隨機存取數據存儲器(RAM); (3)32個外部雙向輸入/輸出(I/O)口; (4)5個中斷優(yōu)先級、2層中斷嵌套中斷; (5)6個中斷源; (6)2個16位可編程定時器/計數器; (7)2個全雙工串行通信口; (8)看門狗(WDT)電路; (9)片內振蕩器和時鐘電路; (10)與MCS-51兼容; (11)全靜態(tài)工作:0Hz-33MHz; (12)三級程序存儲器保密鎖定; (13)可編程串行通道; (14)低功耗的閑置和掉電模式。 2.5中斷系統(tǒng)2.5.1中斷 程序執(zhí)行過程中,允許外部或內部事件通過硬件打斷程序的執(zhí)行,使其轉向為處理內部事件的中斷服務程序中去;完成中斷服務的程序后,CPU繼續(xù)原來被打斷的程序,這樣的過程稱為中斷過程。 2.5.2產生中斷能產生中斷的外部和內部事件。AT89S51有5個中斷源: (1)INT0:外部中斷0請求,低電平有效。通過P3.2引腳輸入。 (2)INT1:外部中斷1請求,低電平有效。通過P3.3引腳輸入。 (3)T0:定時器/計數器0溢出中斷請求。 (4)TI:定時器/計數器1溢出中斷請求。 (5)TXD/RXD:串行口中斷請求。當串行口完成一幀數據的發(fā)送或接收時,便請求中斷。每一個中斷源都對應一個中斷請求標志位,它們設置在特殊功能寄存器TCON和SCON中。當這些中斷源請求中斷時,相應的標志分別有TCON和SCON中的相應位來鎖存。 2.5.3中斷系統(tǒng)有以下4個特殊功能寄存器(1)定時器控制寄存器TCON(用6位); (2)串行口控制寄存器SCON(用2位); (3)中斷允許寄存器IE; (4)中斷優(yōu)先級寄存器IP。 其中,TCON和SCON只有一部分用于中斷控制。通過對以上各特殊功能寄存器的各位進行置位或復位等操作,可實現各種中斷控制功能。 2.6復位電路 復位是單片機的初始化操作。其主要功能是把PC初始化為000H,使單片機從0000H單元開始執(zhí)行程序。除了進入系統(tǒng)的正常初始化之外,當由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復位鍵重新啟動。 除PC之外,復位操作還對其他一些寄存器有影響,它們的復位狀態(tài)如下圖所示. 表2-8 復位操作對寄存器的影響
為確保微機系統(tǒng)中電路穩(wěn)定可靠工作,復位電路是必不可少的一部分,一般微機電路正常工作需要供電電源為5V±5%,即4.75~5.25V。由于微機電路是時序數字電路,它需要穩(wěn)定的時鐘信號,因此在電源上電時,只有當VCC超過4.75V低于5.25V以及晶體振蕩器穩(wěn)定工作時,復位信號才被撤除,微機電路開始正常工作。單片機的復位分為上電自動復位、按鍵手動復位兩種和看門狗強制復位三種等。上電復位通常利用電容的充放電來實現,按鍵復位則可分為按鍵脈沖復位和按鍵電平復位兩種,看門狗復位則通過外接看門狗電路或軟件看門狗程序實現。常見的有上電復位和按鍵復位電路。 2.7時鐘電路時鐘電路可以簡單定義如下:1.就是產生象時鐘一樣準確的振蕩電路;2.任何工作都按時間順序。用于產生這個時間的電路就是時鐘電路。時鐘電路一般由晶體震蕩器、晶震控制芯片和電容組成。時鐘電路應用十分廣泛,如電腦的時鐘電路、電子表的時鐘電路以及MP3、MP4的時鐘電路。 時鐘電路用于產生單片機的基本時鐘信號,是用來配合外部晶體實現振蕩的電路,這樣可以為單片機提供運行時鐘,如果運行時鐘為0 的話,單片機就不工作,當然超出單片機的工作頻率的時鐘也會導致單片機不工作。時鐘電路是微型計算機的心臟,它控制著計算機的工作節(jié)奏,CPU就是通過復雜的時序電路完成不同的指令功能的。MCS-51的時鐘信號可以由兩種方式:一種是內部方式,利用芯片內部的振蕩電路,產生時鐘信號:另一種為外部方式,時鐘信號由外部引入。如果沒有時鐘電路來產生時鐘驅動單片機,單片機是無法工作的[12]。AT89S51的時鐘信號可由內部振蕩器產生,也可由外部電路直接提供。 內部振蕩器的輸入和輸出腳分別為XTAL1和XATL2,由XTAL2給單片機內部電路提供時鐘信號。當時鐘信號由外部電路提供時,外部時鐘引入XTAL2,而XTAL1腳接地。 2.8顯示部分:LCD
顯示部分是LCD1602液晶顯示,
1.018.jpg (22.53 KB, 下載次數: 169)
下載附件
2017-5-17 17:14 上傳
圖2-8 正常工作LCD1602顯示 2.8.1 LCD1602液晶簡介LCD1602分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的 比不帶背光的厚,是否帶背光在應用中并無差別,兩者尺寸差別如圖2-9所示。
1.019.jpg (28.01 KB, 下載次數: 219)
下載附件
2017-5-17 17:14 上傳
圖2-8-1 LCD1602規(guī)格 字符型液晶顯示模塊是一種專門用于顯示字母、數字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊 2.8.2 LCD1602主要技術參數表2-8-2 1602的主要技術參數
2.8.3引腳功能說明1602液晶模塊的讀寫操作,屏幕和光標的操作都是通過指令編程來實現的。
表2-8-3 引腳接口說明表 LCD1602采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表編號 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1.020.jpg (21.44 KB, 下載次數: 214)
下載附件
2017-5-17 17:14 上傳
圖2-8-3 LCD1602的管腳圖
1.021.jpg (23.43 KB, 下載次數: 185)
下載附件
2017-5-17 17:14 上傳
圖2-8-3 1602字符型液晶顯示器實物圖 2.8.4 LCD1602的RAM地址映射及標準字庫表液晶顯示模塊是一個比較慢的顯示器件,因此在執(zhí)行指令之前要首先確認模塊的忙標志處于低電平,表示空閑,不然此指令失效,輸入顯示字符地址后會顯示字符,圖是1602的內部顯示地址。
1.022.jpg (14.83 KB, 下載次數: 209)
下載附件
2017-5-17 17:14 上傳
圖2-8-4 1602LCD內部顯示地址 2.8.5指令說明LCD1602液晶模塊內部的控制器控制指令: 功能: ①清除液晶顯示器,即將DDRAM的內容全部填入“空白”的ASCII碼20H; ②光標歸位,即將光標撤回液晶顯示屏的左上方; ③將地址計數器(AC)的值設為0.
功能: ①把光標撤回到顯示器的左上方; ②把地址計數器(AC)的值設置為0; ③保持DDRAM的內容不變 (3)進入模式設置指令 功能: 設定每次定入1位數據后光標的以為方向,并且設定每次寫入的一個字符是否移動。參數設定的情況如下所示: 位名 設置 I/D 0=寫入新數據后光標左移 1=寫入新數據后光標右移 S 0=寫入新數據后顯示屏不移動 1=寫入新數據后顯示屏整體右移一個字符 (4)顯示開關指令控制 功能: 控制顯示器開/關、光標顯示/關閉以及光標是否閃爍,參數設定的情況如下: 位名 設置 D 0=顯示功能關 1=顯示功能開 C 0=無光標 1=有光標 B 0=光標閃爍 1=光標不閃爍 功能:使光標移位或使整個顯示屏幕移位。參數設定的情況如下: S/C R/L 設定情況 0 0 光標左移1格,且AC值減1 0 1 光標右移1格,且AC值加1 1 0 顯示器上字符全部左移1格,但光標不動 1 1 顯示器上字符全部右移1格,但光標不動 (6)功能設定指令 功能:設定數據總線為數、顯示的行數及字型。 參數設定的情況如下: 位名 設置 DL 0=數據總線為4位 1=數據總線為8位 N 0=顯示1行 1=顯示2行 F 0=5×7點陣/每字符 1=5×10點陣/每字符 (7)設定CGRAM地址指令 功能:設定下一個要存入數據的CGRAM的地址。 DB5 DB4 DB3為字符號,也就是將來要顯示該字符時要用到的字符地址(000-111)(能定義8個字符) DB2 DB1 DB0為行號。(000-111)(八行)
功能:設定下一個要存入數據的DDRAM的地址 (9)讀取忙信號或AC地址指令 功能: ①讀取忙碌信號BF的內容,BF=1表示液晶顯示器忙,暫時無法接受單片機送來的數據或指令;當BF=0時,液晶顯示器一接受單片機送來的數據或指令 (10)數據寫入DDRAM或CGRAM指令一覽 功能: ①將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應的字符 ②將使用著自己設計的圖形存入CGRAM DB7 DB6 DB5可為任何數據,一般取“000” DB4 DB3 DB2 DB1 DB0對應于每行5點的字模數據 功能:讀取DDRAM或CGRAMD中的內容 基本操作時序: 讀狀態(tài) 輸入:RS=L,RW=H,E=H 輸出:DB0-DB7=狀態(tài)字 寫指令 輸入:RS=L,RW=L,E=下降沿脈沖 DB0-DB7=指令碼 輸出:無 讀數據 輸入:RS=H,RW=H E=H 輸出:DB0-DB7=數據 寫數據 輸入:RS=H,RW=L,E=下降沿脈沖 DB0-DB7=數據 輸出:無 2.8.6顯示設置DDRAM是顯示數據RAM,用來寄存帶顯示的字符代碼,共80個字節(jié)。 表2-8-6 地址和屏幕的對應關系 想要在LCD1602屏幕的第一行第一列顯示一個“A”字,就要向DDRAM的00H地址寫入“A”字的代碼就行了。具體的寫入是要按LCD模塊的指令格式來進行的。在1602中用到16個即可。 第二行也一樣用到前16個地址。 表2-8-6 對應關系 在PC上我們只要打開文本文件就能在屏幕上看到對應的字符是因為在操作系統(tǒng)里和BIOS里都固化有字符字模。字模代表了是在點陣屏幕上點亮和熄滅的信息數據。例如“A”字的字模: 01110 ○■■■○ 10001 ■○○○■ 10001 ■○○○■ 10001 ■○○○■ 11111 ■■■■■ 10001 ■○○○■ 10001 ■○○○■ 上圖左邊的數據就是字模數據,右邊就是將左邊數據用“○”代表0,用“■”代表1。 想要在LCD1602屏幕的第一行第一列顯示一個“A”字,就要向DDRAM的00H地址寫入“A”字的代碼41H即可。在LCD模塊上也固化了字模存儲器,這就是CGROM和CGRAM HD44780內置了192個常用字符的字模,存于字符產生器CFROM Character Generator ROM中,另外還有8個允許用戶自定義的字符產生RAM,稱為CGRAM Character Generator RAM。 2.9本章小結本章節(jié)主要有兩部分,第一部分主要介紹了溫濕度實時監(jiān)測和控制的意義,第二部分主要介紹了設計的總體思路,以及元器件的選擇,并加以詳細的解釋。
第3章 硬件設計
單片機是整個系統(tǒng)的控制中樞,它指揮外圍器件協(xié)調工作,從而完成特定的功能,硬件實現上采用模塊化設計,每一模塊只實現一個特定功能,最后再將各個模塊搭接在一起,這種設計方法可以降低系統(tǒng)設計的復雜性,本系統(tǒng)主要硬件設計包括電源電路、蜂鳴器電路、晶振電路,LCD顯示電路以及溫濕度傳感器電路[11]。 3.1主控制電路和測溫時控制電路 本次硬件的核心就是AT89S511,其他的外圍電路都是圍繞它所設計的。數字溫濕度傳感器的DHT11的DATA口連接單片機AT89S51的P3.0口。顯示電路就是把LCD1602和單片機的P1口分別相連,當溫度或濕度高于預設值的時候蜂鳴器蜂鳴報警,代表控制系統(tǒng)的指示燈常亮,增加單片機的輸出能力,增加單片機的輸出電流,故使用電阻排來完成[14]。本系統(tǒng)采用的是上電復位,充電之后,RST被拉至高電平,單片機進入工作狀態(tài)。 AT89S51中有一個用于構成內部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或者陶瓷諧振器構成自激振蕩器,他們與電容C1,C2接在放大器的反饋電路中構成并聯(lián)震蕩電路,雖然電容沒有一個嚴格的要求,但是電容的大小會輕微影響振蕩頻率的高低、溫度穩(wěn)定性以及振蕩器工作的穩(wěn)定性。
1.023.jpg (86.49 KB, 下載次數: 247)
下載附件
2017-5-17 17:14 上傳
圖3-1 系統(tǒng)電路原理圖 3.2主要模塊的電路3.2.1系統(tǒng)的蜂鳴器電路微型計算機控制系統(tǒng)中,為了安全起見,對于一些重要的參數或系統(tǒng),都設定有緊急狀態(tài)報警系統(tǒng),以便于提醒操作人員注意,或者采取緊急措施,本設計采用把計算機采集的數據進行數據處理、標度變換、數字濾波之后,與該參數上下限與設定值進行比較,不符合標準值則進行報警,否則就作為采樣的正常值,進行顯示[12]。 本設計采用峰鳴音報警電路。如圖所示。蜂鳴器額定電流≤30Ma,而對于AT89S51單片機,P3口的灌電流為15mA,由此可見,僅靠單片機的P3口電流是不能驅動蜂鳴器的,必須使用晶體管放大電路,為了使單片機的功率更小,所以使用PNP型晶體管,當外部環(huán)境的溫度或者濕度超過預設值的時候,基級變?yōu)榈碗娖,蜂鳴器導通鳴叫[11]。
1.024.jpg (9.14 KB, 下載次數: 193)
下載附件
2017-5-17 17:14 上傳
圖3-2-1 蜂鳴器實物圖
1.025.jpg (19.25 KB, 下載次數: 187)
下載附件
2017-5-17 17:14 上傳
圖3-2-1 蜂鳴器電路
3.2.2晶振電路 單片機系統(tǒng)都有晶振,在單片機系統(tǒng)中晶振的作用非常大,全稱叫做晶體振蕩器,它結合單片機內部電路產生所需時鐘頻率,單片機晶振提供的時鐘頻率越高,那么單片機的運行速度就會越快,單片機的一切指令執(zhí)行都是建立在單片機晶振所提供的時鐘頻率。在通常的工作條件下,普通的晶振頻率的絕對精度可以達到百萬分之五十,高級晶振精度更高,有些晶振還可以由外加的電壓在一定范圍內調整頻率,稱為壓榨振蕩器,在共振的狀態(tài)下晶振用一種能把電能和機械能相互轉化的晶體工作,以提供穩(wěn)定,精確的單頻振蕩。 單片機晶振的作用是為系統(tǒng)提供及本周的時鐘信號,通常一個系統(tǒng)共用一個晶振,以便于各部分保持同步,有些通訊系統(tǒng)的基頻和射頻使用不同的晶振,而是通過電子調整頻率的方法保持同步。晶振通常與鎖相環(huán)電路配合使用,以提供系統(tǒng)所需的時鐘頻率,可以用于同一個晶振項鏈的不同鎖相環(huán)來提供的。單片機AT89S51的晶振電路采用無源晶振,微調電容取22uf。
1.026.jpg (13.66 KB, 下載次數: 191)
下載附件
2017-5-17 17:14 上傳
圖3-2-2晶振電路 3.2.3 溫濕度設置(按鍵)電路
1.027.jpg (27.59 KB, 下載次數: 189)
下載附件
2017-5-17 17:14 上傳
圖3-2-3 按鍵電路 3.2.4顯示電路 在日常生活中,我們對液晶顯示器并不陌生,它已作為很多電子產品的通過器件,比方在計算器、萬用表、電子表及很多家用電子產品中都可以看到,顯示的主要是數字、專用符號和圖形。 顯示模塊選用1602字符型液晶模塊,它是目前工控系統(tǒng)中使用最廣泛的液晶屏之一,由于它顯示的質量高,電路圖如圖3.4所示,1602字符型液晶模塊是點陣型液晶,驅動方便,經過編程后顯示內容多樣化[2]。
1.028.jpg (40.73 KB, 下載次數: 178)
下載附件
2017-5-17 17:14 上傳
圖3-2-4 顯示電路 3.2.5傳感器電路 DHT11是數字型溫濕度傳感器,可直接以數字方式傳輸所采集的當前環(huán)境溫濕度,DHT11采用的是單總線通信,因此只需將單片機的一個I/O端口與DHT11的通信接口連接就可以實現數據的采集和傳送,相對于其他電路來說比較簡單。如圖3.4所示:
1.029.jpg (12.23 KB, 下載次數: 182)
下載附件
2017-5-17 17:14 上傳
圖3-2-5 傳感器電路
3.2.6復位電路 本次設計采用的是上電復位,當RST引腳上出現了兩個周期以上的高電平就會觸發(fā)內部復位,這里的EA端與復位電路無關,由于數據都放在了內部存儲器,所以連接EA只是直接拉高引腳。
1.030.jpg (15.48 KB, 下載次數: 178)
下載附件
2017-5-17 17:14 上傳
圖3-2-6 復位電路 3.2.7電源指示燈電路
1.031.jpg (16.32 KB, 下載次數: 172)
下載附件
2017-5-17 17:14 上傳
圖3-2-7 電源指示燈電路 3.3硬件實施控制3.3.1溫濕度設置溫濕度上下限控制設置如圖所示。
1.032.jpg (7.35 KB, 下載次數: 168)
下載附件
2017-5-17 17:14 上傳
(1)濕度上限設置界面
1.033.jpg (7.34 KB, 下載次數: 174)
下載附件
2017-5-17 17:14 上傳
(2)濕度下限設置界面
1.034.jpg (9.21 KB, 下載次數: 166)
下載附件
2017-5-17 17:14 上傳
(3)溫度度下限設置界面
1.035.jpg (10.92 KB, 下載次數: 190)
下載附件
2017-5-17 17:14 上傳
(4)溫度度上限設置界面 圖4-1-1 溫濕度上下限設置
3.3.2工作指示燈和電源
1.036.jpg (5.44 KB, 下載次數: 180)
下載附件
2017-5-17 17:14 上傳
代表控制設備啟動的燈泡(加熱、降溫;加濕、除濕)
1.037.jpg (10.45 KB, 下載次數: 175)
下載附件
2017-5-17 17:14 上傳
3.3.3功能按鍵
1.038.jpg (9.99 KB, 下載次數: 166)
下載附件
2017-5-17 17:14 上傳
3.4設備運行 本次設計主要是能夠實時顯示出當前確切的溫濕度,并且在高于預設值的時候能夠發(fā)出蜂鳴。一旦接通電源,工作指示燈常亮,蜂鳴器首先蜂鳴,表示系統(tǒng)正常運行。接著LCD初始化,采用八位的數據端口,兩行顯示,其中第一行顯示的濕度預設值,根據鍵盤我們可以加減數值,第二行顯示的是實時的溫濕度值,在程序設計中,分別定義溫濕度參數,根據數據轉換過來的數值,判斷是否超過了預設值,本次設計溫度初試值設定為32℃,濕度初始設定為34%,等待傳送的數值連續(xù)20次都超過預設值的話,蜂鳴器便會蜂鳴警報,1602顯示當前的溫濕度值,溫濕度不在標準范圍內,溫度和濕度的控制措施燈亮,表示對溫度和濕度不在范圍內采取相應措施。采取措施后,傳輸數據正常,再次循環(huán)判斷,如果沒有超過預設值,蜂鳴器不會蜂鳴,1602正常顯示,不會啟動控制措施,也同樣再次循環(huán)。 按鍵說明:左起第一個是功能鍵,按一次進入報警溫度設置此時出現H 40,進行上限溫度設置,此時設置H高溫報警溫度并閃爍顯示;按第二次,進行下限溫度設置此時出現L 03,此時設置L低溫報警溫度并閃爍顯示;再按一次即第三次,則恢復正常的溫度顯示界面。第二個按鍵是增加鍵,可以對上限溫度或下限溫度進行增大調整第三個按鍵是減小鍵,可以對下限溫度或下限溫度進行減小調整;濕度同理。這樣便可設置好溫、濕度的上、下限。 3.5控制設備:采用設備: (1)風扇或者排濕器:負責系統(tǒng)的降溫工作。 風扇可以是USB借口的或者與電源相連接的,根據本設計需要,由于在糧庫內使用,所以用電源連接的風扇較為適合。小風扇材料的選擇主要注意它的耐性和穩(wěn)定性,要選擇不變形的塑料材質,苯乙烯聚合物是一種熱塑性樹脂,無色、無味,而且有光澤的透明固體,具有耐化學腐蝕性、耐水性和優(yōu)良的電絕緣性和高頻點介性。 排潮器根據功率大小還有性價比來進行選擇,做了市場調查以后,根據糧庫環(huán)境,選擇了ZD-8138C 空氣排濕機,完全滿足糧庫儲存糧食的要求。其中內部壓縮機采用世界名牌高效渦漩式壓縮機,質量可靠、高效節(jié)能;風機采用工業(yè)通風專業(yè)的外轉子風機,具有使用壽命長、噪音低、出風量大的有點;保護功能系統(tǒng)完善,電源缺相、錯相;壓縮機過流、高低壓力、延時保護、風機過載、電加熱過熱、風機壓差保護。主要性能參數指標如下。 表3-5 排潮器的主要性能參數 (2)加熱設備:負責系統(tǒng)的加熱工作。 加熱設備:本設計采用的是電加熱設備,不銹鋼加熱器在耐高溫不銹鋼無縫管內均勻地分布高溫電阻絲,在空隙部分致密地填入導熱性能和絕緣性能均良好的結晶氧化鎂粉,這種結構不但先進,熱效率高,而且發(fā)熱均勻,當高溫電阻絲中有電流通過時,產生的熱通過結晶氧化鎂粉向金屬管表面擴散,再傳遞到被加熱件或空氣中去,達到加熱的目的。針對目前市場的需求,主要不銹鋼加熱器有304和316l不同材質,供客戶選擇。目前使用比較多的有直型加熱管、u型加熱管、w型加熱管、螺旋式加熱器、法蘭式加熱管、異型加熱器、易燃易爆加熱管、重油加熱器等系列產品。為了降低成本,耐用環(huán)保,我們采用的是直型加熱管。 (3)噴霧設備:負責系統(tǒng)的加濕工作。 自動灑水器:1. 材料為工程塑料和不銹鋼,強度高,耐化學物質(化肥、農藥等)腐蝕。2. 整體壓鑄成型,結構強度高。3. 整個內芯可從噴頭頂部旋出(外殼與管道間的連接不動),清洗修方便。4. 1806和1812型有兩個接口(底部和側壁)供用戶選擇。我們選擇1812型。5. 接口尺寸:1/2¨陰螺紋;射程:90m-120m。把灑水器內注滿水,如若是大型功耗的灑水器,每100平方米只需放置一個即可,若是中小型工號的灑水器,每100平方米放置2-3個即可。本設計采用的是大型功耗灑水器,全面噴灑形,噴灑面積90-120平方米,流量Q=130-150L/H。美中不足的是需要人力檢測容器內剩余水的多少,需要人在一天內觀察一次。 (4)排潮設備:負責系統(tǒng)的去濕工作。 烘干節(jié)能排潮系統(tǒng):包括烘干排潮室,沿所述烘干排潮室縱向間隔垂直設置的隔板將其自后至前分為多個加熱單元[3];所述每個隔板均自烘干排潮室頂壁向下延伸至中部;在位于隔板下方的烘干排潮室內沿縱向設置有多條輸送鏈條;在所述每個加熱單元地板下方分別開設有氣體通道,所述氣體通道的進、出氣口分別位于本加熱單元的地板表面;相鄰兩單元的進、出氣口通過管道、抽風機相連通,位于最右端加熱單元的出氣口延伸出烘干排潮室之外。本實用新型優(yōu)點在于從后向前分若干區(qū),每個區(qū)從地下管道抽后區(qū)風送往前區(qū),上吹下吸,依次進行,熱能反復利用,大大降低了熱能消耗,同時排向大氣的熱量大為減少,起到了很好的節(jié)能、環(huán)保效果。 本系統(tǒng)控制設備采用的加濕設備、除濕設備、加溫設備、降溫設備作為控制器,加濕設備、除濕設備、加溫設備、降溫設備分別控制濕度與溫度,使得糧庫的溫濕度得到合理控制。 (1)當溫度高于預設的標準范圍內,蜂鳴響起,并根據報警信號和當前溫度顯示,小型風扇、排潮器自行啟動,當達到標準范圍內,溫度恢復正常,蜂鳴停止,小型風扇、排潮器自動關閉,工作指示燈亮,設備正常運行; (2)當溫度低于預設的標準范圍內,蜂鳴響起,根據報警信號和當前溫度顯示,電加熱設備自行啟動,當溫度歸于正常值時,蜂鳴停止,電加熱設備關閉,工作指示燈亮,設備正常運行; (3)當濕度高于預設的標準范圍內,蜂鳴響起并根據報警信號和當前濕度值系統(tǒng)自動啟動烘干節(jié)能排潮系統(tǒng),達到去濕效果,當濕度降低到正常范圍內時,蜂鳴停止,烘干節(jié)能排潮系統(tǒng)關閉,工作指示燈亮,設備正常運行; (4)當濕度低于預設的標準范圍內,蜂鳴響起并根據報警信號和當前濕度值系統(tǒng)啟動自動灑水器,達到加濕效果后,滿足糧庫工作的濕度范圍內,工作指示燈亮,設備正常運行。 (5)如若溫濕度同時不在標準范圍內,兩個功能性設備同時啟動。
3.6 本章小結本章節(jié)主要介紹了硬件設計的總思路及其各部分電路的主要設計方法,詳細的給出了各個模塊(蜂鳴器,晶振電路,顯示電路,按鍵電路,傳感器電路,復位電路,電源指示燈電路)的電路設計。初步連接構造硬件,并且設計了控制部分,較細致的介紹了硬件運行。
第4章 軟件設計
軟件設計是本次設計中不可缺少的環(huán)節(jié),貫穿了整個設計,是本次設計能夠完成的最重要的環(huán)節(jié)之一。 4.1系統(tǒng)流程圖根據溫濕度監(jiān)控系統(tǒng)功能,系統(tǒng)軟件流程圖如圖4-1所示:
圖4-1系統(tǒng)軟件流程圖
4.2按鍵流程圖按鍵檢測過程中,流程如下圖4-2所示:
1.057.jpg (32.17 KB, 下載次數: 246)
下載附件
2017-5-17 17:14 上傳
圖4-2 按鍵檢測的流程圖 4.3 Protues運行結果
1.058.jpg (33.51 KB, 下載次數: 243)
下載附件
2017-5-17 17:14 上傳
4.4 本章小結本章主要給出了系統(tǒng)流程圖,了解了系統(tǒng)流程更好的做出硬件。通過Proteus軟件或Protel99SE繪制仿真圖、流程圖。
結 論
本文設計的是糧庫的溫濕度監(jiān)測報警、控制系統(tǒng)。由高性價比單片機對數字溫濕度傳感器控制,通過溫、濕度傳感器,實現對溫濕度數據采集,并對數據處理、LCD1602顯示屏顯示即時溫、濕度值。當溫濕度數據超出設定溫、濕度值時,由單片機驅動報警裝置,實現現場報警功能,控制系統(tǒng)自行啟動,調節(jié)不在范圍內的溫、濕度,使其恢復正常。 首先,介紹了設計的核心組成部分單片機AT89S51的的基本構成和原理,簡要的說明了單片機的最小系統(tǒng),中斷系統(tǒng),復位電路和時鐘電路。然后介紹了顯示部分LCD1602的各個引腳和指令說明,為下面的編程做準備。 其次,介紹了本次設計的傳感器:DHT11溫濕度傳感器。然后給出了主要模塊電路的結構,在硬件連接以后,初步的硬件運行結果,以實物圖的形式進行了說明。介紹了控制溫、濕度的設備,在根據不同環(huán)境下的應用和選擇。 最后,說明了用到的軟件,給出了總體的原理圖和流程圖和Proteus運行結果,以便更好的理解。 最后程序檢查正常,焊接成品,硬件運行正常,滿足了初步設計要求,達到了糧庫溫、濕度控制的目的。在設計中還有不足的部分,在現場控制時,保證傳感器不受條件因素的影響是很重要的,由于研究時間和條件的限制,糧庫溫、濕度還有許多地方需要深入研究。
參考文獻[1] 孫宏宇.牛舍環(huán)境及供料自動控制系統(tǒng)的研究[D].吉林農業(yè)大學,2008:24 [2] 湯武輝.Proteus仿真軟件與單片機實驗教學[N].長江大學學報(自然版),2010,(3):33-36. [3] 王劍,朱濤,李冬.protel 99se電路仿真在電子實驗教學中的應用[J].2010,(5):38-40. [4] 王國防.基于nRF24E1的數據采集及無線傳輸系統(tǒng)的研究[D].河北科技大學,2009:8-10. [5] 張冬林,李鑫,戴梅.基于DHT11的低成本蠶室溫濕度自動控制系統(tǒng)設計[J].現代農業(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].電子質量,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] 張廣軍,黃俊欽.溫度傳感器現場動態(tài)校準方法與實驗研究[J] 北京航空航天大學學報 1997:7-9. [14] 李建民.單片機在溫度控制系統(tǒng)中的應用[M].江漢大學學報,1996:72-78. [15] Vizimuller, P.Basic knowledge of transducers[J].World Cement.2000 [16] Tulone, S. Madden.Quorum systems for wireless sensor networks[J].2007
單片機源程序如下:
- #include
-
- #include "key_contrl.h"
- #include "lcd1602.h"
-
-
- #define LCM_Data P1
- #define Busy 0x80 //用于檢測LCM狀態(tài)字中的Busy標識
-
- extern int temp_value, humi_value;
- extern int flag;
- extern int temp;
-
- sbit red=P2^6;
- sbit blue=P2^7;
-
- sbit LCM_RW= P2^4; //定義引腳
- sbit LCM_RS= P2^5;
- sbit LCM_E= P2^3;
-
-
- sbit beep = P0^6; //beep = 0時候發(fā)聲
-
-
- extern int temph,templ,disp_mode,huih,huil;
- extern char tel,teh,hh,hl;
-
- //寫數據
-
- void alarm()
- {
- beep=0;
-
- Delay5Ms();
- Delay5Ms();
- beep=1;
-
- Delay5Ms();
- Delay5Ms();
-
- }
-
-
- void WriteDataLCM(unsigned char WDLCM)
- {
- ReadStatusLCM(); //檢測忙
- LCM_Data = WDLCM;
- LCM_RS = 1;
- LCM_RW = 0;
- LCM_E = 0; //若晶振速度太高可以在這后加小的延時
- LCM_E = 0; //延時
- LCM_E = 1;
- }
- //寫指令
- void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時忽略忙檢測
- {
- if (BuysC) ReadStatusLCM(); //根據需要檢測忙
- LCM_Data = WCLCM;
- LCM_RS = 0;
- LCM_RW = 0;
- LCM_E = 0;
- LCM_E = 0;
- LCM_E = 1;
- }
- //讀數據
- unsigned char ReadDataLCM(void)
- {
- LCM_RS = 1;
- LCM_RW = 1;
- LCM_E = 0;
- LCM_E = 0;
- LCM_E = 1;
- return(LCM_Data);
- }
- //讀狀態(tài)
- unsigned char ReadStatusLCM(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);
- }
- void LCMInit(void) //LCM初始化
- {
- LCM_Data = 0;
- WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號
- Delay5Ms();
- WriteCommandLCM(0x38,0);
- Delay5Ms();
- WriteCommandLCM(0x38,0);
- Delay5Ms();
- WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
- WriteCommandLCM(0x08,1); //關閉顯示
- WriteCommandLCM(0x01,1); //顯示清屏
- WriteCommandLCM(0x06,1); // 顯示光標移動設置
- WriteCommandLCM(0x0C,1); // 顯示開及光標設置
- }
- //按指定位置顯示一個字符
- void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
- {
- Y &= 0x1;
- X &= 0xF; //限制X不能大于15,Y不能大于1
- if (Y) X |= 0x40; //當要顯示第二行時地址碼 0x40;
- X |= 0x80; // 算出指令碼
- WriteCommandLCM(X, 0); //這里不檢測忙信號,發(fā)送地址碼
- WriteDataLCM(DData);
- }
- //按指定位置顯示一串字符
- void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
- {
- unsigned char ListLength;
- ListLength = 0;
- Y &= 0x1;
- X &= 0xF; //限制X不能大于15,Y不能大于1
- while (DData[ListLength]>0x20) //若到達字串尾則退出
- {
- if (X <= 0xF) //X坐標應小于0xF
- {
- DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
- ListLength++;
- X++;
- }
- }
- }
- //5ms延時
- void Delay5Ms(void)
- {
- unsigned int TempCyc = 5552;
- while(TempCyc--);
- }
- /*void Delay_xMs(unsigned int x)
- {
- unsigned int i,j;
- for( i =0;i < x;i++ )
- {
- for( j =0;j<500;j++ );
- }
- }
- */
- void display_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,' ');
- }
-
- void display_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,' ');
- }
-
-
- void displayfun1()
- {
- display_temp();
-
- }
-
- void displayfun2()
- {
- display_temp1();
- }
-
-
- void display()
- {
-
- if((((temp_value/10)%100)<templ)||(((humi_value 10)%100)<huil))
- {beep=0;red=0;} //溫度低于下限值,報警
- else if(((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;} 溫度低于下限值,報警
- // else if(((humi_value/10)%100)>=huih)beep=0; //溫度高于或等于上限值,報警
- // else {beep=1;led=1;}
-
-
- if(!disp_mode)
- displayfun1(); //顯示正常
- else
- displayfun2(); //設置界面
-
- }
- #include "dht11.h"
- #include
-
-
- //請根據自己的dht11 接的IO 口來改動位定義
-
-
- sbit dht11 = P3^0;
- //防止在與硬件通信時發(fā)生死循環(huán)的計數范圍
-
- #define NUMBER 20
- #define SIZE 5
-
- static unsigned char status;
-
- //存放五字節(jié)數據的數組
- static unsigned char value_array[SIZE];
-
- /*可在其他的文件引用溫濕度值,實際是溫度的整數的10 倍
- 如dht11 讀回的溫度是26,則temp_value = 260, 濕度同理*/
- int temp_value, humi_value;
-
-
- static unsigned char ReadValue(void);
-
-
-
- void Delay_1ms(unsigned int ms)
- {
- unsigned int x, y;
- for(x = ms; x > 0; x--)
- {
- for(y = 124; y > 0; y--);
- }
- }
- static void DHT11_Delay_10us(void)
- {
- unsigned char i;
- i--;
- i--;
- i--;
- i--;
- i--;
- i--;
- }
- /*讀一個字節(jié)的數據*/
- static unsigned char DHT11_ReadValue(void)
- {
- unsigned char count, value = 0, i;
- status = OK; //設定標志為正常狀態(tài)
- for(i = 8; i > 0; i--)
- {
- //高位在先
- value <<= 1;
- count = 0;
- //每一位數據前會有一個50us 的低電平時間.等待50us 低電平結束
- while(dht11 == 0 && count++ < NUMBER);
- if(count >= NUMBER)
- {
- status = ERROR; //設定錯誤標志
- return 0; //函數執(zhí)行過程發(fā)生錯誤就退出函數
- }
- //26-28us 的高電平表示該位是0,為70us 高電平表該位1
- DHT11_Delay_10us();
- DHT11_Delay_10us();
- DHT11_Delay_10us();
- //延時30us 后檢測數據線是否還是高電平
- if(dht11 != 0)
- {
- //進入這里表示該位是1
- value++;
- //等待剩余(約40us)的高電平結束
- while(dht11 != 0 && count++ < NUMBER)
- {
- dht11 = 1;
- }
- if(count >= NUMBER)
- {
- status = ERROR; //設定錯誤標志
- return 0;
- }
- }
- }
- return (value);
- }
- //讀溫度和濕度函數,讀一次的數據,共五字節(jié),讀出成功函數返回OK, 錯誤返回ERROR
- unsigned char DHT11_ReadTempAndHumi(void)
- {
- unsigned char i = 0, check_value = 0,count = 0;
- EA = 0;
- dht11 = 0; //拉低數據線大于18ms 發(fā)送開始信號
- Delay_1ms(20); //需大于18 毫秒
- dht11 = 1; //釋放數據線,用于檢測低電平的應答信號
- //延時20-40us,等待一段時間后檢測應答信號,應答信號是從機拉低數據線80us
- DHT11_Delay_10us();
- DHT11_Delay_10us();
- DHT11_Delay_10us();
- DHT11_Delay_10us();
- if(dht11 != 0) //檢測應答信號,應答信號是低電平
- {
- //沒應答信號
- EA = 1;
- return ERROR;
- }
- else
- {
- //有應答信號
- while(dht11 == 0 && count++ < NUMBER); //等待應答信號結束
- if(count >= NUMBER) //檢測計數器是否超過了設定的范圍
- {
- dht11 = 1;
復制代碼
為了防止有人抄襲,頭文件沒有上傳,文檔僅供參考學習,給大家一個大體的實現思路,少走彎路,沒有頭文件是無法編譯的,所以無法抄襲:
以上文字word版下載:
基于51單片機的溫濕度檢測控制系統(tǒng) .doc
(1.1 MB, 下載次數: 1167)
2017-5-17 13:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|