畢業(yè)設(shè)計(jì)--基于單片機(jī)的遠(yuǎn)程大棚溫濕度監(jiān)控系統(tǒng)_第1頁
已閱讀1頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  畢 業(yè) 設(shè) 計(jì) [論 文]</p><p>  題 目:基于單片機(jī)的遠(yuǎn)程大棚溫濕度監(jiān)控系統(tǒng)</p><p>  學(xué) 院: 電氣與信息工程學(xué)院 </p><p>  專 業(yè): 電氣工程及其自動(dòng)化 </p><p><b>  摘 要<

2、;/b></p><p>  本課題以遠(yuǎn)程大棚溫濕度監(jiān)控為研究目的,數(shù)據(jù)采集部分采用51單片機(jī)和DHT11單總線數(shù)字式溫濕度傳感器,數(shù)據(jù)傳輸部分采用485總線電平標(biāo)準(zhǔn)。數(shù)據(jù)的集中處理部分采用了51單片機(jī)硬件上位機(jī)和PC軟件上位機(jī)兩種方案。51單片機(jī)上位機(jī)或PC軟件上位機(jī)通過485電平和51單片機(jī)溫濕度數(shù)據(jù)采集器通信。本課題根據(jù)市場的情況開發(fā)出了一個(gè)硬件上位機(jī)平臺(tái),其采集到溫濕度信息后通過1602液晶進(jìn)行實(shí)時(shí)

3、顯示。PC軟件上位機(jī)是本課題提供的一個(gè)額外的新方案,采用python編程語言,利用其開發(fā)速度快的優(yōu)點(diǎn),在短時(shí)間內(nèi)開發(fā)出了一個(gè)簡單的軟件上位機(jī)平臺(tái),軟件上位機(jī)可以和硬件上位機(jī)可以輕松組成一個(gè)冗余系統(tǒng)。</p><p>  關(guān)鍵字:python編程,DHT11溫濕度,51單片機(jī)</p><p><b>  ABSTRACT</b></p><p>

4、  The purpose of this topic is to remote greenhouse temperature and humidity monitoring. The data collection uses 51 MCU and DHT11 single-bus digital temperature and humidity sensors. The data transmission part adopts 48

5、5-level standards. Centralized data processing part uses two programs:a microcontroller hardware by 51 MCU and PC software moniter. The 51 single host computer or PC software PC communications through 485 levels, 51 sing

6、le temperature and humidity data logger. This topic can be dev</p><p>  KEY WORDS: Python , DHT11, 51MCU</p><p><b>  目 錄</b></p><p><b>  摘要I</b></p>

7、<p>  ABSTRACTII</p><p><b>  目錄III</b></p><p><b>  第1章 引言1</b></p><p><b>  1.1課題背景1</b></p><p>  1.2 大棚溫濕度監(jiān)控系統(tǒng)系統(tǒng)發(fā)展現(xiàn)狀1<

8、/p><p>  1.3 本設(shè)計(jì)的主要工作2</p><p>  第2章 系統(tǒng)設(shè)計(jì)3</p><p>  2.1 主要構(gòu)成3</p><p>  2.2 總體方案3</p><p>  2.3 方案說明4</p><p>  第3章 溫濕度采集點(diǎn)的設(shè)計(jì)5</p><p

9、>  3.1 工作原理5</p><p>  3.2 硬件原理圖6</p><p>  3.3 STC89C52單片機(jī)6</p><p>  3.3.1 簡介6</p><p>  3.3.2 引腳圖7</p><p>  3.3.3 串口通訊7</p><p>  3.4

10、DHT11數(shù)字溫濕度傳感器9</p><p>  3.4.1 簡介9</p><p>  3.4.2 在本設(shè)計(jì)中的應(yīng)用10</p><p>  3.4.3 串行接口10</p><p>  3.4.4 通信過程11</p><p>  3.5 程序設(shè)計(jì)11</p><p>  3.5

11、.1 開發(fā)工具介紹11</p><p>  3.5.2 C語言介紹12</p><p>  3.5.3 C語言優(yōu)點(diǎn)12</p><p>  3.5.4 C程序設(shè)計(jì)13</p><p>  第4章 硬件上位機(jī)的設(shè)計(jì)21</p><p>  4.1 工作原理21</p><p>  

12、4.2 LCD1602液晶22</p><p>  4.2.1 簡介22</p><p>  4.2.2 引腳圖22</p><p>  4.3 硬件原理圖23</p><p>  4.4 程序設(shè)計(jì)24</p><p>  4.4.1 設(shè)計(jì)算法24</p><p>  4.4.2 宏

13、定義和預(yù)處理24</p><p>  4.4.3 子函數(shù)設(shè)計(jì)24</p><p>  4.4.4 main函數(shù)和中斷函數(shù)設(shè)計(jì)27</p><p>  第5章 軟件上位機(jī)設(shè)計(jì)31</p><p>  5.1 工作原理31</p><p>  5.2 python語言簡介31</p><p&

14、gt;  5.3 所用庫簡介32</p><p>  5.3.1 pygame32</p><p>  5.3.2 pyserial33</p><p>  5.4 python語言特點(diǎn)33</p><p>  5.4.1 python 數(shù)據(jù)類型33</p><p>  5.4.2 python強(qiáng)制縮進(jìn)34

15、</p><p>  5.5 程序設(shè)計(jì)34</p><p>  5.5.1 源代碼34</p><p>  5.5.2 exe程序制作38</p><p>  5.6 程序運(yùn)行界面39</p><p>  第6章 設(shè)計(jì)總結(jié)41</p><p>  6.1 設(shè)計(jì)過程中遇到的問題及解決方法

16、41</p><p><b>  6.2 展望41</b></p><p><b>  參考文獻(xiàn)42</b></p><p><b>  致謝43</b></p><p><b>  附錄:44</b></p><p>&

17、lt;b>  附錄A:44</b></p><p><b>  第1章 引言</b></p><p><b>  1.1課題背景</b></p><p>  溫濕度是工業(yè)、農(nóng)業(yè)生產(chǎn)中常見的和最基本的參數(shù)之一,在生產(chǎn)過程中常常需要對(duì)溫濕度進(jìn)行檢測和監(jiān)控。采用現(xiàn)代技術(shù)進(jìn)行溫濕度檢測、數(shù)字顯示、信息存儲(chǔ)及實(shí)時(shí)

18、顯示,對(duì)于提高農(nóng)業(yè)生產(chǎn)效率和產(chǎn)品質(zhì)量、節(jié)約能源等都有重要的作用。伴隨農(nóng)業(yè)科技的發(fā)展,溫濕度測量需求越來越多,也越來越重要,但是在許多特定環(huán)境溫度檢測環(huán)境范圍大、精度要求高。這就要采用現(xiàn)場總線技術(shù)對(duì)溫濕度進(jìn)行采集和控制。</p><p>  我國的農(nóng)業(yè)生產(chǎn)自改革開放以來取得了可喜可賀的成績的同時(shí),也凸現(xiàn)出了越來越多的問題,這些問題嚴(yán)重制約我國農(nóng)業(yè)可持續(xù)發(fā)展,如果得不到及時(shí)解決,將成為發(fā)展中的瓶頸。其存在的問題有:首

19、先是我國人口眾多,其次是資源短缺,再次是我國農(nóng)業(yè)生產(chǎn)的農(nóng)產(chǎn)品成本高以及科技含量低,沒有形成規(guī)模產(chǎn)業(yè)。解決這些問題的關(guān)鍵在于我國農(nóng)業(yè)實(shí)現(xiàn)從傳統(tǒng)農(nóng)工業(yè)向以高效、優(yōu)質(zhì)、高產(chǎn)為目的的現(xiàn)代科技農(nóng)業(yè)轉(zhuǎn)型。農(nóng)業(yè)環(huán)境以高效、優(yōu)質(zhì)、高產(chǎn)為目的的科技控制手段,有利于推動(dòng)溫室技術(shù)設(shè)備的大面積推廣,縮小與國外技術(shù)的差距,加快我國農(nóng)業(yè)現(xiàn)代化進(jìn)程。 </p><p>  結(jié)合我國現(xiàn)在大棚種植的現(xiàn)狀,本課題研究了單片機(jī)作為核心控制器實(shí)現(xiàn)

20、對(duì)于溫濕度的實(shí)時(shí)采集、傳輸。對(duì)于大棚種植的現(xiàn)代化,智能化具有重大的意義。</p><p>  1.2 大棚溫濕度監(jiān)控系統(tǒng)系統(tǒng)發(fā)展現(xiàn)狀</p><p>  目前,大棚溫濕度監(jiān)控系統(tǒng)大多采用模擬溫度檢測傳感器,AD轉(zhuǎn)換芯片以及單片機(jī)構(gòu)成的傳輸系統(tǒng),這種溫濕度度采集系統(tǒng)需要在溫室大棚內(nèi)布置大量的測溫電纜,才能把現(xiàn)場傳感器的信號(hào)送到采集卡上,安裝和拆卸繁雜,成本也高。同時(shí)線路上傳送的是模擬信號(hào),易

21、受干擾和損耗,測量誤差也比較大。</p><p>  顯然,這種溫濕度監(jiān)控系統(tǒng)已經(jīng)滿足農(nóng)業(yè)生產(chǎn)要求了,對(duì)于現(xiàn)在的大棚溫濕度測溫系統(tǒng)我提幾種不足:</p><p> ?、?室內(nèi)布線復(fù)雜 傳統(tǒng)的溫濕度測試系統(tǒng)需要在室內(nèi)布置大量的電纜,這需要大量的耗費(fèi)的人力、物力。這也間接增加了農(nóng)業(yè)生產(chǎn)成本.</p><p> ?、?傳輸不穩(wěn)定 由于傳統(tǒng)的溫濕度測試系統(tǒng)是通過模擬信號(hào)傳

22、輸?shù)?,由于模擬信號(hào)對(duì)于干擾很敏感,極易受干擾。這樣很可能導(dǎo)致信號(hào)在傳輸過程中失真和變形。</p><p>  1.3 本設(shè)計(jì)的主要工作</p><p>  鑒于大棚溫濕度監(jiān)控系統(tǒng)的現(xiàn)狀,本設(shè)計(jì)研究了以單片機(jī)和數(shù)字式溫濕度傳感器為核心部件的大棚溫濕度監(jiān)控系統(tǒng)?,F(xiàn)給出如下的解決方案:</p><p> ?、?STC89C52作為核心控制器 8051系列單片機(jī)芯片是從

23、其誕生到目前都是一款非常常用的一款微控制器。STC是目前國內(nèi)最受歡迎的單片機(jī)生產(chǎn)商,本設(shè)計(jì)采用了STC89C52單片機(jī),其內(nèi)部有豐富的I/O資源。STC具有串口ISP功能,可以很方便的通過串口進(jìn)行flash的在線燒寫。由于其價(jià)格比較低廉、工作穩(wěn)定、抗干擾性強(qiáng)已經(jīng)成為了微控制器的首選產(chǎn)品</p><p> ?、?DHT11作為溫濕度傳感器 由于模擬溫濕度傳感器傳輸不穩(wěn)定,易受干擾,而且其需要大量的外部器件作為配合

24、才能夠完成溫濕度采集,本設(shè)計(jì)采用數(shù)字式溫濕度傳感器DHT11。其采用了單總線結(jié)構(gòu),只需要占用單片機(jī)一個(gè)I/O口,這樣就簡化了布線。由于無需A/D轉(zhuǎn)換,還為開發(fā)提供了便利。</p><p> ?、?采用串口通信 STC89C52單片機(jī)內(nèi)部有一個(gè)串口資源,可以用于串口通信。波特率采用了業(yè)內(nèi)最通用的9600bps。數(shù)據(jù)采集采用“詢問”方式,這樣可以避免了通信中產(chǎn)生沖突。</p><p>  

25、本設(shè)計(jì)以以上的方案為基準(zhǔn)進(jìn)行設(shè)計(jì),完成了兩點(diǎn)的溫度采集然后通過串口發(fā)送到硬件上位機(jī)端進(jìn)行溫濕度的實(shí)時(shí)顯示的程序以及硬件開發(fā)。</p><p><b>  第2章 系統(tǒng)設(shè)計(jì)</b></p><p><b>  2.1 主要構(gòu)成</b></p><p>  本大棚遠(yuǎn)程溫濕度監(jiān)控系統(tǒng)主要由監(jiān)測系統(tǒng)、執(zhí)行機(jī)構(gòu)、上位機(jī)平臺(tái)三大部分構(gòu)

26、成。本設(shè)計(jì)以簡單的一個(gè)大棚為例進(jìn)行方案的設(shè)計(jì)。</p><p>  監(jiān)測系統(tǒng):主要是溫濕度采集點(diǎn)、狀態(tài)控制器。</p><p> ?、?溫濕度采集點(diǎn)主要完成遠(yuǎn)程溫濕度的采集然后通過485總線及時(shí)發(fā)送溫濕度信息,以供遠(yuǎn)方上位機(jī)能夠獲取到相關(guān)信息。例如:當(dāng)溫濕度采集點(diǎn)接收到遠(yuǎn)方上位機(jī)發(fā)送來的請(qǐng)求溫濕度數(shù)據(jù)時(shí),其會(huì)立即采集大棚內(nèi)的溫濕度信息,然后通過485總線把采集到的溫濕度信息發(fā)送給上位機(jī)。&

27、lt;/p><p>  ② 狀態(tài)控制器主要完成根據(jù)上位機(jī)的指令完成執(zhí)行機(jī)構(gòu)狀態(tài)的采集和控制例如:當(dāng)狀態(tài)控制器接收到遠(yuǎn)方上位機(jī)發(fā)送來的請(qǐng)求大棚通風(fēng)機(jī)狀態(tài)時(shí),其會(huì)立即采集大棚通風(fēng)機(jī)的狀態(tài)然后通過485總線把大棚通風(fēng)機(jī)狀態(tài)發(fā)送給上位機(jī)。當(dāng)狀態(tài)接收器接收到遠(yuǎn)方上位機(jī)發(fā)送來的關(guān)閉大棚通風(fēng)機(jī)指令時(shí),其會(huì)立即終止大棚通風(fēng)機(jī)的工作,然后向遠(yuǎn)方上位機(jī)發(fā)送執(zhí)行完畢指令高速上位機(jī)指令已執(zhí)行。</p><p>  執(zhí)

28、行機(jī)構(gòu):主要由大棚通風(fēng)機(jī)、透光控制單元構(gòu)成。</p><p> ?、?大棚通風(fēng)機(jī)主要完成大棚內(nèi)濕度的控制,當(dāng)大棚通風(fēng)機(jī)接收到狀態(tài)控制器的控制信息的時(shí)候,其會(huì)啟動(dòng)調(diào)節(jié)大棚內(nèi)的濕度,直到接收到狀態(tài)控制器的停止指令為止。</p><p> ?、?透光控制單元主要完成大棚內(nèi)溫度的調(diào)節(jié)和控制,當(dāng)大棚透光控制單元接收到狀態(tài)控制器的控制信息的時(shí)候,透光控制單元開始工作,直到接收到狀態(tài)控制器的停止指令為止

29、。</p><p>  上位機(jī)平臺(tái):主要由硬件上位機(jī)、軟件上位機(jī)組成。</p><p> ?、?硬件上位機(jī)主要進(jìn)行和監(jiān)測系統(tǒng)、執(zhí)行機(jī)構(gòu)的數(shù)據(jù)交互,當(dāng)需求溫濕度信息的時(shí)候,向監(jiān)測系統(tǒng)發(fā)送請(qǐng)求溫濕度信息指令。當(dāng)需要對(duì)大棚通風(fēng)機(jī)進(jìn)行控制的時(shí)候,向狀態(tài)控制器發(fā)送大棚通風(fēng)機(jī)控制指令。</p><p>  ② 軟件上位機(jī)主要是對(duì)硬件上位機(jī)進(jìn)行互補(bǔ),當(dāng)硬件上位機(jī)出現(xiàn)故障無法工作可

30、以切換到軟件上位機(jī)。軟件上位機(jī)擁有硬件上位機(jī)的所有功能。</p><p><b>  2.2 總體方案</b></p><p>  本大棚遠(yuǎn)程監(jiān)控系統(tǒng)以一個(gè)單個(gè)蔬菜大棚進(jìn)行方案設(shè)計(jì),系統(tǒng)包括四個(gè)大棚通風(fēng)機(jī)、一個(gè)透光控制單元、六個(gè)溫濕度采集點(diǎn)、兩個(gè)狀態(tài)控制器、一個(gè)硬件上位機(jī)、一個(gè)軟件上位機(jī)。其中硬件上位機(jī)和軟件上位機(jī)構(gòu)成冗余系統(tǒng),正常情況下硬件上位機(jī)工作,當(dāng)硬件上位機(jī)出

31、現(xiàn)故障的時(shí)候,可以切換到軟件上位機(jī)系統(tǒng)。從而保證了增強(qiáng)了上位機(jī)的穩(wěn)定性和容災(zāi)能力。采用常規(guī)的485電平通信。</p><p>  系統(tǒng)方案圖如下圖所示:</p><p>  圖2.1 系統(tǒng)平面圖</p><p><b>  2.3 方案說明</b></p><p>  本方案主要是對(duì)單個(gè)大棚進(jìn)行的溫濕度監(jiān)控系統(tǒng),內(nèi)部包含

32、了溫濕度的采集、狀態(tài)控制器對(duì)各單元的控制、通風(fēng)機(jī)的工作條件等。大棚種植中最重要的兩個(gè)指標(biāo)就是溫濕度,大棚溫濕度遠(yuǎn)程監(jiān)控系統(tǒng)實(shí)際上相當(dāng)于一個(gè)大棚種植自動(dòng)化系統(tǒng)。 </p><p>  大棚溫濕度遠(yuǎn)程監(jiān)控系統(tǒng)模塊眾多且內(nèi)部原理相當(dāng)復(fù)雜,在短期內(nèi)靠單人能力完成整個(gè)系統(tǒng)而且能夠直接應(yīng)用到大棚領(lǐng)域幾乎是無法完成的。所以本設(shè)計(jì)對(duì)此方案中的3個(gè)重點(diǎn)模塊進(jìn)行了實(shí)物開發(fā),并且完成了實(shí)物,驗(yàn)證

33、了可行性??梢宰鳛榇笈餃貪穸冗h(yuǎn)程監(jiān)控系統(tǒng)相關(guān)模塊開發(fā)的一個(gè)參考。</p><p>  此三個(gè)模塊分別為溫濕度采集點(diǎn)、硬件上位機(jī)、軟件上位機(jī)。其中軟件上位機(jī)中率先采用了python編程語言,可以作為開發(fā)類似功能的一個(gè)參考。</p><p>  第3章 溫濕度采集點(diǎn)的設(shè)計(jì)</p><p><b>  3.1 工作原理</b></p>

34、<p>  溫濕度采集點(diǎn)采用了目前最為常用的STC89C52單片機(jī)作為微控制器,DHT11作為溫濕度監(jiān)控系統(tǒng)傳感器,DATA線連接到P2.0口,串口作為主要通信端口。串口接MAX13487芯片轉(zhuǎn)換成485電平進(jìn)行遠(yuǎn)距離傳輸。單片機(jī)串口處于監(jiān)聽通信狀態(tài),一旦串口接收到和和自己相關(guān)的特定字符串就開始一次溫濕度度采集,采集完后立即通過串口發(fā)送。溫濕度采集點(diǎn)1大致流程如3.1圖所示:</p><p>  圖:3

35、.1 溫濕度采集點(diǎn)1工作流程</p><p><b>  3.2 硬件原理圖</b></p><p>  硬件部分主要由STC89C52、DHT11溫濕度傳感器 MAX13487(485電平轉(zhuǎn)換)組成。</p><p>  溫濕度采集點(diǎn)原理圖如下圖所示:</p><p>  圖3.2 硬件原理圖</p>

36、<p>  3.3 STC89C52單片機(jī)</p><p><b>  3.3.1 簡介</b></p><p>  STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash存儲(chǔ)器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8

37、 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,3個(gè)16 位定時(shí)器/計(jì)數(shù)器,4個(gè)外部中斷,一個(gè)7向量4級(jí)中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級(jí)中斷結(jié)構(gòu)),全雙工串行口。另外 STC89C52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可

38、選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35MHz,6T/12T可選。</p><p><b>  3.3.2 引腳圖</b></p><p>  本模塊中用到的單片機(jī)為STC89C52,由于通信中使用了96

39、00bps的波特率,采用了11.0592Mhz晶振,其引腳如下圖所示:</p><p>  圖3.3 51單片機(jī)引腳圖</p><p>  3.3.3 串口通訊</p><p>  本次設(shè)計(jì)中,用到了大量的串口通信,采用的是8位異步串行方式,波特率為最常用的9600bps。以下對(duì)51單片機(jī)的串行口相關(guān)部分進(jìn)行了詳細(xì)的介紹。</p><p>

40、  51單片機(jī)內(nèi)部有一個(gè)可編程的雙向全雙工串行通信接口,簡稱串口;該串口有4種工作方式,以適用于不同場合;其波特率由單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器產(chǎn)生,可由軟件設(shè)置;接收和發(fā)送均可工作在查詢模式和中斷模式,比較靈活。</p><p>  51單片機(jī)內(nèi)部的串口擁有兩個(gè)物理上相互獨(dú)立的接收、發(fā)送緩沖器SBUF,可以同時(shí)接收和發(fā)送數(shù)據(jù);發(fā)送緩沖器只能寫入而不能讀出,接收緩沖器只能讀出而不能寫入;兩個(gè)緩沖器占用同一個(gè)地址(9

41、9H);控制MCS-51單片機(jī)串口的寄存器有兩個(gè)SCON和PCON。</p><p>  串口工作方式控制寄存器SCON(99H)如下圖所示:</p><p>  圖3.4 SCON寄存器</p><p> ?、?SM0和SM1:控制單片機(jī)的工作方式;</p><p> ?、?SM2:允許方式2和方式3進(jìn)行多機(jī)通信控制位;</p>

42、<p> ?、?REN:允許串行接收控制位;1-允許接收;0-禁止接收;</p><p> ?、?TB8:用于工作在方式2和方式3時(shí)存放要發(fā)送的第9位數(shù)據(jù),根據(jù)需要,由軟件設(shè)置;</p><p> ?、?RB8:用于工作在方式2和方式3時(shí)存放接收到的第9位數(shù)據(jù);</p><p> ?、?TI:發(fā)送中斷標(biāo)志位,必須由軟件清0;當(dāng)發(fā)送完一幀數(shù)據(jù)時(shí),就產(chǎn)生一

43、個(gè)中斷,此時(shí)TI被硬件自動(dòng)置1,用于標(biāo)記產(chǎn)生了發(fā)送中斷;</p><p> ?、?RI:接收中斷標(biāo)志位,必須由軟件清0;當(dāng)接收完一幀數(shù)據(jù)時(shí),就產(chǎn)生一個(gè)中斷,此時(shí)RI被硬件自動(dòng)置1,用于標(biāo)記產(chǎn)生了接收中斷;</p><p>  特殊功能寄存器PCON(87H)如下圖所示:</p><p>  圖 3.5 PCON寄存器</p><p> ?、?

44、SMOD:波特率倍增位:當(dāng)SMOD=1時(shí),波特率加倍;當(dāng)SMOD=0時(shí),波特率不加倍;</p><p> ?、?GF1和GF0:兩個(gè)通用標(biāo)志,供用戶使用;</p><p> ?、?PD和IDL:CMOS型8051單片機(jī)的低功耗控制位;</p><p>  串口的工作方式有4種,由特殊功能寄存器SCON的SM0位和SM1位共同決定,當(dāng)SM0 SM1取不同的值的時(shí)候,串

45、口對(duì)應(yīng)不同的工作方式。</p><p>  對(duì)應(yīng)關(guān)系如下圖所示:</p><p>  圖 3.6 串口的工作方式</p><p><b> ?、?方式0:</b></p><p>  該方式下串口為同步移位寄存器輸入/輸出方式,其波特率固定不變?yōu)镕osc/12;數(shù)據(jù)由RXD(P3.0)口輸入/輸出,同步移位脈沖由TXD(

46、P3.1)端輸出,發(fā)送接收的都是8位數(shù)據(jù),低位在先。</p><p><b> ?、?方式1:</b></p><p>  當(dāng)SM0 SM1=01時(shí),串口以該方式工作,此時(shí)的串口為8位異步通信接口。</p><p><b>  ③ 方式2:</b></p><p>  當(dāng)SM0 SM1=10時(shí),串口

47、以該方式工作,此時(shí)發(fā)送和接收的都是一幀數(shù)據(jù),即:由11位組成,其中第1位是起始位,接下來的8位是用戶數(shù)據(jù)(低位在先),然后是1位可編程位(第9位數(shù)據(jù)),最后一位是停止位;RB8/TB8根據(jù)需要,設(shè)置成0或1,作為多機(jī)通信中的地址數(shù)據(jù)標(biāo)志位或數(shù)據(jù)的奇偶檢驗(yàn)位。</p><p><b>  ④ 方式3:</b></p><p>  當(dāng)SM0 SM1=11時(shí),串口以該方式工

48、作,該方式是波特率可變的9位異步通信方式,除了波特率外,方式3與方式2相同。</p><p>  目前,在串口的應(yīng)用中多采用8位異步串行方式,即為方式1,在本次設(shè)計(jì)中,為了保持兼容性,串口一律采用了方式1,波特率采用9600bps。</p><p>  3.4 DHT11數(shù)字溫濕度傳感器</p><p><b>  3.4.1 簡介</b>&l

49、t;/p><p>  DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式儲(chǔ)存在OT

50、P內(nèi)存中,傳感器內(nèi)部在檢測信號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號(hào)傳輸距離可達(dá)20米以上,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場合的最佳選則。</p><p>  3.4.2 在本設(shè)計(jì)中的應(yīng)用</p><p>  產(chǎn)品為4針單排引腳封裝。</p><p>  DHT11的供電電壓為 3-5.5V。傳感器上

51、電后,要等待 1s 以越過不穩(wěn)定狀態(tài)在此期間無需發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一個(gè)100nF 的電容,用以去耦濾波,5K的上拉電阻用于增加數(shù)據(jù)傳輸穩(wěn)定性。</p><p>  下圖中DATA1為P2.0口的網(wǎng)絡(luò)標(biāo)號(hào)。</p><p>  DHT11在本設(shè)計(jì)中應(yīng)用如下圖:</p><p>  圖 3.7 DHT11在本設(shè)計(jì)中的應(yīng)用</p>

52、;<p>  3.4.3 串行接口</p><p>  DHT11的2pin為其DATA引腳,其是一個(gè)單線雙向串行接口DATA 用于微處理器與DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時(shí)間4ms左右,數(shù)據(jù)分小數(shù)部分和整數(shù)部分,具體格式在下面說明,當(dāng)前小數(shù)部分用于以后擴(kuò)展,現(xiàn)讀出為零。操作流程如下:</p><p>  一次完整的數(shù)據(jù)傳輸為40bit,高位先出。&

53、lt;/p><p>  數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗(yàn)和</p><p>  數(shù)據(jù)傳送正確時(shí)校驗(yàn)和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。</p><p>  3.4.4 通信過程</p><p&

54、gt;  通信時(shí)序圖如下圖所示:</p><p>  圖 3.8 DHT11通信時(shí)序圖</p><p>  一次正常的數(shù)據(jù)讀取應(yīng)該如下:</p><p><b>  初始化階段:</b></p><p> ?、僦鳈C(jī)拉低總線18ms或大于18ms,DHT11模塊被喚醒。</p><p>  ②主機(jī)把

55、DATA線置高電位,總線開始等待DHT11把其拉低。</p><p> ?、劭偩€被模塊拉低后,單片機(jī)等待總線被拉高。</p><p> ?、芸偩€被模塊拉高后,單片機(jī)等待總線被拉低。</p><p><b>  數(shù)據(jù)包傳輸階段:</b></p><p> ?、菘偩€被模塊拉低后開始第一位的傳輸</p><

56、p>  每一bit數(shù)據(jù)都以50us低電平時(shí)隙開始,高電平的長短定了數(shù)據(jù)位是0還是1,若高電平時(shí)間小于30us此位為0,若高電平時(shí)間大于30us此位為1。</p><p><b>  3.5 程序設(shè)計(jì)</b></p><p>  3.5.1 開發(fā)工具介紹</p><p>  本次開發(fā)所用工具為Keil UV2,其是德國Keil Softwa

57、re公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),使用接近于傳統(tǒng)c語言的語法來開發(fā),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用,而且大大的提高了工作效率和項(xiàng)目開發(fā)周期,他還能嵌入?yún)R編,您可以在關(guān)鍵的位置嵌入,使程序達(dá)到接近于匯編的工作效率。KEILC51標(biāo)準(zhǔn)C編譯器為8051微控制器的軟件開發(fā)提供了C語言環(huán)境,同時(shí)保留了匯編代碼高效,快速的特點(diǎn)。C51編譯器的功能不斷增強(qiáng), 使你可以更加貼近CPU

58、本身,及其它的衍生產(chǎn)品。</p><p>  3.5.2 C語言介紹</p><p>  C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言,它既具有高級(jí)語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它由美國貝爾實(shí)驗(yàn)室的Dennis M. Ritchie于1972年推出,1978年后,C語言已先后被移植到大、中、小及微型機(jī)上,它可以作為工作系統(tǒng)設(shè)計(jì)語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件

59、的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件,三維,二維圖形和動(dòng)畫,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。</p><p>  C語言,是一種通用的、過程式的編程語言,廣泛用于系統(tǒng)與應(yīng)用軟件的開發(fā)。具有高效、靈活、功能豐富、表達(dá)力強(qiáng)和較高的可移植性等特點(diǎn),在程序員中備受青睞。最近25年是使用最為廣泛的編程語言。</p>&

60、lt;p>  3.5.3 C語言優(yōu)點(diǎn)</p><p>  C語言是運(yùn)行速度最快的可讀編程語言,其運(yùn)行速度僅次于匯編。其在單片機(jī)開發(fā)方面具有其他編程語言不具有的優(yōu)點(diǎn)。不懂得單片機(jī)的指令集,也能夠編寫完美的單片機(jī)程序;無須懂得單片機(jī)的具體硬件,也能夠編出符合硬件實(shí)際的專業(yè)水平的程序;不同函數(shù)的數(shù)據(jù)實(shí)行覆蓋,有效利用片上有限的RAM空間;程序具有堅(jiān)固性:數(shù)據(jù)被破壞是導(dǎo)致程序運(yùn)行異常的重要因素。C語言對(duì)數(shù)據(jù)進(jìn)行了許

61、多專業(yè)性的處理,避免了運(yùn)行中間非異步的破壞;C語言提供復(fù)雜的數(shù)據(jù)類型(數(shù)組、結(jié)構(gòu)、聯(lián)合、枚舉、指針等),極大地增強(qiáng)了程序處理能力和靈活性;提供auto、static、const等存儲(chǔ)類型和專門針對(duì)8051單片機(jī)的data、idata、pdata、xdata、code等存儲(chǔ)類型,自動(dòng)為變量合理地分配地址;提供small、compact、large等編譯模式,以適應(yīng)片上存儲(chǔ)器的大?。恢袛喾?wù)程序的現(xiàn)場保護(hù)和恢復(fù),中斷向量表的填寫,是直接與單

62、片機(jī)相關(guān)的,都由C編譯器代辦;提供常用的標(biāo)準(zhǔn)函數(shù)庫,以供用戶直接使用;頭文件中定義宏、說明復(fù)雜數(shù)據(jù)類型和函數(shù)原型,有利于程序的移植和支持單片機(jī)的系列化產(chǎn)品的開發(fā);有嚴(yán)格的句法檢查,錯(cuò)誤很少,可容易地在高級(jí)語言</p><p>  3.5.4 C程序設(shè)計(jì)</p><p>  C程序設(shè)計(jì)采用模塊化結(jié)構(gòu),對(duì)DHT11采集部分進(jìn)行封裝成頭文件。main函數(shù)中調(diào)用其子函數(shù)即可實(shí)現(xiàn)讀取溫濕度,這樣使

63、得程序簡單易懂,而且更具有條理性。</p><p>  01號(hào)溫濕度采集點(diǎn)程序用到了三個(gè)文件,分別是dht11.h、dht11.c、main.c。</p><p>  01號(hào)溫濕度采集點(diǎn)程序所完成的功能為:串口一直處于監(jiān)聽狀態(tài),一旦串口收到數(shù)據(jù)0x01便觸發(fā)一次溫濕度采集,采集完后立即將8位溫度數(shù)據(jù)和8位濕度數(shù)據(jù)依次發(fā)送出去。其總算法如下圖所示:</p><p> 

64、 圖 3.9 溫濕度采集點(diǎn)1的總算法</p><p>  dht11.h文件為一個(gè)聲明部分,對(duì)于程序中用到的宏定義進(jìn)行聲明。其內(nèi)容如下:</p><p>  #ifndef _dht11_h_ //定義一個(gè)宏,防止文件被重復(fù)include出現(xiàn)</p><p>  #define _dht11_h_ //重復(fù)定義<

65、/p><p>  #define OK 1 //定義一個(gè)宏OK 代表常量1</p><p>  #define ERROR 0 //定義一個(gè)宏ERROR代表常量0</p><p>  extern void Delay_1ms(unsigned int ms);//聲明一個(gè)外部函數(shù)Eelay_1ms()<

66、;/p><p>  extern unsigned char DHT11_ReadTempAndHumi();//聲明一個(gè)外部函數(shù)</p><p><b>  #endif</b></p><p>  dht11.c為溫濕度讀取子函數(shù)的實(shí)現(xiàn)部分,其對(duì)溫濕度讀取子函數(shù)進(jìn)行定義,以供外部調(diào)用。其主要算法如下圖所示:</p><p&g

67、t;  圖 3.10 dht11.c 溫濕度讀取子函數(shù)算法</p><p><b>  C代碼內(nèi)容如下:</b></p><p>  #include "dht11.h" //頭文件包含</p><p>  #include <reg52.h></p><p>  

68、sbit dht11=P2^0; //聲明DHT11 DATA連接線</p><p>  #define NUMBER 20</p><p>  #define SIZE 5</p><p>  static unsigned char status; //定義全局變量</p><p>  static u

69、nsigned char value_array[SIZE]; //定義數(shù)組存放DHT11一幀數(shù)據(jù)</p><p>  unsigned char temp_value,humi_value; //定義兩個(gè)全局變量存放溫度 濕度</p><p>  static unsigned char DHT11_ReadValue(); //聲明 數(shù)據(jù)讀取子函數(shù)</p><p&

70、gt;  extern void Delay_1ms(unsigned int ms) //延時(shí)x毫秒子函數(shù)</p><p><b>  {</b></p><p>  unsigned int x,y;</p><p>  for(x=ms;x>0;x--)</p><p>  for(y=110;y>0

71、;y--);</p><p><b>  }</b></p><p>  static void DHT11_Delay_10us(void) //延時(shí)10us子函數(shù)</p><p><b>  {</b></p><p>  unsigned char a;</p><p&

72、gt;  for(a=3;a>0;a--);</p><p><b>  }</b></p><p>  static unsigned char DHT11_ReadValue()//溫濕度采集讀取數(shù)據(jù)部分子函數(shù)</p><p><b>  {</b></p><p>  unsigned

73、char count,value=0,i;</p><p>  status=OK;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  value<<=1;</p><p><b>  count=0;&l

74、t;/b></p><p>  while(dht11==0); //wait up</p><p>  DHT11_Delay_10us();</p><p>  DHT11_Delay_10us();</p><p>  DHT11_Delay_10us();</p><p>  if(dht11==1)&l

75、t;/p><p><b>  {</b></p><p><b>  value++;</b></p><p>  while(dht11==1);</p><p><b>  }</b></p><p><b>  }</b><

76、/p><p>  return(value);</p><p><b>  }</b></p><p>  extern unsigned char DHT11_ReadTempAndHumi(void)//溫濕度采集子函數(shù)</p><p><b>  {</b></p><p>

77、;  unsigned char i=0,check_value=0,count=0; //定義一些局部變量</p><p><b>  dht11=0;</b></p><p>  Delay_1ms(20); //拉低DATA線20ms</p><p>  dht11=1;

78、 </p><p>  DHT11_Delay_10us();</p><p>  DHT11_Delay_10us();</p><p>  DHT11_Delay_10us();</p><p>  DHT11_Delay_10us(); //拉高DATA線40us</p><p>

79、;  if(dht11==1)</p><p><b>  {</b></p><p>  return ERROR;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { while(d

80、ht11==0); //DATA線 被DHT11拉低,等待拉低結(jié)束</p><p><b>  dht11=1;</b></p><p>  while(dht11==1);</p><p>  for(i=0;i<SIZE;i++) //DATA線 被DHT11拉高,等待拉高結(jié)束</p><p><

81、;b>  {</b></p><p>  value_array[i]=DHT11_ReadValue();//調(diào)用讀取數(shù)據(jù)子函數(shù)</p><p><b>  }</b></p><p>  humi_value=value_array[0];//讀取到的濕度部分賦值給humi_value</p><p&g

82、t;  temp_value=value_array[2];//讀取到的溫度部分賦值為temp_value</p><p><b>  }</b></p><p><b>  }</b></p><p>  main.c為主程序,調(diào)用dht11.c中的函數(shù)完成整個(gè)溫濕度的采集,其中當(dāng)串口接收到0x01時(shí),flag為1,fl

83、ag為1觸發(fā)一次溫濕度采集。其算法如下圖:</p><p>  圖3.11 01溫濕度采集點(diǎn)main.c算法</p><p>  main.c代碼如下:</p><p>  #include"dht11.h" //導(dǎo)入dht11.h文件</p><p>  #include"dht11.c

84、" //導(dǎo)入dht11.c文件</p><p>  //#include<reg52.h></p><p>  #include<stdio.h> //導(dǎo)入標(biāo)準(zhǔn)輸入輸出庫</p><p>  unsigned char flag,a; //定義2個(gè)全局變量用于標(biāo)識(shí)一些信息&

85、lt;/p><p>  void main() //main函數(shù)</p><p>  { </p><p>  //dht11=1;</p><p>  SCON=0x50;</p><p>  TMOD=0x20;</p>

86、<p><b>  TH1=0xfd;</b></p><p><b>  TL1=0xfd;</b></p><p><b>  TR1=1;</b></p><p><b>  EA=1;</b></p><p>  ES=1;

87、 //串口初始化,工作方式1,波特率9600bps</p><p>  //delays(3); </p><p>  while(1) //進(jìn)入函數(shù)主循環(huán)</p><p><b>  {</b></p><p>  if(flag=

88、=1) //判斷flag是否為1</p><p>  { DHT11_ReadTempAndHumi();//如果flag=1,調(diào)用溫濕度采集子函數(shù)</p><p>  P1=temp_value;//將temp_value賦值為P1口,用于程序測試,可刪</p><p>  flag=0; //flag置0</p&

89、gt;<p>  ES=0; //關(guān)閉串口中斷</p><p>  SBUF=temp_value; //發(fā)送溫度數(shù)據(jù)</p><p>  while(!TI); //等待發(fā)送完畢</p><p>  TI=0; //發(fā)送中斷標(biāo)志置0</p><p>  SBUF=humi_va

90、lue; //發(fā)送濕度數(shù)據(jù)</p><p>  while(!TI); //等待發(fā)送完畢</p><p>  TI=0; //發(fā)送中斷標(biāo)志置0</p><p>  ES=1; //打開串口中斷</p><p><b>  }</b></p><p&

91、gt;<b>  }</b></p><p><b>  }</b></p><p>  void serial()interrupt 4 //串口中斷子程序</p><p><b>  {</b></p><p>  RI=0; //接收中斷標(biāo)志位清零</p>

92、;<p>  a=SBUF; //讀取接收到的數(shù)據(jù)</p><p>  if(a==0x01) //判斷接收到的數(shù)據(jù)是否為0x01</p><p>  flag=1; //若接收到的數(shù)據(jù)位0x01,flag置1</p><p><b>  }</b></p><p>  02號(hào)采集點(diǎn)程序也是用到了3個(gè)文件

93、,分別是dht11.h、dht11.c、main.c。</p><p>  02號(hào)溫濕度采集點(diǎn)程序所完成的功能為:串口一直處于監(jiān)聽狀態(tài),一旦串口收到數(shù)據(jù)0x02便觸發(fā)一次溫濕度采集,采集完后立即將8位溫度數(shù)據(jù)和8位濕度數(shù)據(jù)依次發(fā)送出去。</p><p>  02號(hào)溫度采集點(diǎn)所用到的dht11.h、dht11.c和上面的相同,只是其main.c不同,其main.c內(nèi)容算法如下圖:</p

94、><p>  圖 3.12 02溫濕度采集點(diǎn)main.c算法</p><p>  main.c代碼如下:</p><p>  #include"dht11.h" //導(dǎo)入 dht11.h</p><p>  #include"dht11.c" //導(dǎo)入 dht11.c<

95、/p><p>  //#include<reg52.h></p><p>  #include<stdio.h> //導(dǎo)入標(biāo)準(zhǔn)輸入輸出庫stdio.h</p><p>  unsigned char flag,a; //定義兩個(gè)全局變量</p><p>  void main()

96、 //main函數(shù)</p><p>  {SCON=0x50;</p><p>  TMOD=0x20;</p><p><b>  TH1=0xfd;</b></p><p><b>  TL1=0xfd;</b></p><p><b>  TR1=1;&l

97、t;/b></p><p><b>  EA=1;</b></p><p>  ES=1; //對(duì)串口進(jìn)行初始化</p><p>  while(1) //進(jìn)入函數(shù)主循環(huán)</p><p><b>  {</b></p>

98、;<p>  if(flag==1) //判斷flag是否為1</p><p><b>  {</b></p><p>  DHT11_ReadTempAndHumi();//如果flag是1,調(diào)用溫濕度采集子函數(shù)</p><p>  P1=temp_value; //將temp_value賦值給P1,用于程序測試,可

99、刪</p><p>  flag=0; //flag置0</p><p>  ES=0; //關(guān)閉串口中斷</p><p>  SBUF=temp_value;//發(fā)送溫度數(shù)據(jù)</p><p>  while(!TI);//等待發(fā)送完畢</p><p>  TI=0; //發(fā)

100、送中斷標(biāo)志清零</p><p>  SBUF=humi_value;//發(fā)送濕度數(shù)據(jù)</p><p>  while(!TI);//等待發(fā)送完畢</p><p>  TI=0; //發(fā)送中斷標(biāo)志清零</p><p>  ES=1; //打開串口中斷</p><p><b>  }</

101、b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void serial()interrupt 4 //串口中斷子程序</p><p><b>  {</b></p><p>  RI=0;

102、 //接收中斷標(biāo)志清零</p><p>  a=SBUF; //讀取接收到的數(shù)據(jù)</p><p>  if(a==0x02) //判斷接收到的數(shù)據(jù)是否為0x02</p><p>  flag=1; //若為0x02,flag置1</p><p><b>  

103、}</b></p><p>  第4章 硬件上位機(jī)的設(shè)計(jì)</p><p><b>  4.1 工作原理</b></p><p>  硬件上位機(jī)采用了STC89C52單片機(jī)作為核心微控制器、串口作為通信手段、485作為通信電平標(biāo)準(zhǔn)、LCD1602作為顯示終端的設(shè)計(jì)方案。STC89C52通過串口向溫濕度采集點(diǎn)發(fā)送0x01采集到01溫濕度

104、采集點(diǎn)的溫濕度信息,然后再通過串口向溫濕度采集點(diǎn)發(fā)送0x02采集到02溫濕度采集點(diǎn)的溫濕度信息,最后通過1602液晶進(jìn)行實(shí)時(shí)顯示。這樣就完成了一次溫濕度采集,如此循環(huán)下去就可以實(shí)現(xiàn)實(shí)時(shí)監(jiān)測遠(yuǎn)方溫度。其流程圖如圖4.1所示:</p><p>  圖4.1 硬件上位機(jī)流程圖</p><p>  4.2 LCD1602液晶</p><p><b>  4.2.1

105、 簡介</b></p><p>  1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。1602LCD是指顯示的內(nèi)容為16X2,即可以顯

106、示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的</p><p><b>  4.2.2 引腳圖</b></p><p>  本模塊中用到的LCD 1602引腳圖如下所示:</p><p>  圖4.2 LCD1602引腳圖</p><p>  1

107、602采用標(biāo)準(zhǔn)的16腳接口,其中:</p><p>  第1腳:VSS為電源地</p><p>  第2腳:VCC接5V電源正極</p><p>  第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度)。</p><p>  第4腳:RS為寄

108、存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。</p><p>  第5腳:RW為讀寫信號(hào)線,高電平1時(shí)進(jìn)行讀操作,低電平0時(shí)進(jìn)行寫操作。</p><p>  第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。</p><p>  第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。</p><p&g

109、t;  第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。</p><p><b>  4.3 硬件原理圖</b></p><p>  硬件部分主要由STC89C52單片機(jī)、MAX13487(485電平轉(zhuǎn)換芯片)、1602液晶顯示屏組成,其中晶振采用11.0592Mhz。</p><p>  硬件上位機(jī)原理圖如下圖所示:</

110、p><p>  圖 4.3 硬件上位機(jī)原理圖</p><p><b>  4.4 程序設(shè)計(jì)</b></p><p>  4.4.1 設(shè)計(jì)算法</p><p>  單片機(jī)先進(jìn)行1602初始化,然后通過串口發(fā)送0x01 延時(shí)200ms等待接收中斷,接收到數(shù)據(jù)后立即讀取到一個(gè)全局變量,再次通過串口發(fā)送0x02 延時(shí)200ms等待接

111、受中斷,接收到數(shù)據(jù)后立即讀取到一個(gè)全局變量。最后通過字符串處理手段把數(shù)據(jù)嵌入到2個(gè)數(shù)組內(nèi),然后把這兩個(gè)數(shù)組的內(nèi)容顯示到1602液晶,這樣就完成了一次溫濕度顯示。串口再次發(fā)送0x01......</p><p>  4.4.2 宏定義和預(yù)處理</p><p>  在程序的開始部分要進(jìn)行位聲明,庫函數(shù)引用聲明。</p><p>  #include<reg52.h

112、> //頭文件包含</p><p>  sbit lcden=P2^5; //LCD 使能端引腳聲明</p><p>  sbit lcdrs=P1^0; //LCD 寄存器選擇端引腳聲明</p><p>  sbit dula=P2^6; //鎖存器相關(guān)引腳聲明,可刪</p><p> 

113、 sbit wela=P2^7; //鎖存器相關(guān)引腳聲明,可刪</p><p>  sbit lcdrw=P1^1; //LCD 讀寫端引腳聲明</p><p>  定義一些程序內(nèi)用到全局變量,用于顯示的全局?jǐn)?shù)組。由于LCD顯示部分用的是8bit數(shù)據(jù),故采用了unsigned char 數(shù)據(jù)類型。也可以采用char 數(shù)據(jù)類型。</p><p&g

114、t;  unsigned char aa,b,c,d,flag,num;</p><p>  unsigned char table1[16]="temp: humi: ";//LCD 第一行顯示部分</p><p>  unsigned char table2[16]="temp: humi: ";//LCD 第二行顯示部分&l

115、t;/p><p>  4.4.3 子函數(shù)設(shè)計(jì)</p><p>  由于程序內(nèi)部要用到大量的相同的操作,所以定義了一些經(jīng)常重復(fù)使用的函數(shù)。這樣能夠使得程序可讀性更好,更具有條理性。</p><p>  延時(shí)子函數(shù)組:要是通過for語句實(shí)現(xiàn),讓單片機(jī)一直執(zhí)行for語句的代碼塊,這樣就會(huì)消耗一定的執(zhí)行時(shí)間。根據(jù)這個(gè)原理,我們定義了一個(gè)延時(shí)子函數(shù)用于程序中需要進(jìn)行延時(shí)處理的地方

116、直接調(diào)用。for語句延時(shí)常常用于毫秒級(jí)的延時(shí),延時(shí)所用到的算法如下:</p><p>  圖 4.4 delayms算法流程圖</p><p>  void delayms(unsigned char xms)//定義delayms函數(shù) 參數(shù)類型為unsigned char</p><p>  { unsigned char i,j; //定義局部變量i,j

117、</p><p>  for(i=xms;i>0;i--) //for循環(huán)體</p><p>  for(j=110;j>0;j--);</p><p><b>  }</b></p><p>  向1602液晶寫命令子函數(shù):先選擇模式為寫命令模式,然后寫入數(shù)據(jù),進(jìn)行延時(shí)。再讓液晶使能端產(chǎn)生一個(gè)負(fù)跳變

118、執(zhí)行指令。程序流程如下:</p><p>  圖4.5 1602寫命令子函數(shù)流程圖</p><p>  void write_com(unsigned char com)//定義write_com函數(shù)</p><p>  {lcdrs=0; //lcdrs置0,選擇寫命令模式</p><p>  

119、P0=com; //P0輸出數(shù)據(jù)</p><p>  delayms(5); //延時(shí)5ms</p><p>  lcden=1; //lcden置1</p><p>  delayms(5); //延時(shí)5ms<

120、/p><p>  lcden=0; //lcden置0 ,lcden完成了一個(gè)負(fù)跳變</p><p><b>  }</b></p><p>  向1602液晶寫數(shù)據(jù)子函數(shù):先選擇模式為寫數(shù)據(jù)模式,然后寫入數(shù)據(jù),進(jìn)行延時(shí)。再讓液晶使能端產(chǎn)生一個(gè)負(fù)跳變存儲(chǔ)數(shù)據(jù)。程序流程如下:</p><p&

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論