找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 182938|回復(fù): 85
收起左側(cè)

基于51單片機(jī)的DHT11溫濕度檢測(cè)控制系統(tǒng)設(shè)計(jì)資料

  [復(fù)制鏈接]
ID:201747 發(fā)表于 2017-5-17 13:50 | 顯示全部樓層 |閱讀模式
從開(kāi)始到最后都有詳細(xì)的過(guò)程

摘  要

本次設(shè)計(jì)是采用MSC-51系列單片機(jī)中的AT89S51和DHT11構(gòu)成的低成本的溫濕度的檢測(cè)控制系統(tǒng)。單片機(jī)AT89S51是一款低消耗、高性能的CMOS8位單片機(jī),由于它強(qiáng)大的功能和低價(jià)位,因此在很多領(lǐng)域都是用它。DHT11溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字輸出的溫濕度復(fù)合傳感器,傳感器包括一個(gè)電阻式感濕原件和一個(gè)NTC測(cè)溫元件,該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。設(shè)計(jì)主要包括硬件電路的設(shè)計(jì)和系統(tǒng)軟件的設(shè)計(jì)。
硬件電路主要包括單片機(jī)、溫濕度傳感器、顯示模塊、報(bào)警器以及控制設(shè)備等5部分。其中由DHT11溫濕度傳感器及1602字符型液晶模塊構(gòu)成系統(tǒng)顯示模塊;測(cè)溫濕度控制電路由溫濕度傳感器和預(yù)設(shè)溫度值比較報(bào)警電路組成;用戶根據(jù)需要預(yù)先輸入預(yù)設(shè)值,當(dāng)實(shí)際測(cè)量的溫濕度不符合預(yù)設(shè)的溫濕度標(biāo)準(zhǔn)時(shí),發(fā)出報(bào)警信號(hào)(蜂鳴器蜂鳴),啟動(dòng)相應(yīng)控制。
軟件部分包括了主程序、顯示子程序、測(cè)溫濕度子程序。   
                            目 錄

前  言

1.1本文研究的背景及意義

1.2研究現(xiàn)狀

1.3本文研究的主要內(nèi)容

第2章 設(shè)計(jì)任務(wù)分析及方案論證

2.1設(shè)計(jì)過(guò)程及其工藝要求設(shè)計(jì)

2.2設(shè)計(jì)總體方案及其論證

2.3器件選定

2.4 AT89S51單片機(jī)

2.5中斷系統(tǒng)

2.6復(fù)位電路

2.7時(shí)鐘電路

2.8顯示部分

2.9本章小結(jié)

第3章 硬件設(shè)計(jì)

3.1主控制電路和測(cè)溫時(shí)控制電路

3.2主要模塊的電路

3.3硬件實(shí)施控制

3.4設(shè)備運(yùn)行

3.5控制設(shè)備:

3.6 本章小結(jié)

第4章  軟件設(shè)計(jì)

4.1系統(tǒng)流程圖

4.2按鍵流程圖

4.3 Protues運(yùn)行結(jié)果

4.4 本章小結(jié)

結(jié) 論

參考文獻(xiàn)

附  錄


前  言1.1本文研究的背景及意義
糧庫(kù)已經(jīng)被廣泛的運(yùn)用,是存儲(chǔ)糧食的一個(gè)重要方式。是糧食倉(cāng)庫(kù)的簡(jiǎn)稱,是糧食倉(cāng)儲(chǔ)企業(yè)習(xí)慣稱謂,屬于全民所有制企業(yè),是我國(guó)糧食企業(yè)的一個(gè)重要組成部分,由糧食部門(mén)統(tǒng)一管理,擔(dān)負(fù)著國(guó)家糧食儲(chǔ)備、地方糧食儲(chǔ)備、糧食流通的主渠道作用,其主要任務(wù)是完成糧食的接受、保管和調(diào)運(yùn)輸送等糧食流通諸環(huán)節(jié)。在不同季節(jié)內(nèi),尤其是不利于存儲(chǔ)食物的季節(jié)內(nèi)進(jìn)行的一種保護(hù)措施。
因此研究溫濕度的控制非常有必要,它可以進(jìn)一步優(yōu)化儲(chǔ)存控制方式,提升水平。
1.2研究現(xiàn)狀
我國(guó)地大物博,各地的自然環(huán)境條件不同,所以在不利于存儲(chǔ)糧食的自然環(huán)境中,具有可調(diào)節(jié)溫濕度的可控糧庫(kù)更能夠創(chuàng)造適宜存儲(chǔ)的條件,中國(guó)各地經(jīng)濟(jì)水平和發(fā)達(dá)水平有比較大的差異,所以研制出又具有實(shí)用價(jià)值并且采用最低的成本達(dá)到最好的效果是非常有必要的,既節(jié)約了人力親自檢查,又節(jié)約制造成本,不會(huì)對(duì)貧困地區(qū)造成經(jīng)濟(jì)負(fù)擔(dān),又避免了能源和經(jīng)濟(jì)浪費(fèi)[1]。
本系統(tǒng)所要完成的任務(wù)是:

    ①人性化的設(shè)計(jì)。界限溫度值及濕度值能夠由用戶根據(jù)不同被儲(chǔ)存的糧食的存儲(chǔ)需求輸入并通過(guò)顯示器顯示,能夠?qū)崟r(shí)、準(zhǔn)確的顯示采樣溫度值與濕度值。

②通過(guò)采集溫度及濕度值,準(zhǔn)確的判斷標(biāo)準(zhǔn)值與當(dāng)前值之間的差異,看是否符合標(biāo)準(zhǔn)值,及時(shí)的啟動(dòng)報(bào)警裝置(包括警報(bào)燈的提示功能以及蜂鳴等)進(jìn)行報(bào)警,并采取相應(yīng)控制溫濕度的方案。

1.3本文研究的主要內(nèi)容
一、首先我們必須了解溫濕度控制對(duì)儲(chǔ)存糧食的重要性,其次我們才能夠?qū)Υ俗鞒龈玫呐袛,以求更好的解決用戶所需要的問(wèn)題。
二、溫濕度的監(jiān)測(cè)和控制是我們研究的主要內(nèi)容。數(shù)字化溫濕度檢測(cè)的方法為一旦環(huán)境中的溫濕度發(fā)生變化時(shí),濕度傳溫度感器和濕度傳感器隨著溫濕度的變化而變化,然后將變化的電阻通過(guò)轉(zhuǎn)換電路和轉(zhuǎn)換信號(hào)檢測(cè)為與之對(duì)應(yīng)變化的電壓,然后把模擬電壓信號(hào)由A/D轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號(hào)并送入到單片機(jī)中,對(duì)采集到的信號(hào)單片機(jī)進(jìn)行濾波處理并通過(guò)查表得到實(shí)際測(cè)量的濕度值,之后通過(guò)單片機(jī)的各外部接口電路顯示該溫濕度值。
三、該系統(tǒng)通過(guò)按鈕設(shè)定最適宜的溫度和濕度,傳感器向中央控制系統(tǒng)輸送監(jiān)控信號(hào),超過(guò)預(yù)設(shè)值的話,蜂鳴器就會(huì)報(bào)警提醒,控制溫、濕度的設(shè)備即可作出調(diào)整,回到正常范圍內(nèi),系統(tǒng)正常運(yùn)行。
四、根據(jù)各種不同糧食的適宜溫度進(jìn)行溫室溫度調(diào)節(jié),若低于下限溫度則采取升溫措施,通常采取電熱增溫和火力增溫等,電熱增溫比較方便。若高于上限溫度則采取降溫措施,通常通過(guò)水管降溫和風(fēng)扇降溫,風(fēng)扇降溫比較方便;為滿足糧庫(kù)不同種類糧食對(duì)濕度的要求,可以在地上、臺(tái)階、盆壁灑水,還可以在空中懸掛濕布,以增加水分的蒸發(fā),最好的辦法是設(shè)置自動(dòng)噴霧裝置,自動(dòng)調(diào)節(jié)濕度。如果濕度過(guò)大,容易導(dǎo)致植被過(guò)于潮濕,發(fā)生腐爛,可采用烘干技術(shù),加快水分流失,保持被存儲(chǔ)糧食的干燥。為滿足對(duì)于不同糧食的儲(chǔ)存方式和需求,我們可以隨時(shí)對(duì)溫、濕度進(jìn)行調(diào)節(jié),對(duì)于不利情況能夠及時(shí)的作出顯示,并能夠采取相應(yīng)的措施提醒用戶進(jìn)行調(diào)整,以達(dá)到最適宜的溫濕度。


第2章 設(shè)計(jì)任務(wù)分析及方案論證
本章詳細(xì)介紹了本次設(shè)計(jì)的主要任務(wù),以及對(duì)于所要實(shí)現(xiàn)的內(nèi)容加以分析,同時(shí)詳細(xì)的介紹了主要元器件的選擇,以及各自的特性。
2.1設(shè)計(jì)過(guò)程及其工藝要求設(shè)計(jì)
一個(gè)以單片機(jī)為核心的溫濕度控制系統(tǒng),需要實(shí)現(xiàn)的功能為:
   ①能夠準(zhǔn)確的顯示當(dāng)前的溫度以及濕度。溫度檢測(cè)的范圍0℃-60℃,測(cè)溫精度:±2℃;濕度檢測(cè)范圍20%-100%RH,  測(cè)濕精度:±5%RH。
   ②能夠自主調(diào)節(jié)當(dāng)前需要溫度以及濕度的預(yù)設(shè)溫濕度值,在系統(tǒng)上面有調(diào)節(jié)按鈕,可隨時(shí)根據(jù)需要增加或者減少預(yù)設(shè)值。
   ③一旦發(fā)現(xiàn)超過(guò)了預(yù)設(shè)值,蜂鳴器蜂鳴報(bào)警,控制設(shè)備立即啟動(dòng),立即調(diào)控溫濕度。
   ④報(bào)警方式為三極管驅(qū)動(dòng)的蜂鳴音報(bào)警。
   ⑤系統(tǒng)的顯示方式均為四位顯示,采用LCD顯示。
2.2設(shè)計(jì)總體方案及其論證2.2.1設(shè)計(jì)總體方案及其論證
本設(shè)計(jì)要實(shí)現(xiàn)的功能是:實(shí)時(shí)顯示當(dāng)前環(huán)境的溫濕度,并且允許用戶設(shè)定溫濕度標(biāo)準(zhǔn)值,當(dāng)環(huán)境溫濕度超過(guò)或低于標(biāo)準(zhǔn)值時(shí),系統(tǒng)會(huì)以蜂鳴器鳴響的方式進(jìn)行報(bào)警提示,并且控制設(shè)備自啟動(dòng),待達(dá)到標(biāo)準(zhǔn)值時(shí),蜂鳴器停止鳴響,控制設(shè)備停止運(yùn)行,系統(tǒng)正常工作,工作指示燈亮。
   (1)溫度監(jiān)控:對(duì)溫室溫度進(jìn)行測(cè)量和控制并反映在顯示器上。

(2)濕度監(jiān)控:對(duì)溫室濕度進(jìn)行測(cè)量和控制反映在顯示器上。

(3)顯    示:LCD就地顯示此時(shí)此刻溫濕度值,擺放在生產(chǎn)現(xiàn)場(chǎng)用于顯示當(dāng)前的溫濕度。

依據(jù)功能設(shè)定,本系統(tǒng)主要分為以下三個(gè)模塊:
              (1)溫濕度采集模塊
              (2)數(shù)據(jù)處理模塊
              (3)用戶交互模塊
              其中溫濕度采集模塊使用的是DHT11數(shù)字溫濕度傳感器,它使用單總線方式,接口簡(jiǎn)單,而且無(wú)需另外校準(zhǔn)。分辨率為8bit,完全能夠滿足日常環(huán)境溫濕度的檢測(cè)要求。
              數(shù)據(jù)處理模塊使用的是AT89S51單片機(jī),其完成溫濕度數(shù)據(jù)的采集、運(yùn)算和邏輯控制的功能。
              用戶交互模塊主要由按鍵、1602點(diǎn)陣液晶、蜂鳴器和控制器構(gòu)成。其中按鍵用于用戶設(shè)定溫濕度準(zhǔn)確值,1602用于數(shù)據(jù)顯示,蜂鳴器用于提示用戶,控制器用于調(diào)節(jié)控制不符合要求的溫、濕度。按照系統(tǒng)的設(shè)計(jì)功能所要求的,溫濕度監(jiān)控系統(tǒng)原理圖如下圖2.2.1所示:(在附件中)


圖2-2-1 溫濕度監(jiān)控系統(tǒng)原理圖


單片機(jī)作為主控制器,主要負(fù)責(zé)處理由溫濕度傳感器送來(lái)數(shù)據(jù),并把處理好的數(shù)據(jù)送向顯示器模塊,數(shù)據(jù)溫濕度傳感器主要用來(lái)采集周圍的環(huán)境參數(shù),并把所采集到得數(shù)據(jù)送向單片機(jī),按鍵電路主要是用來(lái)完成單片機(jī)的復(fù)位操作和溫濕度初始值的設(shè)定。蜂鳴器電路就是用三極管來(lái)實(shí)現(xiàn)的,用來(lái)判斷周圍的溫度或者濕度是否超出設(shè)定數(shù)值,控制設(shè)備等候指令,當(dāng)蜂鳴器響起,溫、濕度不在標(biāo)準(zhǔn)范圍內(nèi),控制設(shè)備自行啟動(dòng),直到溫、濕度正常,顯示電路主要用來(lái)顯示當(dāng)前的溫濕度[10]。
2.3器件選定
將單片機(jī)用作測(cè)控系統(tǒng)時(shí),總要有被測(cè)信號(hào)輸入通道,由計(jì)算機(jī)拾取必要的輸入信息。對(duì)于測(cè)量系統(tǒng)而言,其核心任務(wù)是怎么樣獲得準(zhǔn)確的被測(cè)信號(hào);而對(duì)測(cè)控系統(tǒng)來(lái)說(shuō),不可缺少的環(huán)節(jié)是對(duì)條件的監(jiān)測(cè)和對(duì)被控對(duì)象狀態(tài)的測(cè)試,傳感器是實(shí)現(xiàn)測(cè)量與控制的第一環(huán)節(jié),是測(cè)控系統(tǒng)的關(guān)鍵部分,一切準(zhǔn)確的測(cè)量和控制都將在傳感器對(duì)于原始信號(hào)的準(zhǔn)確可靠的轉(zhuǎn)換和捕捉,工業(yè)生產(chǎn)過(guò)程的自動(dòng)化測(cè)量和控制,基本主要依賴各種傳感器來(lái)控制和檢測(cè)生產(chǎn)過(guò)程中的各種量,使系統(tǒng)和設(shè)備在最佳狀態(tài)正常運(yùn)行,從而保證生產(chǎn)的高質(zhì)量和高效率 [6]。
2.3.1測(cè)量部分:溫濕度傳感器
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的溫濕度傳感和數(shù)字模塊采集技術(shù),具有很高的穩(wěn)定性和可靠性,DHT11傳感器內(nèi)含一個(gè)NTC測(cè)溫和一個(gè)電阻式感濕元件,并與一個(gè)8位的高性能單片機(jī)相連接,在精確的濕度校驗(yàn)室中DHT11傳感器進(jìn)行過(guò)校準(zhǔn),以程序的形式校準(zhǔn)系數(shù)儲(chǔ)存在0TP內(nèi)存中,檢測(cè)信號(hào)的時(shí)候,在處理過(guò)程中傳感器內(nèi)部要調(diào)用這些校準(zhǔn)系數(shù),采用單線制的串行接口[13],使系統(tǒng)集成可以有較低的功耗,而且更加簡(jiǎn)單快速,信號(hào)傳輸距離超過(guò)20米,作為一個(gè)數(shù)字溫濕度傳感器DHT11具有響應(yīng)快速、抗干擾強(qiáng)、性價(jià)比高等優(yōu)點(diǎn),它的性能指標(biāo)如下:濕度測(cè)量范圍為20%~90%RH;濕度測(cè)量精度為±5%RH;溫度測(cè)量范圍為0~50 ℃,溫度測(cè)量精度為±2℃,工作電壓3.0~5.5 V,相應(yīng)時(shí)間<5S,DHT1l采用4針單排引腳封裝, 傳感器通電后,需要等待1s,這是因?yàn)橐竭^(guò)不穩(wěn)定的狀態(tài),在此期間不需發(fā)送指令,電源引腳(VDD,GND)之間可增加一個(gè)100nF 的電容,用以去耦濾波[7]。

1.012.jpg

圖2-3-1典型的應(yīng)用電路

電源引腳
四條引角中有兩條是電源引腳,有兩條是輸出數(shù)據(jù)的引腳,你只需要給他供上額定電壓,然后再他的輸出引腳采集信號(hào)就可以了,輸出信號(hào)如果是模擬量的話,通過(guò)A/D芯片,將模擬量轉(zhuǎn)換為數(shù)字信號(hào),然后傳送給單片機(jī)。DHT11是數(shù)字傳感器,所以不需要進(jìn)行模數(shù)的轉(zhuǎn)換。
1.013.jpg

圖2-3-1  DHT11實(shí)物圖

(1)DHT11溫濕度傳感器產(chǎn)品參數(shù):
相對(duì)濕度
分 辨 率:16Bit
重 復(fù) 性:±1%RH
精    度:25°C  ±5%RH
互 換 性:可完全互換
響應(yīng)時(shí)間:1/e(63%)25°C   6s
          1m/s 空氣 6s
遲    滯:<±0.3%RH
長(zhǎng)期穩(wěn)定性:<±0.5%RH/yr

溫度
分 辨 率:16Bit
重 復(fù) 性:±0.2°C
量程范圍:25°C  ±2°C
響應(yīng)時(shí)間:1/e(63%)  10s

電氣特征
供    電:DC 3.5-5.5V
供電電流:測(cè)量0.3mA  待機(jī)60μA
采樣周期:次  大于2秒

引腳說(shuō)明
(1)VDD  供電3.5-5.5V
(2)DATA 串行數(shù)據(jù),單總線
(3)NC 空腳
(4)GND 接地,電源負(fù)極
2.3.2串行接口(單線雙向)
DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時(shí)間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說(shuō)明,當(dāng)前小數(shù)部分用于以后擴(kuò)展,現(xiàn)讀出為零.操作流程如下:一次完整的數(shù)據(jù)傳輸為40bit,高位先出。
數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗(yàn)和。
數(shù)據(jù)傳送正確時(shí)校驗(yàn)和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。
用戶MCU發(fā)送一次開(kāi)始信號(hào)后,DHT11從低功耗模式轉(zhuǎn)換到高速模式,等待主機(jī)開(kāi)始信號(hào)結(jié)束后,DHT11發(fā)送響應(yīng)信號(hào),送出40bit的數(shù)據(jù),并觸發(fā)一次信號(hào)采集,用戶可選擇讀取部分?jǐn)?shù)據(jù).如果沒(méi)有接收到主機(jī)發(fā)送開(kāi)始信號(hào),DHT11不會(huì)主動(dòng)進(jìn)行溫濕度采集.采集數(shù)據(jù)后轉(zhuǎn)換到低速模式。
    總線空閑狀態(tài)為高電平的時(shí)候主機(jī)把總線拉低等待DHT11響應(yīng), DHT11能檢測(cè)到起始信號(hào),主機(jī)必須把總線拉低,至少大于18ms。DHT11一旦接收到主機(jī)的開(kāi)始信號(hào),接著就等待開(kāi)始信號(hào)的結(jié)束,然后發(fā)送80us的低電平響應(yīng)信號(hào),要讀取DHT11的響應(yīng)信號(hào),必須等待開(kāi)始信號(hào)的結(jié)束,并延時(shí)等待20-40us后才能夠接受,主機(jī)發(fā)送開(kāi)始信號(hào)后,這時(shí)候就可輸出高電平或切換到輸入模式,接著總線由上拉電阻拉高。
DHT11發(fā)送響應(yīng)信號(hào)的時(shí)候總線為低電平 ,DHT11把總線拉高80us之前,必須等到響應(yīng)信號(hào)發(fā)送,準(zhǔn)備發(fā)送數(shù)據(jù)時(shí),每一bit數(shù)據(jù)都以50us低電平時(shí)隙開(kāi)始,數(shù)據(jù)位是0或1是由高電平的長(zhǎng)或短來(lái)決定。假如響應(yīng)信號(hào)的讀取為高電平,但是DHT11無(wú)響應(yīng)響應(yīng),這時(shí)候說(shuō)明路線可能連接不正常,當(dāng)最后一bit數(shù)據(jù)傳送結(jié)束后,DHT11把總線拉低50us,接著總線由上拉電阻拉高進(jìn)入空閑狀態(tài)。
2.3.3電氣特性
VDD=5V,T = 25℃
圖2-3-3電氣特性(注:采樣周期間隔不得低于1秒鐘)

參數(shù)

條件

min

typ

max

單位

供電

DC

3

5

5.5

V

供電電流

測(cè)量

0.5


2.5

Ma

平均

0.2


1

Ma

待機(jī)

100


150

Ua

采樣周期

1




               

2.3.4性能說(shuō)明

  

表2-3-4 性能說(shuō)明

參數(shù)

條件

Min

Typ

Max

單位

分辨率


8

±

Bit

1

1

1

%RH

精度

25℃


±4


%RH

重復(fù)性



±1


%RH

溫度

0-50℃



±5

%RH

溫度


量程范圍

0℃

30


90

%RH

50℃

20


80

%RH

25℃

20


90

%RH

長(zhǎng)期穩(wěn)定性

典型值


±1


%RH/yr

遲滯



±1


互換性

可完全互換

分辨率


8

8

8

Bit

1

1

1

重復(fù)性


±1


響應(yīng)時(shí)間

1/e(63%)

6


30

S

量程范圍


0


50

精度


±1


±2

2.3.5引腳說(shuō)明

表2.3.5 DHT11引腳說(shuō)明

pin

名稱

注釋

1

VDD

供電3-5.5V

2

DATA

串行數(shù)據(jù),單總線

3

NC

空腳,懸空

4

GND

接地,電源負(fù)極


注意 引腳2在接單片機(jī)時(shí),同時(shí)要在數(shù)據(jù)線接一上拉電阻,接到電源上[4]。
2.3.6應(yīng)用信息
電阻式溫、濕度傳感器暴露在化學(xué)物質(zhì)中會(huì)受到干擾,導(dǎo)致靈敏度下降,當(dāng)處于極限狀態(tài)時(shí),傳感器可以通過(guò)程序處理,回復(fù)到初試的校準(zhǔn)狀態(tài),在不符合規(guī)范的范圍內(nèi)使用傳感器,不僅會(huì)導(dǎo)致幾乎3%的臨時(shí)漂移信號(hào),而且會(huì)加速產(chǎn)品的老化,轉(zhuǎn)為正常的使用范圍后,會(huì)漸漸恢復(fù)校準(zhǔn)狀態(tài);溫度是影響氣體相對(duì)濕度的關(guān)鍵,因此測(cè)量時(shí)最好讓濕度傳感器工作溫度相同[5]。
2.3.7 封裝信息
1.014.jpg 1.015.jpg 1.016.jpg

圖2-3-6 DHT11的封裝信息

2.4 AT89S51單片機(jī)2.4.1單片機(jī)介紹
AT89S51是美國(guó)ATMEL公司生產(chǎn)的低功耗、高性能CMOS 的8位單片機(jī),片內(nèi)含4K的可編程的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳。它集Flash程序存儲(chǔ)器既可在線編程(ISP),也可用傳統(tǒng)方法進(jìn)行編程及通用8位微處理器于單片機(jī)芯片中,低價(jià)位AT89S51單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制的領(lǐng)域【8】。AT89S51提供以下的功能標(biāo)準(zhǔn):4K字節(jié)閃爍存儲(chǔ)器,128字節(jié)隨機(jī)存取數(shù)據(jù)存儲(chǔ)器,2個(gè)16位定時(shí)/計(jì)數(shù)器,32個(gè)I/O口, 1個(gè)串行通信口,1個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),另外,AT89S51還可以進(jìn)行0HZ的靜態(tài)邏輯操作,并支持兩種軟件的節(jié)電模式,閑散方式停止中央處理器的工作,可允許隨機(jī)存取數(shù)據(jù)存儲(chǔ)器、定時(shí)/計(jì)數(shù)器、串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存隨機(jī)存取數(shù)據(jù)存儲(chǔ)器中的內(nèi)容,但震蕩器停止工作并禁止其它所有部件的工作直到下一個(gè)復(fù)位,在AT89C51上新增加的功能使AT89S51性能有了較大提升,它的價(jià)格甚至更低,它的工作頻率可達(dá)33MHz,比AT89C51的工作頻率更高,ISP在線編程功能的優(yōu)越性在于它不必要將芯片從工作狀態(tài)下分離,特別是在改寫(xiě)存儲(chǔ)器內(nèi)的程序,這是一個(gè)相當(dāng)方便簡(jiǎn)單的功能,它不需要像AT89C51那樣外接看門(mén)狗計(jì)時(shí)器單元電路,由于它內(nèi)部具有雙工UART串行通道內(nèi)部集成看門(mén)狗計(jì)時(shí)器,它具有全新的加密算法,大大加強(qiáng)的程序的保密性,有效的保護(hù)知識(shí)產(chǎn)權(quán)不被侵犯,它完全兼容51全部字系列產(chǎn)品[8]。
1.017.jpg

圖2-5-1  AT89S51引腳圖

2.4.2引腳說(shuō)明:
VCC:電源電壓輸入端。
GND:電源地

P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。P0口在訪問(wèn)外部存儲(chǔ)器時(shí),P0口既是一個(gè)真正的雙向數(shù)據(jù)總線口,又是輸出8位地址口。它包括一個(gè)輸出鎖存器,兩個(gè)三態(tài)緩沖器,一個(gè)輸出驅(qū)動(dòng)電路和一個(gè)輸出控制電路

P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入”1”后,被內(nèi)部上拉為高電平,可用作輸入。P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。專門(mén)為用戶使用的I/O口,是準(zhǔn)雙向口,P1口為8位準(zhǔn)雙向口,每一位均可單獨(dú)定義為輸入或輸出口。在編程校驗(yàn)期間,用做輸入低位字節(jié)地址。P1口可以驅(qū)動(dòng)4個(gè)TTL負(fù)載。
P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流,這是由于上拉的緣故。P2口也是雙向口。它是供系統(tǒng)擴(kuò)展時(shí)輸出高8位地址。如果沒(méi)有系統(tǒng)擴(kuò)展時(shí),也可以作為用戶的I/O口使用。P2口作為外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器的地址總線的高8位輸出口AB8-AB15,P0口由ALE選通作為地址總線的低8位輸出口AB0-AB7。外部的程序存儲(chǔ)器由PSEN信號(hào)選通,數(shù)據(jù)存儲(chǔ)器則由WR和RD讀寫(xiě)信號(hào)選通,因?yàn)?=64k,所以AT89S51最大可外接64kB的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。P3口除了作為普通I/O口,還有第二功能:





表2-5-2 P3口的第二功能

端口引腳

功能特性

P3.0

串行輸入口(RXD)

P3.1

串行輸出口(TXD)

P3.2

外中斷0(INTO)

P3.3

外中斷1(INT1)

P3.4

定時(shí)/計(jì)數(shù)器0的外部輸入口(T0)

P3.5

定時(shí)/計(jì)數(shù)器1的外部輸入口(T1)

P3.6

外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通(WR)

P3.7

外部數(shù)據(jù)存儲(chǔ)器讀選通(RD)

    RST:復(fù)位輸入端,高電平有效。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
ALE/PROG:地址鎖存允許/編程脈沖信號(hào)端。當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。
PSEN:外部程序存儲(chǔ)器的選通信號(hào),低電平有效。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。
EA/VPP:外部程序存儲(chǔ)器訪問(wèn)允許。注意加密方式1時(shí),EA將內(nèi)部鎖定為RESET;當(dāng)EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:片內(nèi)振蕩器反相放大器和時(shí)鐘發(fā)生器的輸入端。
XTAL2:片內(nèi)振蕩器反相放大器的輸出端。

現(xiàn)在已經(jīng)對(duì)四個(gè)8位雙向并行I/O口有了初步的了解。根據(jù)以上的內(nèi)容可知只有P1口是標(biāo)準(zhǔn)的I/O口,所以我們選用P1口作為數(shù)據(jù)端口,P1口可逐位分別定義各口線為輸入或輸出線[7]。

2.4.3單片機(jī)最小系統(tǒng)
所謂單片機(jī)的最小系統(tǒng)是指使單片機(jī)能運(yùn)行程序、正常工作的最簡(jiǎn)單電路系統(tǒng),是保證單片正常啟動(dòng)、開(kāi)始工作的必須電路,缺一不可。單片機(jī)最小系統(tǒng)一般由單片機(jī)、程序存儲(chǔ)器、時(shí)鐘電路和復(fù)位電路組成。對(duì)于AT89S51單片機(jī),由于片內(nèi)有4K的程序存儲(chǔ)器,所以其最小系統(tǒng)除了單片機(jī)本身外,只需外接時(shí)鐘電路與復(fù)位電路即可。
2.4.4主要性能特點(diǎn)和優(yōu)越性
(1)4k Bytes Flash片內(nèi)程序存儲(chǔ)器;
(2)128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM);
(3)32個(gè)外部雙向輸入/輸出(I/O)口;
(4)5個(gè)中斷優(yōu)先級(jí)、2層中斷嵌套中斷;
(5)6個(gè)中斷源;
(6)2個(gè)16位可編程定時(shí)器/計(jì)數(shù)器;
(7)2個(gè)全雙工串行通信口;
(8)看門(mén)狗(WDT)電路;
(9)片內(nèi)振蕩器和時(shí)鐘電路;
(10)與MCS-51兼容;
(11)全靜態(tài)工作:0Hz-33MHz;
(12)三級(jí)程序存儲(chǔ)器保密鎖定;
(13)可編程串行通道;
(14)低功耗的閑置和掉電模式。
2.5中斷系統(tǒng)2.5.1中斷

    程序執(zhí)行過(guò)程中,允許外部或內(nèi)部事件通過(guò)硬件打斷程序的執(zhí)行,使其轉(zhuǎn)向?yàn)樘幚韮?nèi)部事件的中斷服務(wù)程序中去;完成中斷服務(wù)的程序后,CPU繼續(xù)原來(lái)被打斷的程序,這樣的過(guò)程稱為中斷過(guò)程。

2.5.2產(chǎn)生中斷

能產(chǎn)生中斷的外部和內(nèi)部事件。AT89S51有5個(gè)中斷源:

(1)INT0:外部中斷0請(qǐng)求,低電平有效。通過(guò)P3.2引腳輸入。
(2)INT1:外部中斷1請(qǐng)求,低電平有效。通過(guò)P3.3引腳輸入。
(3)T0:定時(shí)器/計(jì)數(shù)器0溢出中斷請(qǐng)求。
(4)TI:定時(shí)器/計(jì)數(shù)器1溢出中斷請(qǐng)求。
(5)TXD/RXD:串行口中斷請(qǐng)求。當(dāng)串行口完成一幀數(shù)據(jù)的發(fā)送或接收時(shí),便請(qǐng)求中斷。每一個(gè)中斷源都對(duì)應(yīng)一個(gè)中斷請(qǐng)求標(biāo)志位,它們?cè)O(shè)置在特殊功能寄存器TCON和SCON中。當(dāng)這些中斷源請(qǐng)求中斷時(shí),相應(yīng)的標(biāo)志分別有TCON和SCON中的相應(yīng)位來(lái)鎖存。
2.5.3中斷系統(tǒng)有以下4個(gè)特殊功能寄存器
(1)定時(shí)器控制寄存器TCON(用6位);
(2)串行口控制寄存器SCON(用2位);
(3)中斷允許寄存器IE;
(4)中斷優(yōu)先級(jí)寄存器IP。
    其中,TCON和SCON只有一部分用于中斷控制。通過(guò)對(duì)以上各特殊功能寄存器的各位進(jìn)行置位或復(fù)位等操作,可實(shí)現(xiàn)各種中斷控制功能。
2.6復(fù)位電路

    復(fù)位是單片機(jī)的初始化操作。其主要功能是把PC初始化為000H,使單片機(jī)從0000H單元開(kāi)始執(zhí)行程序。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)處于死鎖狀態(tài)時(shí),為擺脫困境,也需按復(fù)位鍵重新啟動(dòng)。

除PC之外,復(fù)位操作還對(duì)其他一些寄存器有影響,它們的復(fù)位狀態(tài)如下圖所示.
表2-8 復(fù)位操作對(duì)寄存器的影響
寄存器
復(fù)位狀態(tài)
  寄存器
復(fù)位狀態(tài)
PC
0000H
TCON
00H
ACC
00H
TL0
00H
PSW
00H
THO
00H
SP
07H
TL1
00H
DPTR
0000H
TH1
00H
P0-P3
FFH
SCON
00H
IP
XX000000B
SBUF
不定
IE
0X000000B
PCON
OXXXOOOOB
TMOD
OOH





    為確保微機(jī)系統(tǒng)中電路穩(wěn)定可靠工作,復(fù)位電路是必不可少的一部分,一般微機(jī)電路正常工作需要供電電源為5V±5%,即4.75~5.25V。由于微機(jī)電路是時(shí)序數(shù)字電路,它需要穩(wěn)定的時(shí)鐘信號(hào),因此在電源上電時(shí),只有當(dāng)VCC超過(guò)4.75V低于5.25V以及晶體振蕩器穩(wěn)定工作時(shí),復(fù)位信號(hào)才被撤除,微機(jī)電路開(kāi)始正常工作。單片機(jī)的復(fù)位分為上電自動(dòng)復(fù)位、按鍵手動(dòng)復(fù)位兩種和看門(mén)狗強(qiáng)制復(fù)位三種等。上電復(fù)位通常利用電容的充放電來(lái)實(shí)現(xiàn),按鍵復(fù)位則可分為按鍵脈沖復(fù)位和按鍵電平復(fù)位兩種,看門(mén)狗復(fù)位則通過(guò)外接看門(mén)狗電路或軟件看門(mén)狗程序?qū)崿F(xiàn)。常見(jiàn)的有上電復(fù)位和按鍵復(fù)位電路。
2.7時(shí)鐘電路
時(shí)鐘電路可以簡(jiǎn)單定義如下:1.就是產(chǎn)生象時(shí)鐘一樣準(zhǔn)確的振蕩電路;2.任何工作都按時(shí)間順序。用于產(chǎn)生這個(gè)時(shí)間的電路就是時(shí)鐘電路。時(shí)鐘電路一般由晶體震蕩器、晶震控制芯片和電容組成。時(shí)鐘電路應(yīng)用十分廣泛,如電腦的時(shí)鐘電路、電子表的時(shí)鐘電路以及MP3、MP4的時(shí)鐘電路。
時(shí)鐘電路用于產(chǎn)生單片機(jī)的基本時(shí)鐘信號(hào),是用來(lái)配合外部晶體實(shí)現(xiàn)振蕩的電路,這樣可以為單片機(jī)提供運(yùn)行時(shí)鐘,如果運(yùn)行時(shí)鐘為0 的話,單片機(jī)就不工作,當(dāng)然超出單片機(jī)的工作頻率的時(shí)鐘也會(huì)導(dǎo)致單片機(jī)不工作。時(shí)鐘電路是微型計(jì)算機(jī)的心臟,它控制著計(jì)算機(jī)的工作節(jié)奏,CPU就是通過(guò)復(fù)雜的時(shí)序電路完成不同的指令功能的。MCS-51的時(shí)鐘信號(hào)可以由兩種方式:一種是內(nèi)部方式,利用芯片內(nèi)部的振蕩電路,產(chǎn)生時(shí)鐘信號(hào):另一種為外部方式,時(shí)鐘信號(hào)由外部引入。如果沒(méi)有時(shí)鐘電路來(lái)產(chǎn)生時(shí)鐘驅(qū)動(dòng)單片機(jī),單片機(jī)是無(wú)法工作的[12]。AT89S51的時(shí)鐘信號(hào)可由內(nèi)部振蕩器產(chǎn)生,也可由外部電路直接提供。
內(nèi)部振蕩器的輸入和輸出腳分別為XTAL1和XATL2,由XTAL2給單片機(jī)內(nèi)部電路提供時(shí)鐘信號(hào)。當(dāng)時(shí)鐘信號(hào)由外部電路提供時(shí),外部時(shí)鐘引入XTAL2,而XTAL1腳接地。
2.8顯示部分:LCD
顯示部分是LCD1602液晶顯示,
1.018.jpg

圖2-8 正常工作LCD1602顯示

2.8.1 LCD1602液晶簡(jiǎn)介
LCD1602分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的               比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)差別,兩者尺寸差別如圖2-9所示。
1.019.jpg

圖2-8-1 LCD1602規(guī)格

字符型液晶顯示模塊是一種專門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊
2.8.2 LCD1602主要技術(shù)參數(shù)
表2-8-2 1602的主要技術(shù)參數(shù)
工作電壓:
4.5—5.5V
容量
16×2個(gè)字符
最佳工作電壓
5.0V
工作電流
2.0mA
字符尺寸
2.95×4.35(W×H)mm


2.8.3引腳功能說(shuō)明
1602液晶模塊的讀寫(xiě)操作,屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。

表2-8-3 引腳接口說(shuō)明表

LCD1602采用標(biāo)準(zhǔn)的14腳(無(wú)背光)或16腳(帶背光)接口,各引腳接口說(shuō)明如表編號(hào)

符號(hào)

引腳說(shuō)明

1

VDD

正極

2

VSS

3

VL

液晶顯示偏壓

4

RS

寄存器選擇

5

R/W

讀/寫(xiě)選擇

6

EN

使能信號(hào)

7

D0

數(shù)據(jù)

8

D1

數(shù)據(jù)

9

D2

數(shù)據(jù)

10

D3

數(shù)據(jù)

11

D4

數(shù)據(jù)

12

D5

數(shù)據(jù)

13

D6

數(shù)據(jù)

14

D7

數(shù)據(jù)

15

BLA

背光源正極

16

BLK

背光源負(fù)極




1.020.jpg

圖2-8-3  LCD1602的管腳圖


1.021.jpg

圖2-8-3 1602字符型液晶顯示器實(shí)物圖

2.8.4  LCD1602的RAM地址映射及標(biāo)準(zhǔn)字庫(kù)表
液晶顯示模塊是一個(gè)比較慢的顯示器件,因此在執(zhí)行指令之前要首先確認(rèn)模塊的忙標(biāo)志處于低電平,表示空閑,不然此指令失效,輸入顯示字符地址后會(huì)顯示字符,圖是1602的內(nèi)部顯示地址。

1.022.jpg

圖2-8-4 1602LCD內(nèi)部顯示地址
2.8.5指令說(shuō)明
LCD1602液晶模塊內(nèi)部的控制器控制指令:
  • 清屏指令
指令功能
                       指令編碼


執(zhí)行時(shí)間/ms

清屏
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2

DB1

DB0

1.64

  0
0
0
0
0
0
0
0

0

1

功能:
①清除液晶顯示器,即將DDRAM的內(nèi)容全部填入“空白”的ASCII碼20H;
②光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;
③將地址計(jì)數(shù)器(AC)的值設(shè)為0.
  • 光標(biāo)歸位指令
指令功能
                       指令編碼


執(zhí)行時(shí)間/ms

光標(biāo)歸位
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2

DB1

DB0

1.64

  0
0
0
0
0
0
0
0

1

X


功能:
①把光標(biāo)撤回到顯示器的左上方;
②把地址計(jì)數(shù)器(AC)的值設(shè)置為0;
③保持DDRAM的內(nèi)容不變
(3)進(jìn)入模式設(shè)置指令
指令功能
                       指令編碼


執(zhí)行時(shí)間/us

進(jìn)入模式設(shè)置
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2

DB1

DB0

40

  0
0
0
0
0
0
0
I

I/D

S

功能:
設(shè)定每次定入1位數(shù)據(jù)后光標(biāo)的以為方向,并且設(shè)定每次寫(xiě)入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示:
位名         設(shè)置
I/D          0=寫(xiě)入新數(shù)據(jù)后光標(biāo)左移      1=寫(xiě)入新數(shù)據(jù)后光標(biāo)右移
S            0=寫(xiě)入新數(shù)據(jù)后顯示屏不移動(dòng)  1=寫(xiě)入新數(shù)據(jù)后顯示屏整體右移一個(gè)字符
(4)顯示開(kāi)關(guān)指令控制

指令功能

                       指令編碼


執(zhí)行時(shí)間/us

顯示開(kāi)關(guān)控制

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

  0

0

0

0

0

0

1

D

C

B

功能:
控制顯示器開(kāi)/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍,參數(shù)設(shè)定的情況如下:
位名         設(shè)置
D             0=顯示功能關(guān)    1=顯示功能開(kāi)
C             0=無(wú)光標(biāo)        1=有光標(biāo)
B             0=光標(biāo)閃爍      1=光標(biāo)不閃爍
  • 設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令

指令功能

                       指令編碼


執(zhí)行時(shí)間/us

設(shè)定顯示屏或光標(biāo)移動(dòng)方向

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

  0

0

0

0

0

1

S/C

R/L

X

X

功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下:
S/C        R/L       設(shè)定情況
0           0        光標(biāo)左移1格,且AC值減1
0           1        光標(biāo)右移1格,且AC值加1
1           0        顯示器上字符全部左移1格,但光標(biāo)不動(dòng)
1           1        顯示器上字符全部右移1格,但光標(biāo)不動(dòng)
(6)功能設(shè)定指令

指令功能

                       指令編碼


執(zhí)行時(shí)間/us

功能設(shè)定

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

  0

0

0

0

1

DL

N

F

X

X

功能:設(shè)定數(shù)據(jù)總線為數(shù)、顯示的行數(shù)及字型。
參數(shù)設(shè)定的情況如下:
位名             設(shè)置
DL               0=數(shù)據(jù)總線為4位       1=數(shù)據(jù)總線為8位
N                0=顯示1行             1=顯示2行
F                0=5×7點(diǎn)陣/每字符      1=5×10點(diǎn)陣/每字符
(7)設(shè)定CGRAM地址指令

指令功能

                       指令編碼


執(zhí)行時(shí)間/us

設(shè)定CGRAM地址

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

  0

0

0

1

       CRGAM的地址(6位)

功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。
DB5 DB4 DB3為字符號(hào),也就是將來(lái)要顯示該字符時(shí)要用到的字符地址(000-111)(能定義8個(gè)字符)
DB2 DB1 DB0為行號(hào)。(000-111)(八行)
  • 設(shè)定DDRAM地址指令


指令功能

                       指令編碼


執(zhí)行時(shí)間/us

設(shè)定DDRAM地址

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

  0

0

  1

DDRAM的地址(7位)

功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的DDRAM的地址
(9)讀取忙信號(hào)或AC地址指令

指令功能

                       指令編碼


執(zhí)行時(shí)間/us

讀取忙碌信號(hào)或AC地址

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

  0

1

FB

              AC內(nèi)容(7位)

功能:
①讀取忙碌信號(hào)BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時(shí)無(wú)法接受單片機(jī)送來(lái)的數(shù)據(jù)或指令;當(dāng)BF=0時(shí),液晶顯示器一接受單片機(jī)送來(lái)的數(shù)據(jù)或指令
(10)數(shù)據(jù)寫(xiě)入DDRAM或CGRAM指令一覽

指令功能

                       指令編碼


執(zhí)行時(shí)間/us

數(shù)據(jù)寫(xiě)入到DDRAM或CGRAM

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

1

0

要寫(xiě)入的數(shù)據(jù)D7-D0

功能:
①將字符碼寫(xiě)入DDRAM,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符
②將使用著自己設(shè)計(jì)的圖形存入CGRAM
     DB7 DB6 DB5可為任何數(shù)據(jù),一般取“000”
  DB4 DB3 DB2 DB1 DB0對(duì)應(yīng)于每行5點(diǎn)的字模數(shù)據(jù)
  • 從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽

指令功能

                       指令編碼


執(zhí)行時(shí)間/us

從CGRAM或DDRAM讀出數(shù)據(jù)

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

40

  1

1

           要讀出的數(shù)據(jù)D7-D0

功能:讀取DDRAM或CGRAMD中的內(nèi)容
基本操作時(shí)序:
讀狀態(tài)    輸入:RS=L,RW=H,E=H      輸出:DB0-DB7=狀態(tài)字
寫(xiě)指令    輸入:RS=L,RW=L,E=下降沿脈沖  DB0-DB7=指令碼  輸出:無(wú)
讀數(shù)據(jù)    輸入:RS=H,RW=H E=H        輸出:DB0-DB7=數(shù)據(jù)
寫(xiě)數(shù)據(jù)    輸入:RS=H,RW=L,E=下降沿脈沖  DB0-DB7=數(shù)據(jù)    輸出:無(wú)
2.8.6顯示設(shè)置
DDRAM是顯示數(shù)據(jù)RAM,用來(lái)寄存帶顯示的字符代碼,共80個(gè)字節(jié)。


顯示位置

1

2

    3

4

5

6

7

.......

40

DDRAM

地址

第一行

00H

01H

02H

03H

04H

05H

06H

......

27H

第二行

40H

41H

42H

43H

44H

45H

46H

......

67H

表2-8-6 地址和屏幕的對(duì)應(yīng)關(guān)系

    想要在LCD1602屏幕的第一行第一列顯示一個(gè)“A”字,就要向DDRAM的00H地址寫(xiě)入“A”字的代碼就行了。具體的寫(xiě)入是要按LCD模塊的指令格式來(lái)進(jìn)行的。在1602中用到16個(gè)即可。

第二行也一樣用到前16個(gè)地址。

表2-8-6 對(duì)應(yīng)關(guān)系

00H

01H

02H

03H

04H

05H

06H

07H

08H

09H

0AH

0BH

0CH

0DH

0EH

0FH

40H

41H

42H

43H

44H

45H

46H

47H

48H

49H

4AH

4BH

4CH

4DH

4EH

4FH

               

在PC上我們只要打開(kāi)文本文件就能在屏幕上看到對(duì)應(yīng)的字符是因?yàn)樵诓僮飨到y(tǒng)里和BIOS里都固化有字符字模。字模代表了是在點(diǎn)陣屏幕上點(diǎn)亮和熄滅的信息數(shù)據(jù)。例如“A”字的字模:

  01110          ○■■■○

  10001          ■○○○■

  10001          ■○○○■

10001          ■○○○■

11111          ■■■■■

10001          ■○○○■

10001          ■○○○■

上圖左邊的數(shù)據(jù)就是字模數(shù)據(jù),右邊就是將左邊數(shù)據(jù)用“○”代表0,用“■”代表1。

想要在LCD1602屏幕的第一行第一列顯示一個(gè)“A”字,就要向DDRAM的00H地址寫(xiě)入“A”字的代碼41H即可。在LCD模塊上也固化了字模存儲(chǔ)器,這就是CGROM和CGRAM HD44780內(nèi)置了192個(gè)常用字符的字模,存于字符產(chǎn)生器CFROM Character Generator ROM中,另外還有8個(gè)允許用戶自定義的字符產(chǎn)生RAM,稱為CGRAM Character Generator RAM。

2.9本章小結(jié)
本章節(jié)主要有兩部分,第一部分主要介紹了溫濕度實(shí)時(shí)監(jiān)測(cè)和控制的意義,第二部分主要介紹了設(shè)計(jì)的總體思路,以及元器件的選擇,并加以詳細(xì)的解釋。

              第3章 硬件設(shè)計(jì)

    單片機(jī)是整個(gè)系統(tǒng)的控制中樞,它指揮外圍器件協(xié)調(diào)工作,從而完成特定的功能,硬件實(shí)現(xiàn)上采用模塊化設(shè)計(jì),每一模塊只實(shí)現(xiàn)一個(gè)特定功能,最后再將各個(gè)模塊搭接在一起,這種設(shè)計(jì)方法可以降低系統(tǒng)設(shè)計(jì)的復(fù)雜性,本系統(tǒng)主要硬件設(shè)計(jì)包括電源電路、蜂鳴器電路、晶振電路,LCD顯示電路以及溫濕度傳感器電路[11]。

3.1主控制電路和測(cè)溫時(shí)控制電路

    本次硬件的核心就是AT89S511,其他的外圍電路都是圍繞它所設(shè)計(jì)的。數(shù)字溫濕度傳感器的DHT11的DATA口連接單片機(jī)AT89S51的P3.0口。顯示電路就是把LCD1602和單片機(jī)的P1口分別相連,當(dāng)溫度或濕度高于預(yù)設(shè)值的時(shí)候蜂鳴器蜂鳴報(bào)警,代表控制系統(tǒng)的指示燈常亮,增加單片機(jī)的輸出能力,增加單片機(jī)的輸出電流,故使用電阻排來(lái)完成[14]。本系統(tǒng)采用的是上電復(fù)位,充電之后,RST被拉至高電平,單片機(jī)進(jìn)入工作狀態(tài)。

     AT89S51中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或者陶瓷諧振器構(gòu)成自激振蕩器,他們與電容C1,C2接在放大器的反饋電路中構(gòu)成并聯(lián)震蕩電路,雖然電容沒(méi)有一個(gè)嚴(yán)格的要求,但是電容的大小會(huì)輕微影響振蕩頻率的高低、溫度穩(wěn)定性以及振蕩器工作的穩(wěn)定性。



1.023.jpg

圖3-1 系統(tǒng)電路原理圖

3.2主要模塊的電路3.2.1系統(tǒng)的蜂鳴器電路
微型計(jì)算機(jī)控制系統(tǒng)中,為了安全起見(jiàn),對(duì)于一些重要的參數(shù)或系統(tǒng),都設(shè)定有緊急狀態(tài)報(bào)警系統(tǒng),以便于提醒操作人員注意,或者采取緊急措施,本設(shè)計(jì)采用把計(jì)算機(jī)采集的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理、標(biāo)度變換、數(shù)字濾波之后,與該參數(shù)上下限與設(shè)定值進(jìn)行比較,不符合標(biāo)準(zhǔn)值則進(jìn)行報(bào)警,否則就作為采樣的正常值,進(jìn)行顯示[12]。
本設(shè)計(jì)采用峰鳴音報(bào)警電路。如圖所示。蜂鳴器額定電流≤30Ma,而對(duì)于AT89S51單片機(jī),P3口的灌電流為15mA,由此可見(jiàn),僅靠單片機(jī)的P3口電流是不能驅(qū)動(dòng)蜂鳴器的,必須使用晶體管放大電路,為了使單片機(jī)的功率更小,所以使用PNP型晶體管,當(dāng)外部環(huán)境的溫度或者濕度超過(guò)預(yù)設(shè)值的時(shí)候,基級(jí)變?yōu)榈碗娖,蜂鳴器導(dǎo)通鳴叫[11]。
1.024.jpg

圖3-2-1  蜂鳴器實(shí)物圖


1.025.jpg

圖3-2-1  蜂鳴器電路


3.2.2晶振電路
    單片機(jī)系統(tǒng)都有晶振,在單片機(jī)系統(tǒng)中晶振的作用非常大,全稱叫做晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生所需時(shí)鐘頻率,單片機(jī)晶振提供的時(shí)鐘頻率越高,那么單片機(jī)的運(yùn)行速度就會(huì)越快,單片機(jī)的一切指令執(zhí)行都是建立在單片機(jī)晶振所提供的時(shí)鐘頻率。在通常的工作條件下,普通的晶振頻率的絕對(duì)精度可以達(dá)到百萬(wàn)分之五十,高級(jí)晶振精度更高,有些晶振還可以由外加的電壓在一定范圍內(nèi)調(diào)整頻率,稱為壓榨振蕩器,在共振的狀態(tài)下晶振用一種能把電能和機(jī)械能相互轉(zhuǎn)化的晶體工作,以提供穩(wěn)定,精確的單頻振蕩。
    單片機(jī)晶振的作用是為系統(tǒng)提供及本周的時(shí)鐘信號(hào),通常一個(gè)系統(tǒng)共用一個(gè)晶振,以便于各部分保持同步,有些通訊系統(tǒng)的基頻和射頻使用不同的晶振,而是通過(guò)電子調(diào)整頻率的方法保持同步。晶振通常與鎖相環(huán)電路配合使用,以提供系統(tǒng)所需的時(shí)鐘頻率,可以用于同一個(gè)晶振項(xiàng)鏈的不同鎖相環(huán)來(lái)提供的。單片機(jī)AT89S51的晶振電路采用無(wú)源晶振,微調(diào)電容取22uf。

1.026.jpg

圖3-2-2晶振電路

3.2.3 溫濕度設(shè)置(按鍵)電路
1.027.jpg

圖3-2-3 按鍵電路

3.2.4顯示電路
    在日常生活中,我們對(duì)液晶顯示器并不陌生,它已作為很多電子產(chǎn)品的通過(guò)器件,比方在計(jì)算器、萬(wàn)用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號(hào)和圖形。

    顯示模塊選用1602字符型液晶模塊,它是目前工控系統(tǒng)中使用最廣泛的液晶屏之一,由于它顯示的質(zhì)量高,電路圖如圖3.4所示,1602字符型液晶模塊是點(diǎn)陣型液晶,驅(qū)動(dòng)方便,經(jīng)過(guò)編程后顯示內(nèi)容多樣化[2]。


1.028.jpg

圖3-2-4 顯示電路

3.2.5傳感器電路
    DHT11是數(shù)字型溫濕度傳感器,可直接以數(shù)字方式傳輸所采集的當(dāng)前環(huán)境溫濕度,DHT11采用的是單總線通信,因此只需將單片機(jī)的一個(gè)I/O端口與DHT11的通信接口連接就可以實(shí)現(xiàn)數(shù)據(jù)的采集和傳送,相對(duì)于其他電路來(lái)說(shuō)比較簡(jiǎn)單。如圖3.4所示:
1.029.jpg

圖3-2-5 傳感器電路


3.2.6復(fù)位電路
    本次設(shè)計(jì)采用的是上電復(fù)位,當(dāng)RST引腳上出現(xiàn)了兩個(gè)周期以上的高電平就會(huì)觸發(fā)內(nèi)部復(fù)位,這里的EA端與復(fù)位電路無(wú)關(guān),由于數(shù)據(jù)都放在了內(nèi)部存儲(chǔ)器,所以連接EA只是直接拉高引腳。
1.030.jpg

圖3-2-6 復(fù)位電路

3.2.7電源指示燈電路
1.031.jpg

圖3-2-7  電源指示燈電路

3.3硬件實(shí)施控制3.3.1溫濕度設(shè)置
溫濕度上下限控制設(shè)置如圖所示。
1.032.jpg

(1)濕度上限設(shè)置界面      

1.033.jpg       

(2)濕度下限設(shè)置界面

1.034.jpg

(3)溫度度下限設(shè)置界面               

1.035.jpg

(4)溫度度上限設(shè)置界面

    圖4-1-1 溫濕度上下限設(shè)置


3.3.2工作指示燈和電源
1.036.jpg
代表控制設(shè)備啟動(dòng)的燈泡(加熱、降溫;加濕、除濕)
1.037.jpg







3.3.3功能按鍵
1.038.jpg
3.4設(shè)備運(yùn)行
    本次設(shè)計(jì)主要是能夠?qū)崟r(shí)顯示出當(dāng)前確切的溫濕度,并且在高于預(yù)設(shè)值的時(shí)候能夠發(fā)出蜂鳴。一旦接通電源,工作指示燈常亮,蜂鳴器首先蜂鳴,表示系統(tǒng)正常運(yùn)行。接著LCD初始化,采用八位的數(shù)據(jù)端口,兩行顯示,其中第一行顯示的濕度預(yù)設(shè)值,根據(jù)鍵盤(pán)我們可以加減數(shù)值,第二行顯示的是實(shí)時(shí)的溫濕度值,在程序設(shè)計(jì)中,分別定義溫濕度參數(shù),根據(jù)數(shù)據(jù)轉(zhuǎn)換過(guò)來(lái)的數(shù)值,判斷是否超過(guò)了預(yù)設(shè)值,本次設(shè)計(jì)溫度初試值設(shè)定為32℃,濕度初始設(shè)定為34%,等待傳送的數(shù)值連續(xù)20次都超過(guò)預(yù)設(shè)值的話,蜂鳴器便會(huì)蜂鳴警報(bào),1602顯示當(dāng)前的溫濕度值,溫濕度不在標(biāo)準(zhǔn)范圍內(nèi),溫度和濕度的控制措施燈亮,表示對(duì)溫度和濕度不在范圍內(nèi)采取相應(yīng)措施。采取措施后,傳輸數(shù)據(jù)正常,再次循環(huán)判斷,如果沒(méi)有超過(guò)預(yù)設(shè)值,蜂鳴器不會(huì)蜂鳴,1602正常顯示,不會(huì)啟動(dòng)控制措施,也同樣再次循環(huán)。
    按鍵說(shuō)明:左起第一個(gè)是功能鍵,按一次進(jìn)入報(bào)警溫度設(shè)置此時(shí)出現(xiàn)H 40,進(jìn)行上限溫度設(shè)置,此時(shí)設(shè)置H高溫報(bào)警溫度并閃爍顯示;按第二次,進(jìn)行下限溫度設(shè)置此時(shí)出現(xiàn)L 03,此時(shí)設(shè)置L低溫報(bào)警溫度并閃爍顯示;再按一次即第三次,則恢復(fù)正常的溫度顯示界面。第二個(gè)按鍵是增加鍵,可以對(duì)上限溫度或下限溫度進(jìn)行增大調(diào)整第三個(gè)按鍵是減小鍵,可以對(duì)下限溫度或下限溫度進(jìn)行減小調(diào)整;濕度同理。這樣便可設(shè)置好溫、濕度的上、下限。
3.5控制設(shè)備:
采用設(shè)備:
(1)風(fēng)扇或者排濕器:負(fù)責(zé)系統(tǒng)的降溫工作。
風(fēng)扇可以是USB借口的或者與電源相連接的,根據(jù)本設(shè)計(jì)需要,由于在糧庫(kù)內(nèi)使用,所以用電源連接的風(fēng)扇較為適合。小風(fēng)扇材料的選擇主要注意它的耐性和穩(wěn)定性,要選擇不變形的塑料材質(zhì),苯乙烯聚合物是一種熱塑性樹(shù)脂,無(wú)色、無(wú)味,而且有光澤的透明固體,具有耐化學(xué)腐蝕性、耐水性和優(yōu)良的電絕緣性和高頻點(diǎn)介性。
排潮器根據(jù)功率大小還有性價(jià)比來(lái)進(jìn)行選擇,做了市場(chǎng)調(diào)查以后,根據(jù)糧庫(kù)環(huán)境,選擇了ZD-8138C 空氣排濕機(jī),完全滿足糧庫(kù)儲(chǔ)存糧食的要求。其中內(nèi)部壓縮機(jī)采用世界名牌高效渦漩式壓縮機(jī),質(zhì)量可靠、高效節(jié)能;風(fēng)機(jī)采用工業(yè)通風(fēng)專業(yè)的外轉(zhuǎn)子風(fēng)機(jī),具有使用壽命長(zhǎng)、噪音低、出風(fēng)量大的有點(diǎn);保護(hù)功能系統(tǒng)完善,電源缺相、錯(cuò)相;壓縮機(jī)過(guò)流、高低壓力、延時(shí)保護(hù)、風(fēng)機(jī)過(guò)載、電加熱過(guò)熱、風(fēng)機(jī)壓差保護(hù)。主要性能參數(shù)指標(biāo)如下。
表3-5 排潮器的主要性能參數(shù)

除濕量

5.75公斤/小時(shí)( 138升/天)

電源

220V~50Hz

環(huán)境溫度

5~58℃

循環(huán)風(fēng)量

1725m3

運(yùn)轉(zhuǎn)噪音

50dB

壓縮機(jī)保護(hù)

三分鐘延時(shí)

適用面積(3m/高)

100 ~150

(2)加熱設(shè)備:負(fù)責(zé)系統(tǒng)的加熱工作。
加熱設(shè)備:本設(shè)計(jì)采用的是電加熱設(shè)備,不銹鋼加熱器在耐高溫不銹鋼無(wú)縫管內(nèi)均勻地分布高溫電阻絲,在空隙部分致密地填入導(dǎo)熱性能和絕緣性能均良好的結(jié)晶氧化鎂粉,這種結(jié)構(gòu)不但先進(jìn),熱效率高,而且發(fā)熱均勻,當(dāng)高溫電阻絲中有電流通過(guò)時(shí),產(chǎn)生的熱通過(guò)結(jié)晶氧化鎂粉向金屬管表面擴(kuò)散,再傳遞到被加熱件或空氣中去,達(dá)到加熱的目的。針對(duì)目前市場(chǎng)的需求,主要不銹鋼加熱器有304和316l不同材質(zhì),供客戶選擇。目前使用比較多的有直型加熱管、u型加熱管、w型加熱管、螺旋式加熱器、法蘭式加熱管、異型加熱器、易燃易爆加熱管、重油加熱器等系列產(chǎn)品。為了降低成本,耐用環(huán)保,我們采用的是直型加熱管。
(3)噴霧設(shè)備:負(fù)責(zé)系統(tǒng)的加濕工作。
自動(dòng)灑水器:1. 材料為工程塑料和不銹鋼,強(qiáng)度高,耐化學(xué)物質(zhì)(化肥、農(nóng)藥等)腐蝕。2. 整體壓鑄成型,結(jié)構(gòu)強(qiáng)度高。3. 整個(gè)內(nèi)芯可從噴頭頂部旋出(外殼與管道間的連接不動(dòng)),清洗修方便。4. 1806和1812型有兩個(gè)接口(底部和側(cè)壁)供用戶選擇。我們選擇1812型。5. 接口尺寸:1/2¨陰螺紋;射程:90m-120m。把灑水器內(nèi)注滿水,如若是大型功耗的灑水器,每100平方米只需放置一個(gè)即可,若是中小型工號(hào)的灑水器,每100平方米放置2-3個(gè)即可。本設(shè)計(jì)采用的是大型功耗灑水器,全面噴灑形,噴灑面積90-120平方米,流量Q=130-150L/H。美中不足的是需要人力檢測(cè)容器內(nèi)剩余水的多少,需要人在一天內(nèi)觀察一次。
(4)排潮設(shè)備:負(fù)責(zé)系統(tǒng)的去濕工作。

烘干節(jié)能排潮系統(tǒng):包括烘干排潮室,沿所述烘干排潮室縱向間隔垂直設(shè)置的隔板將其自后至前分為多個(gè)加熱單元[3];所述每個(gè)隔板均自烘干排潮室頂壁向下延伸至中部;在位于隔板下方的烘干排潮室內(nèi)沿縱向設(shè)置有多條輸送鏈條;在所述每個(gè)加熱單元地板下方分別開(kāi)設(shè)有氣體通道,所述氣體通道的進(jìn)、出氣口分別位于本加熱單元的地板表面;相鄰兩單元的進(jìn)、出氣口通過(guò)管道、抽風(fēng)機(jī)相連通,位于最右端加熱單元的出氣口延伸出烘干排潮室之外。本實(shí)用新型優(yōu)點(diǎn)在于從后向前分若干區(qū),每個(gè)區(qū)從地下管道抽后區(qū)風(fēng)送往前區(qū),上吹下吸,依次進(jìn)行,熱能反復(fù)利用,大大降低了熱能消耗,同時(shí)排向大氣的熱量大為減少,起到了很好的節(jié)能、環(huán)保效果。

  本系統(tǒng)控制設(shè)備采用的加濕設(shè)備、除濕設(shè)備、加溫設(shè)備、降溫設(shè)備作為控制器,加濕設(shè)備、除濕設(shè)備、加溫設(shè)備、降溫設(shè)備分別控制濕度與溫度,使得糧庫(kù)的溫濕度得到合理控制。
(1)當(dāng)溫度高于預(yù)設(shè)的標(biāo)準(zhǔn)范圍內(nèi),蜂鳴響起,并根據(jù)報(bào)警信號(hào)和當(dāng)前溫度顯示,小型風(fēng)扇、排潮器自行啟動(dòng),當(dāng)達(dá)到標(biāo)準(zhǔn)范圍內(nèi),溫度恢復(fù)正常,蜂鳴停止,小型風(fēng)扇、排潮器自動(dòng)關(guān)閉,工作指示燈亮,設(shè)備正常運(yùn)行;
(2)當(dāng)溫度低于預(yù)設(shè)的標(biāo)準(zhǔn)范圍內(nèi),蜂鳴響起,根據(jù)報(bào)警信號(hào)和當(dāng)前溫度顯示,電加熱設(shè)備自行啟動(dòng),當(dāng)溫度歸于正常值時(shí),蜂鳴停止,電加熱設(shè)備關(guān)閉,工作指示燈亮,設(shè)備正常運(yùn)行;
(3)當(dāng)濕度高于預(yù)設(shè)的標(biāo)準(zhǔn)范圍內(nèi),蜂鳴響起并根據(jù)報(bào)警信號(hào)和當(dāng)前濕度值系統(tǒng)自動(dòng)啟動(dòng)烘干節(jié)能排潮系統(tǒng),達(dá)到去濕效果,當(dāng)濕度降低到正常范圍內(nèi)時(shí),蜂鳴停止,烘干節(jié)能排潮系統(tǒng)關(guān)閉,工作指示燈亮,設(shè)備正常運(yùn)行;
(4)當(dāng)濕度低于預(yù)設(shè)的標(biāo)準(zhǔn)范圍內(nèi),蜂鳴響起并根據(jù)報(bào)警信號(hào)和當(dāng)前濕度值系統(tǒng)啟動(dòng)自動(dòng)灑水器,達(dá)到加濕效果后,滿足糧庫(kù)工作的濕度范圍內(nèi),工作指示燈亮,設(shè)備正常運(yùn)行。
(5)如若溫濕度同時(shí)不在標(biāo)準(zhǔn)范圍內(nèi),兩個(gè)功能性設(shè)備同時(shí)啟動(dòng)。

3.6 本章小結(jié)
本章節(jié)主要介紹了硬件設(shè)計(jì)的總思路及其各部分電路的主要設(shè)計(jì)方法,詳細(xì)的給出了各個(gè)模塊(蜂鳴器,晶振電路,顯示電路,按鍵電路,傳感器電路,復(fù)位電路,電源指示燈電路)的電路設(shè)計(jì)。初步連接構(gòu)造硬件,并且設(shè)計(jì)了控制部分,較細(xì)致的介紹了硬件運(yùn)行。

第4章  軟件設(shè)計(jì)

軟件設(shè)計(jì)是本次設(shè)計(jì)中不可缺少的環(huán)節(jié),貫穿了整個(gè)設(shè)計(jì),是本次設(shè)計(jì)能夠完成的最重要的環(huán)節(jié)之一。
4.1系統(tǒng)流程圖
根據(jù)溫濕度監(jiān)控系統(tǒng)功能,系統(tǒng)軟件流程圖如圖4-1所示:

圖4-1系統(tǒng)軟件流程圖



4.2按鍵流程圖
按鍵檢測(cè)過(guò)程中,流程如下圖4-2所示:


1.057.jpg


                        圖4-2 按鍵檢測(cè)的流程圖

4.3 Protues運(yùn)行結(jié)果
1.058.jpg
4.4 本章小結(jié)
本章主要給出了系統(tǒng)流程圖,了解了系統(tǒng)流程更好的做出硬件。通過(guò)Proteus軟件或Protel99SE繪制仿真圖、流程圖。


結(jié)  論

本文設(shè)計(jì)的是糧庫(kù)的溫濕度監(jiān)測(cè)報(bào)警、控制系統(tǒng)。由高性價(jià)比單片機(jī)對(duì)數(shù)字溫濕度傳感器控制,通過(guò)溫、濕度傳感器,實(shí)現(xiàn)對(duì)溫濕度數(shù)據(jù)采集,并對(duì)數(shù)據(jù)處理、LCD1602顯示屏顯示即時(shí)溫、濕度值。當(dāng)溫濕度數(shù)據(jù)超出設(shè)定溫、濕度值時(shí),由單片機(jī)驅(qū)動(dòng)報(bào)警裝置,實(shí)現(xiàn)現(xiàn)場(chǎng)報(bào)警功能,控制系統(tǒng)自行啟動(dòng),調(diào)節(jié)不在范圍內(nèi)的溫、濕度,使其恢復(fù)正常。
首先,介紹了設(shè)計(jì)的核心組成部分單片機(jī)AT89S51的的基本構(gòu)成和原理,簡(jiǎn)要的說(shuō)明了單片機(jī)的最小系統(tǒng),中斷系統(tǒng),復(fù)位電路和時(shí)鐘電路。然后介紹了顯示部分LCD1602的各個(gè)引腳和指令說(shuō)明,為下面的編程做準(zhǔn)備。
其次,介紹了本次設(shè)計(jì)的傳感器:DHT11溫濕度傳感器。然后給出了主要模塊電路的結(jié)構(gòu),在硬件連接以后,初步的硬件運(yùn)行結(jié)果,以實(shí)物圖的形式進(jìn)行了說(shuō)明。介紹了控制溫、濕度的設(shè)備,在根據(jù)不同環(huán)境下的應(yīng)用和選擇。
最后,說(shuō)明了用到的軟件,給出了總體的原理圖和流程圖和Proteus運(yùn)行結(jié)果,以便更好的理解。
最后程序檢查正常,焊接成品,硬件運(yùn)行正常,滿足了初步設(shè)計(jì)要求,達(dá)到了糧庫(kù)溫、濕度控制的目的。在設(shè)計(jì)中還有不足的部分,在現(xiàn)場(chǎng)控制時(shí),保證傳感器不受條件因素的影響是很重要的,由于研究時(shí)間和條件的限制,糧庫(kù)溫、濕度還有許多地方需要深入研究。


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



單片機(jī)源程序如下:
  1. #include

  2. #include "key_contrl.h"
  3. #include "lcd1602.h"


  4. #define LCM_Data P1
  5. #define Busy 0x80 //用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí)

  6. extern int temp_value, humi_value;
  7. extern int flag;
  8. extern int temp;

  9. sbit red=P2^6;
  10. sbit blue=P2^7;

  11. sbit LCM_RW= P2^4; //定義引腳
  12. sbit LCM_RS= P2^5;
  13. sbit LCM_E= P2^3;


  14. sbit beep = P0^6; //beep = 0時(shí)候發(fā)聲


  15. extern int temph,templ,disp_mode,huih,huil;
  16. extern char tel,teh,hh,hl;

  17. //寫(xiě)數(shù)據(jù)

  18. void alarm()
  19. {
  20.               beep=0;

  21.               Delay5Ms();
  22.               Delay5Ms();
  23.               beep=1;

  24.               Delay5Ms();
  25.               Delay5Ms();

  26. }


  27. void WriteDataLCM(unsigned char WDLCM)
  28. {
  29. ReadStatusLCM(); //檢測(cè)忙
  30. LCM_Data = WDLCM;
  31. LCM_RS = 1;
  32. LCM_RW = 0;
  33. LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
  34. LCM_E = 0; //延時(shí)
  35. LCM_E = 1;
  36. }
  37. //寫(xiě)指令
  38. void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
  39. {
  40. if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測(cè)忙
  41. LCM_Data = WCLCM;
  42. LCM_RS = 0;
  43. LCM_RW = 0;
  44. LCM_E = 0;
  45. LCM_E = 0;
  46. LCM_E = 1;
  47. }
  48. //讀數(shù)據(jù)
  49. unsigned char ReadDataLCM(void)
  50. {
  51. LCM_RS = 1;
  52. LCM_RW = 1;
  53. LCM_E = 0;
  54. LCM_E = 0;
  55. LCM_E = 1;
  56. return(LCM_Data);
  57. }
  58. //讀狀態(tài)
  59. unsigned char ReadStatusLCM(void)
  60. {
  61. LCM_Data = 0xFF;
  62. LCM_RS = 0;
  63. LCM_RW = 1;
  64. LCM_E = 0;
  65. LCM_E = 0;
  66. LCM_E = 1;
  67. while (LCM_Data & Busy); //檢測(cè)忙信號(hào)
  68. return(LCM_Data);
  69. }
  70. void LCMInit(void) //LCM初始化
  71. {
  72. LCM_Data = 0;
  73. WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
  74. Delay5Ms();
  75. WriteCommandLCM(0x38,0);
  76. Delay5Ms();
  77. WriteCommandLCM(0x38,0);
  78. Delay5Ms();
  79. WriteCommandLCM(0x38,1); //顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào)
  80. WriteCommandLCM(0x08,1); //關(guān)閉顯示
  81. WriteCommandLCM(0x01,1); //顯示清屏
  82. WriteCommandLCM(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
  83. WriteCommandLCM(0x0C,1); // 顯示開(kāi)及光標(biāo)設(shè)置
  84. }
  85. //按指定位置顯示一個(gè)字符
  86. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  87. {
  88. Y &= 0x1;
  89. X &= 0xF; //限制X不能大于15,Y不能大于1
  90. if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼 0x40;
  91. X |= 0x80; // 算出指令碼
  92. WriteCommandLCM(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
  93. WriteDataLCM(DData);
  94. }
  95. //按指定位置顯示一串字符
  96. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  97. {
  98. unsigned char ListLength;
  99. ListLength = 0;
  100. Y &= 0x1;
  101. X &= 0xF; //限制X不能大于15,Y不能大于1
  102. while (DData[ListLength]>0x20) //若到達(dá)字串尾則退出
  103. {
  104. if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF
  105. {
  106. DisplayOneChar(X, Y, DData[ListLength]); //顯示單個(gè)字符
  107. ListLength++;
  108. X++;
  109. }
  110. }
  111. }
  112. //5ms延時(shí)
  113. void Delay5Ms(void)
  114. {
  115. unsigned int TempCyc = 5552;
  116. while(TempCyc--);
  117. }
  118. /*void Delay_xMs(unsigned int x)
  119. {
  120.     unsigned int i,j;
  121.     for( i =0;i < x;i++ )
  122.     {
  123.         for( j =0;j<500;j++ );
  124.     }
  125. }
  126. */
  127. void display_temp(void)
  128. {
  129.               DisplayOneChar(0,0,' ');
  130.               DisplayOneChar(1,0,' ');
  131.               DisplayOneChar(2,0,'T');
  132.               DisplayOneChar(3,0,'e');
  133.               DisplayOneChar(4,0,'m');
  134.               DisplayOneChar(5,0,'p');
  135.               DisplayOneChar(6,0,':');
  136.               DisplayOneChar(10,0,'C');
  137.               DisplayOneChar(9,0,0xdf);
  138.               DisplayOneChar(7,0,temp_value/100+0x30);
  139.               DisplayOneChar(8,0,(temp_value/10)-(temp_value/100)*10+0x30);
  140.               DisplayOneChar(11,0,' ');
  141.               DisplayOneChar(12,0,' ');
  142.               DisplayOneChar(13,0,' ');
  143.               DisplayOneChar(14,0,' ');
  144.               DisplayOneChar(15,0,' ');


  145.               DisplayOneChar(0,1,' ');
  146.               DisplayOneChar(1,1,' ');
  147.               DisplayOneChar(2,1,'H');
  148.               DisplayOneChar(3,1,'u');
  149.               DisplayOneChar(4,1,'m');
  150.               DisplayOneChar(5,1,'i');
  151.               DisplayOneChar(6,1,'d');
  152.               DisplayOneChar(7,1,'i');
  153.               DisplayOneChar(8,1,'t');
  154.                             DisplayOneChar(9,1,'y');
  155.               DisplayOneChar(10,1,':');
  156.               DisplayOneChar(11,1,humi_value/100+0x30);
  157.               DisplayOneChar(12,1,(humi_value/10)-(humi_value/100)*10+0x30);
  158.               DisplayOneChar(13,1,'%');

  159.               DisplayOneChar(14,1,' ');
  160.               DisplayOneChar(15,1,' ');
  161. }            

  162. void display_temp1(void)
  163. {

  164.               DisplayOneChar(0,0,' ');
  165.               DisplayOneChar(1,0,'T');
  166.               DisplayOneChar(2,0,'h');
  167.               DisplayOneChar(3,0,':');
  168.               if(flag&teh)
  169.               {
  170.               DisplayOneChar(4,0,0x20);
  171.               DisplayOneChar(5,0,0x20);
  172.               }
  173.               else
  174.               {
  175.               DisplayOneChar(4,0,temph/10+0x30);
  176.               DisplayOneChar(5,0,temph%10+0x30);
  177.               }

  178.               DisplayOneChar(6,0,0xdf);
  179.               DisplayOneChar(7,0,'C');



  180.               DisplayOneChar(8,0,' ');
  181.               DisplayOneChar(9,0,'T');
  182.               DisplayOneChar(10,0,'h');
  183.               DisplayOneChar(11,0,':');
  184.               if(flag&tel)
  185.               {
  186.               DisplayOneChar(12,0,0x20);
  187.               DisplayOneChar(13,0,0x20);
  188.               }
  189.               else
  190.               {
  191.               DisplayOneChar(12,0,templ/10+0x30);
  192.               DisplayOneChar(13,0,templ%10+0x30);
  193.               }
  194.               DisplayOneChar(14,0,0xdf);
  195.               DisplayOneChar(15,0,'C');



  196.                             DisplayOneChar(0,1,' ');
  197.               DisplayOneChar(1,1,'H');
  198.               DisplayOneChar(2,1,'h');
  199.               DisplayOneChar(3,1,':');
  200.                             if(flag&hh)
  201.               {
  202.               DisplayOneChar(4,1,0x20);
  203.               DisplayOneChar(5,1,0x20);
  204.               }
  205.               else
  206.               {
  207.               DisplayOneChar(4,1,huih/10+0x30);
  208.               DisplayOneChar(5,1,huih%10+0x30);
  209.               }
  210.               DisplayOneChar(6,1,'%');
  211.               DisplayOneChar(7,1,' ');



  212.               DisplayOneChar(8,1,' ');
  213.               DisplayOneChar(9,1,'H');
  214.               DisplayOneChar(10,1,'l');
  215.               DisplayOneChar(11,1,':');
  216.                             if(flag&hl)
  217.               {
  218.               DisplayOneChar(12,1,0x20);
  219.               DisplayOneChar(13,1,0x20);
  220.               }
  221.               else
  222.               {

  223.               DisplayOneChar(12,1,huil/10+0x30);
  224.               DisplayOneChar(13,1,huil%10+0x30);
  225.               }
  226.               DisplayOneChar(14,1,'%');
  227.               DisplayOneChar(15,1,' ');
  228. }            


  229. void displayfun1()
  230. {
  231.               display_temp();

  232. }

  233. void displayfun2()
  234. {
  235.               display_temp1();            
  236. }


  237. void display()
  238. {

  239.                             if((((temp_value/10)%100)<templ)||(((humi_value 10)%100)<huil))
  240.                             {beep=0;red=0;}                //溫度低于下限值,報(bào)警
  241.                             else if(((temp_value/10)%100)>=temph || ((humi_value/10)%100)>=huih)
  242.                                           {beep=0;blue=0;}      //溫度高于或等于上限值,報(bào)警
  243.                             else {beep=1;red=1;blue=1;}

  244. //                            if(((humi_value/10)%100)<huil){beep=0;led=0;} 溫度低于下限值,報(bào)警
  245. //                            else if(((humi_value/10)%100)>=huih)beep=0;      //溫度高于或等于上限值,報(bào)警
  246. //                            else {beep=1;led=1;}


  247.               if(!disp_mode)
  248.                             displayfun1(); //顯示正常
  249.               else
  250.                             displayfun2(); //設(shè)置界面

  251. }
  252. #include "dht11.h"
  253. #include


  254. //請(qǐng)根據(jù)自己的dht11 接的IO 口來(lái)改動(dòng)位定義


  255. sbit dht11 = P3^0;
  256. //防止在與硬件通信時(shí)發(fā)生死循環(huán)的計(jì)數(shù)范圍

  257. #define NUMBER 20
  258. #define SIZE 5

  259. static unsigned char status;

  260. //存放五字節(jié)數(shù)據(jù)的數(shù)組
  261. static unsigned char value_array[SIZE];

  262. /*可在其他的文件引用溫濕度值,實(shí)際是溫度的整數(shù)的10 倍
  263. 如dht11 讀回的溫度是26,則temp_value = 260, 濕度同理*/
  264. int temp_value, humi_value;


  265. static unsigned char ReadValue(void);



  266. void Delay_1ms(unsigned int ms)
  267. {
  268.               unsigned int x, y;
  269.               for(x = ms; x > 0; x--)
  270.               {
  271.                             for(y = 124; y > 0; y--);
  272.               }
  273. }
  274. static void DHT11_Delay_10us(void)
  275. {
  276.               unsigned char i;
  277.               i--;
  278.               i--;
  279.               i--;
  280.               i--;
  281.               i--;
  282.               i--;
  283. }
  284. /*讀一個(gè)字節(jié)的數(shù)據(jù)*/
  285. static unsigned char DHT11_ReadValue(void)
  286. {
  287.               unsigned char count, value = 0, i;
  288.               status = OK; //設(shè)定標(biāo)志為正常狀態(tài)
  289.               for(i = 8; i > 0; i--)
  290.               {
  291.                             //高位在先
  292.                             value <<= 1;
  293.                             count = 0;
  294.                             //每一位數(shù)據(jù)前會(huì)有一個(gè)50us 的低電平時(shí)間.等待50us 低電平結(jié)束
  295.                             while(dht11 == 0 && count++ < NUMBER);
  296.                             if(count >= NUMBER)
  297.                                           {
  298.                                           status = ERROR; //設(shè)定錯(cuò)誤標(biāo)志
  299.                                           return 0; //函數(shù)執(zhí)行過(guò)程發(fā)生錯(cuò)誤就退出函數(shù)
  300.                                           }
  301.                             //26-28us 的高電平表示該位是0,為70us 高電平表該位1
  302.                             DHT11_Delay_10us();
  303.                             DHT11_Delay_10us();
  304.                             DHT11_Delay_10us();
  305.                             //延時(shí)30us 后檢測(cè)數(shù)據(jù)線是否還是高電平
  306.                             if(dht11 != 0)
  307.                             {
  308.                             //進(jìn)入這里表示該位是1
  309.                                           value++;
  310.                             //等待剩余(約40us)的高電平結(jié)束
  311.                                           while(dht11 != 0 && count++ < NUMBER)
  312.                                           {
  313.                                                         dht11 = 1;
  314.                                           }
  315.                                           if(count >= NUMBER)
  316.                                           {
  317.                                                         status = ERROR; //設(shè)定錯(cuò)誤標(biāo)志
  318.                                                         return 0;
  319.                                           }
  320.                             }
  321.               }
  322.               return (value);
  323. }
  324. //讀溫度和濕度函數(shù),讀一次的數(shù)據(jù),共五字節(jié),讀出成功函數(shù)返回OK, 錯(cuò)誤返回ERROR
  325. unsigned char DHT11_ReadTempAndHumi(void)
  326. {
  327.               unsigned char i = 0, check_value = 0,count = 0;
  328.               EA = 0;
  329.               dht11 = 0; //拉低數(shù)據(jù)線大于18ms 發(fā)送開(kāi)始信號(hào)
  330.               Delay_1ms(20); //需大于18 毫秒
  331.               dht11 = 1; //釋放數(shù)據(jù)線,用于檢測(cè)低電平的應(yīng)答信號(hào)
  332.               //延時(shí)20-40us,等待一段時(shí)間后檢測(cè)應(yīng)答信號(hào),應(yīng)答信號(hào)是從機(jī)拉低數(shù)據(jù)線80us
  333.               DHT11_Delay_10us();
  334.               DHT11_Delay_10us();
  335.               DHT11_Delay_10us();
  336.               DHT11_Delay_10us();
  337.               if(dht11 != 0) //檢測(cè)應(yīng)答信號(hào),應(yīng)答信號(hào)是低電平
  338.               {
  339.                             //沒(méi)應(yīng)答信號(hào)
  340.                             EA = 1;
  341.                             return ERROR;
  342.               }
  343.               else
  344.               {
  345.                             //有應(yīng)答信號(hào)
  346.                             while(dht11 == 0 && count++ < NUMBER); //等待應(yīng)答信號(hào)結(jié)束
  347.                             if(count >= NUMBER) //檢測(cè)計(jì)數(shù)器是否超過(guò)了設(shè)定的范圍
  348.                             {
  349.                                           dht11 = 1;
復(fù)制代碼

為了防止有人抄襲,頭文件沒(méi)有上傳,文檔僅供參考學(xué)習(xí),給大家一個(gè)大體的實(shí)現(xiàn)思路,少走彎路,沒(méi)有頭文件是無(wú)法編譯的,所以無(wú)法抄襲:
以上文字word版下載: 基于51單片機(jī)的溫濕度檢測(cè)控制系統(tǒng) .doc (1.1 MB, 下載次數(shù): 1167)

評(píng)分

參與人數(shù) 7黑幣 +80 收起 理由
wangjian5201314 + 5 很給力!
spartacus + 5 共享資料的黑幣獎(jiǎng)勵(lì)!
嘻嘻LI + 5 贊一個(gè)!
xinghang + 5 共享資料的黑幣獎(jiǎng)勵(lì)!
51@11 + 5 很給力!
雷猴嘛 + 5 好貼啊,樓主好人啊,我剛好要做一個(gè)溫濕控.
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:203922 發(fā)表于 2017-5-23 15:47 | 顯示全部樓層
樓主做的很完整很全面,贊一個(gè),但是我黑幣不夠,今天下載不了,等明天簽到賺黑幣再來(lái)吧
回復(fù)

使用道具 舉報(bào)

ID:203922 發(fā)表于 2017-5-24 13:29 | 顯示全部樓層
樓主,能不能lcd1602,dht,key_contrl的頭文件給我,謝了
回復(fù)

使用道具 舉報(bào)

ID:213529 發(fā)表于 2017-6-21 22:22 | 顯示全部樓層
我也要做個(gè)溫濕度系統(tǒng) 不太會(huì)
回復(fù)

使用道具 舉報(bào)

ID:214255 發(fā)表于 2017-6-24 14:56 | 顯示全部樓層
我也在做
回復(fù)

使用道具 舉報(bào)

ID:216356 發(fā)表于 2017-7-1 16:34 | 顯示全部樓層
做的很好,需要完整程序
回復(fù)

使用道具 舉報(bào)

ID:244326 發(fā)表于 2017-11-1 22:59 | 顯示全部樓層
樓主,能不能lcd1602,dht,key_contrl的頭文件給我,謝了
回復(fù)

使用道具 舉報(bào)

ID:244326 發(fā)表于 2017-11-1 23:00 | 顯示全部樓層
給一下頭文件,樓主
回復(fù)

使用道具 舉報(bào)

ID:264842 發(fā)表于 2017-12-22 09:52 | 顯示全部樓層
挺好的就是沒(méi)有做出來(lái)
回復(fù)

使用道具 舉報(bào)

ID:250791 發(fā)表于 2017-12-25 23:26 | 顯示全部樓層
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:269882 發(fā)表于 2018-1-1 20:56 | 顯示全部樓層
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:274518 發(fā)表于 2018-1-10 21:35 | 顯示全部樓層
樓主有proteus文件嗎,求
回復(fù)

使用道具 舉報(bào)

ID:281379 發(fā)表于 2018-2-1 11:03 | 顯示全部樓層
請(qǐng)問(wèn)為什么既有分塊電路又有整體在一起的電路圖呢,是整體的電路圖是最終結(jié)果嗎
回復(fù)

使用道具 舉報(bào)

ID:281572 發(fā)表于 2018-2-1 21:15 | 顯示全部樓層
請(qǐng)問(wèn)為什么既有分塊電路又有整體在一起的電路圖呢,是整體的電路圖是最終結(jié)果嗎
回復(fù)

使用道具 舉報(bào)

ID:286959 發(fā)表于 2018-3-2 16:12 | 顯示全部樓層
有沒(méi)有大佬分享一下程序啊啊啊啊啊
回復(fù)

使用道具 舉報(bào)

ID:288877 發(fā)表于 2018-3-7 20:10 | 顯示全部樓層
畢業(yè)設(shè)計(jì)用到了  求黑幣啊  或者源代碼啊給大佬!
回復(fù)

使用道具 舉報(bào)

ID:288877 發(fā)表于 2018-3-8 10:38 | 顯示全部樓層
l樓主你好  在main函數(shù)里面的delay_LCM 和 Scan_Key 這兩個(gè)函數(shù)在整個(gè)工程中都沒(méi)有找到啊 能指點(diǎn)一下嗎
回復(fù)

使用道具 舉報(bào)

ID:304486 發(fā)表于 2018-4-9 15:54 | 顯示全部樓層
做的不錯(cuò),就是現(xiàn)在我積分不夠  哈哈 再接再厲
回復(fù)

使用道具 舉報(bào)

ID:319824 發(fā)表于 2018-5-1 14:25 | 顯示全部樓層
真棒,正需要
回復(fù)

使用道具 舉報(bào)

ID:318466 發(fā)表于 2018-5-2 09:04 | 顯示全部樓層
寫(xiě)的很好!
回復(fù)

使用道具 舉報(bào)

ID:320588 發(fā)表于 2018-5-2 17:02 | 顯示全部樓層
我啥時(shí)候才能像樓主一樣聰明呢,求程序呀
回復(fù)

使用道具 舉報(bào)

ID:320675 發(fā)表于 2018-5-2 21:58 | 顯示全部樓層
在main函數(shù)里面的delay_LCM 和 Scan_Key 這兩個(gè)函數(shù)在整個(gè)工程中都沒(méi)有找到啊 能指點(diǎn)一下嗎
回復(fù)

使用道具 舉報(bào)

ID:318466 發(fā)表于 2018-5-7 09:23 | 顯示全部樓層
樓主寫(xiě)的很好,不知道能不下不
回復(fù)

使用道具 舉報(bào)

ID:323975 發(fā)表于 2018-5-7 10:22 | 顯示全部樓層
樓主做的真的不錯(cuò),我想要這份代碼學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

ID:306818 發(fā)表于 2018-5-7 13:26 | 顯示全部樓層
你程序怎么不對(duì)呢
回復(fù)

使用道具 舉報(bào)

ID:310600 發(fā)表于 2018-5-9 16:55 | 顯示全部樓層
這里所有的都僅供參考,這個(gè)仿真圖和程序完全不匹配。我也不知道這東西怎么能跑的起來(lái),浪費(fèi)我黑幣
回復(fù)

使用道具 舉報(bào)

ID:256945 發(fā)表于 2018-5-13 09:38 | 顯示全部樓層
大哥你這頭文件是哪個(gè)都分不清啊,能穿個(gè)壓縮包行嗎
回復(fù)

使用道具 舉報(bào)

ID:335987 發(fā)表于 2018-5-22 20:38 | 顯示全部樓層

樓主,能不能lcd1602,dht,key_contrl的頭文件給我,謝謝
回復(fù)

使用道具 舉報(bào)

ID:340417 發(fā)表于 2018-5-29 11:08 | 顯示全部樓層
贊一個(gè),很厲害。
回復(fù)

使用道具 舉報(bào)

ID:341610 發(fā)表于 2018-5-31 11:12 | 顯示全部樓層
贊,很給力!
回復(fù)

使用道具 舉報(bào)

ID:291426 發(fā)表于 2018-6-3 13:22 | 顯示全部樓層
非常棒
回復(fù)

使用道具 舉報(bào)

ID:346620 發(fā)表于 2018-6-7 03:56 | 顯示全部樓層
謝謝分享~正好需要這個(gè)
回復(fù)

使用道具 舉報(bào)

ID:349230 發(fā)表于 2018-6-11 09:38 | 顯示全部樓層

樓主,從能不能lcd1602,dht,key_contrl的頭文件給我,謝了
回復(fù)

使用道具 舉報(bào)

ID:362736 發(fā)表于 2018-7-1 22:13 | 顯示全部樓層
非常實(shí)用
回復(fù)

使用道具 舉報(bào)

ID:363811 發(fā)表于 2018-7-3 11:05 | 顯示全部樓層
樓主,從能不能lcd1602,dht,key_contrl的頭文件給我,謝了
回復(fù)

使用道具 舉報(bào)

ID:337080 發(fā)表于 2018-8-4 11:22 | 顯示全部樓層
多謝分享,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:403726 發(fā)表于 2018-9-28 18:24 | 顯示全部樓層
多謝樓主慷慨解囊
回復(fù)

使用道具 舉報(bào)

ID:328119 發(fā)表于 2018-10-28 11:38 | 顯示全部樓層
很詳細(xì)
回復(fù)

使用道具 舉報(bào)

ID:416616 發(fā)表于 2018-10-28 14:30 | 顯示全部樓層
好東西,正好需要這個(gè)
回復(fù)

使用道具 舉報(bào)

ID:298058 發(fā)表于 2018-10-28 15:58 | 顯示全部樓層
很棒!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表