找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8691|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

dht11溫濕度單片機(jī)設(shè)計(jì)論文

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:363933 發(fā)表于 2018-7-3 14:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
目錄
1 緒論... 6
1.1 本課題的背景及研究意義... 6
1.2 國內(nèi)外現(xiàn)狀... 6
1.3 總體設(shè)計(jì)思路... 7
2 總體設(shè)計(jì)... 7
2.1 方案選擇... 7
2.1.1控制芯片的選擇... 7
2.1.2溫濕度傳感器模塊的選擇... 7
3 系統(tǒng)硬件電路設(shè)計(jì)... 8
3.1 整體方案設(shè)計(jì)... 8
3.1.1系統(tǒng)概述... 8
3.1.2系統(tǒng)框圖... 8
3.2 單片機(jī)最小系統(tǒng)電路... 8
3.2.1單片機(jī)介紹... 8
3.2.2單片機(jī)最小系統(tǒng)... 11
3.3 DHT11數(shù)字傳感器... 12
3.3.1 DHT11數(shù)字溫濕度傳感器... 12
3.3.2  DHT11引腳... 12
3.3.3 DHT11電路... 13
3.4 液晶顯示電路... 13
3.4.1 1602液晶簡介... 13
3.4.2液晶引腳說明... 14
3.4.3指令介紹... 15
3.4.4液晶顯示模塊電路... 18
3.6 STC89C52的系統(tǒng)時(shí)鐘設(shè)計(jì)... 19
4 軟件設(shè)計(jì)... 20
4.1 程序語言及開發(fā)環(huán)境... 20
4.2 程序流程圖... 20
4.2.1總體流程圖... 20
4.2.2 1602液晶程序設(shè)計(jì)... 21
5.2.4溫度傳感器程序設(shè)計(jì)... 22
5 總結(jié)分析... 24
參考文獻(xiàn)... 26
      27
附錄1 原理圖... 27
附錄2 源程序... 27
附錄3 實(shí)物圖(正、反面)... 32
附錄4 元件清單... 33
附錄5 小組分工與合作... 33

1 緒論1.1 本課題的背景及研究意義
20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)在電子產(chǎn)品幾乎滲透了社會的各個(gè)領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。時(shí)間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無傷大雅。但是一旦重要事情,一時(shí)的耽誤可能釀成大禍。
目前單片機(jī)正朝著高性能和多品種方向發(fā)展,趨勢將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價(jià)格和外圍電路內(nèi)裝化等幾個(gè)方面發(fā)展。下面是單片機(jī)的主要發(fā)展趨勢。單片機(jī)應(yīng)用的重要意義在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)大部分功能,現(xiàn)在已經(jīng)能用單片機(jī)通過軟件方法來實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。
溫度、濕度和人類的生產(chǎn)、生活有著密切的關(guān)系,同時(shí)也是工業(yè)生產(chǎn)中最常見的基本參數(shù),例如機(jī)械、電子、石油、化工等各類工業(yè)中廣泛要求對溫度、濕度進(jìn)行檢測與控制。隨著人們生活水平的提高,人們對自己的生存環(huán)境越來越關(guān)注,而空氣中溫濕度的變化對人體的舒適度和情緒有著直接的影響,所以對溫濕度的檢測及控制就十分有必要了。
1.2 國內(nèi)外現(xiàn)狀
溫度、濕度是工業(yè)農(nóng)業(yè)生產(chǎn)不可求二少的考慮因素,但傳統(tǒng)的方法是用溫度表、毛發(fā)溫度表、雙金屬式測量機(jī)以及溫度試紙等測試器材,通過人工檢測,對不符合溫度和濕度要求的庫房進(jìn)行通風(fēng)、降溫和去濕等工作。這種人工測試方法費(fèi)時(shí)費(fèi)力、效率低、且測試的溫度及濕度誤差大,又具有較大的不確定性。而含有微型計(jì)算機(jī)或者微處理器的測量儀器,由于它擁有對數(shù)據(jù)儲存,運(yùn)算邏輯判斷及自動化功能,有著只能功能,很快得到人們的青睞和關(guān)注。
模擬集成溫度傳感器是在20世紀(jì)80年代問世的,他是將溫度傳感器集成一個(gè)芯片上,可完成溫度測量及模擬信號輸出功能的專用IC。模擬集成溫度傳感器的主要特點(diǎn)是測量溫度誤差小、價(jià)格低、響應(yīng)速度快、傳輸距離遠(yuǎn)、體積小、微功耗等,適合遠(yuǎn)距離測溫、控溫,不需要進(jìn)行非線性校準(zhǔn),外圍電路簡單。他是目前在國內(nèi)外應(yīng)用最為普遍的一種集成傳感器。
1.3 總體設(shè)計(jì)思路
選取單片機(jī)作為系統(tǒng)的主控部件,根據(jù)主控機(jī)的指令對溫度進(jìn)行實(shí)時(shí)采集并通過液晶顯示部分及時(shí)將測量結(jié)果顯示出來。因策,如何準(zhǔn)確獲得被測信號以及對被控對象狀態(tài)的監(jiān)察是單片機(jī)的核心人物。傳感器是實(shí)現(xiàn)測量與控制的首要換屆,對于溫濕度計(jì),系統(tǒng)應(yīng)具有兩大傳感模塊:即溫度傳感器模塊和濕度傳感器模塊。
此外,在微型計(jì)算機(jī)控制系統(tǒng)中,應(yīng)該設(shè)計(jì)液晶顯示模塊,將溫度和濕度的數(shù)據(jù)顯示出來,為了安全生產(chǎn),對于一些重要的參數(shù)或系統(tǒng)部位,應(yīng)當(dāng)設(shè)有緊急狀態(tài)報(bào)警模塊,但由于本設(shè)計(jì)是一個(gè)家用的溫濕度計(jì),因此設(shè)計(jì)得較為簡潔。
2 總體設(shè)計(jì)2.1 方案選擇2.1.1控制芯片的選擇
     方案一:采用STC89C52單片機(jī),支持串口編程,計(jì)算速度快,用戶程序空間(flash8K,內(nèi)部帶有帶電可擦寫可編程讀寫存儲器(EEPROM)
方案二:采用AT89C51單片機(jī),只能通過專用硬件編程器編程,用戶程序空間小,性價(jià)比低,計(jì)算速度較STC89C52單片機(jī)慢。
STC89C52STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash存儲器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8 CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。因此本設(shè)計(jì)用STC89C52單片機(jī)作為控制器。
2.1.2溫濕度傳感器模塊的選擇
方案一:采用DTH11
方案二:采用SHT11
方案比較:DHT11核心部件采用濕敏電阻,其成本低,穩(wěn)定性差,SHT11核心部件采用濕敏電容,成本高,穩(wěn)定性好。通過成本比較,選擇方案一DTH11。


3 系統(tǒng)硬件電路設(shè)計(jì)3.1 整體方案設(shè)計(jì)3.1.1系統(tǒng)概述
整個(gè)系統(tǒng)以STC89C52單片機(jī)為核心器件,配合電阻電容晶振等器件,構(gòu)成單片機(jī)的最小系統(tǒng)。其它個(gè)模塊圍繞著單片機(jī)最小系統(tǒng)展開。溫濕度采集模塊,檢測當(dāng)前環(huán)境的溫度值,并對并把溫濕度數(shù)據(jù)傳輸給單片機(jī);顯示模塊,采用1602液晶作為顯示模塊,負(fù)責(zé)顯示測量到的濕度值和溫度值;最后一個(gè)是電源模塊,采用5V的USB供電,本系統(tǒng)如需移動測量時(shí),可采用移動電源進(jìn)行供電。
3.1.2系統(tǒng)框圖
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png
3.2 單片機(jī)最小系統(tǒng)電路3.2.1單片機(jī)介紹
(1)概述
STC89C52是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和512bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,功能強(qiáng)大的STC89C52單片機(jī)可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場合。
STC89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口線。STC89C52有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
(2)主要功能特性
  ◆兼容MCS51指令系統(tǒng);◆8k可反復(fù)擦寫(>1000次)Flash ROM; ◆32個(gè)雙向I/O口;  ◆512字節(jié)RAM ;◆3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷;◆時(shí)鐘頻率0-24MHz; ◆內(nèi)置4KB EEPROM;◆全雙工串行口◆4個(gè)外部中斷源; ◆共8個(gè)中斷源;◆2個(gè)讀寫中斷口線; ◆3級加密位; ◆低功耗空閑和掉電模式; ◆軟件設(shè)置睡眠和喚醒功能;
(3)8051單片機(jī)的引腳功能
MCS-51系列單片機(jī)一般采用40個(gè)引腳,雙列直插式封裝,用HMOS工藝制造,其外部引腳排列如圖4-1所示。其中,各引腳的功能為:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
圖4-1 STC89C52引腳圖
① 主電源引腳
VCC(40腳),接+5V電源正端;
GND(20腳),接+5V電源地端;
② 外接晶體或外部振蕩器引腳
XTAL1(19腳),接外部晶振的一個(gè)引腳。在單片機(jī)內(nèi)部,它是一個(gè)反相放大器   的輸入端。當(dāng)采用外部振蕩器時(shí),此引腳應(yīng)接  地。
XTAL2(18腳),接外部晶振的另一個(gè)引腳。在片內(nèi)接至反相放大器的輸出端和   內(nèi)部時(shí)鐘電路的輸入端。當(dāng)采用外部振蕩器時(shí),此腳接外部振蕩器的輸出端。
③ 控制信號線
RESET(9腳),復(fù)位信號輸入端,復(fù)位/掉電時(shí)內(nèi)部RAM的備用電源輸入端。
ALE(30腳),地址鎖存允許/編程脈沖輸入,用ALE鎖存從P0口輸出的低8   位地址。在對片內(nèi)EPROM編程時(shí),編程脈沖由此輸入。
PSEN(29腳),外部程序存儲器讀選通信號,低電平有效。
       EA(31腳),訪問外部存儲器允許/編程電壓輸入。EA為高電平時(shí),訪問內(nèi)部存       儲器;低電平時(shí),訪問外部存儲器。
④ 多功能I/O口引腳
8051單片機(jī)設(shè)有4個(gè)雙向I/O口(P0、P1、P2、P3),每一組I/O口線都可以獨(dú)立地用作輸入或輸出口,其中:
P0口(32~39腳)——雙向口(三態(tài)),可作為輸入/輸出口,可驅(qū)動8個(gè)LSTTL門電路。實(shí)際應(yīng)用中常作為分時(shí)使用的地址/數(shù)據(jù)總線口,對外部程序或數(shù)據(jù)存儲器尋址時(shí)低8位地址與數(shù)據(jù)總線分時(shí)使用P0口:先送低8位地址信號到P0口,由地址鎖存信號ALE的下降沿將地址信號鎖存到地址鎖存器后,再作為數(shù)據(jù)總線的口線對數(shù)據(jù)進(jìn)行輸入或輸出。
           P1口(1~8腳)——準(zhǔn)雙向口(三態(tài)),可驅(qū)動4個(gè)LSTTL門電路。用作       輸入線時(shí),口鎖存器必須由單片機(jī)先寫入“1”,每一位都可編程為輸入或輸出      線。
           P2口(21~28)——準(zhǔn)雙向口(三態(tài)),可驅(qū)動4個(gè)LSTTL門電路?勺     為輸入/輸出口,實(shí)際應(yīng)用中一般作為地址總線的高8位,與P0口一起組成16      位地址總線,用于對外部存儲器的接口電路進(jìn)行尋址。
           P3口(10~17腳)——準(zhǔn)雙向口(三態(tài)),可驅(qū)動4個(gè)LSTTL門電路。雙     功能口,作為第一功能使用時(shí),與P1口一樣;作為第二功能使用時(shí),每一           位都有特定用途,其特殊用途如表4.1所示:
表4.1 P3口第二用途
  
端口引腳
  
  
第二功能
  
  
注    釋
  
  
P3.0
  
  
RXD
  
  
串行口數(shù)據(jù)接收端
  
  
P3.1
  
  
TXD
  
  
串行口數(shù)據(jù)發(fā)送端
  
  
P3.2
  
  
/INT0
  
  
外中斷請求0
  
  
P3.3
  
  
/INT1
  
  
外中斷請求1
  
  
P3.4
  
  
T0
  
  
定時(shí)/計(jì)數(shù)器0外部計(jì)數(shù)信號輸入
  
  
P3.5
  
  
T1
  
  
定時(shí)/計(jì)數(shù)器1外部計(jì)數(shù)信號輸入
  
  
P3.6
  
  
/WR
  
  
外部RAM寫選通信號輸出
  
  
P3.7
  
  
/RD
  
  
外部RAM讀選通信號輸出
  
3.2.2單片機(jī)最小系統(tǒng)
STC89C52的最小系統(tǒng)由三個(gè)部分組成,晶振電路部分、復(fù)位電路部分、電源電路等三個(gè)部分組成。
晶振電路包括2個(gè)30pF的電容C2和C3,以及12M的晶振X1。電容的作用在這里是起振作用,幫助晶振更容易的起振,取值范圍是15-33pF。晶振的取值也可以是24M,晶振的取值越高,單片機(jī)的執(zhí)行速度越快。在進(jìn)行電路設(shè)計(jì)的時(shí)候,晶振部分越靠近單片機(jī)越好。
單片機(jī)復(fù)位電路就好比電腦的重啟部分,當(dāng)電腦在使用中出現(xiàn)死機(jī),按下重啟按鈕電腦內(nèi)部的程序從頭開始執(zhí)行。單片機(jī)也一樣,當(dāng)單片機(jī)系統(tǒng)在運(yùn)行中,受到環(huán)境干擾出現(xiàn)程序跑飛的時(shí)候,按下復(fù)位按鈕內(nèi)部的程序自動從頭開始執(zhí)行。
復(fù)位電路由10uF的極性電容C1和10K的電阻R4構(gòu)成。利用電容電壓不能突變的性質(zhì),可以知道,當(dāng)系統(tǒng)一上電,RESET腳將會出現(xiàn)高電平,并且這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定。典型的51單片機(jī)當(dāng)RESET腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以適當(dāng)組合RC的取值就可以保證可靠的復(fù)位。
最后一個(gè)是電源部分,采用5V的USB直接供電,可采用手機(jī)充電器、電腦USB口、移動電源等設(shè)備進(jìn)行供電。
此外,除了單片機(jī)最小系統(tǒng)的3個(gè)部分之外,這里還多了一些外部電路。
由于STC89C51的P0口是漏極開路輸出,因此在P0口接了一個(gè)10K的排阻R1,使得P0口可以作為普通的I/O口使用,本設(shè)計(jì)用P0口來做液晶的數(shù)據(jù)口。
特別注意的是,對于31腳(EA),當(dāng)接高電平時(shí),單片機(jī)在復(fù)位后從內(nèi)部ROM的0000H開始執(zhí)行;當(dāng)接低電平時(shí),復(fù)位后直接從外部ROM的0000H開始執(zhí)行。由于我們的程序存儲在了單片機(jī)內(nèi)部,所以EA要接高電平,保證單片機(jī)是從內(nèi)部讀取程序去執(zhí)行的。
         
3.3DHT11數(shù)字傳感器
3.3.1DHT11數(shù)字溫濕度傳感器
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(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ù)以程序的形式儲存在OTP內(nèi)存中,傳感器內(nèi)部在檢測信號的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達(dá)20米以上,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場合的最佳選則。產(chǎn)品為4針單排引腳封裝。連接方便,特殊封裝形式可根據(jù)用戶需求而提供。
3.3.2  DHT11引腳
DHT11有四個(gè)引腳,3號引腳一般懸空,如圖2-3所示。DHT11的供電電壓為3—5.5V。傳感器上電后,要等待1s以越過不穩(wěn)定狀態(tài)在此期間無需發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一個(gè)100nF的電容,用以去耦濾波。建議連接線長度短于20米時(shí)用5K上拉電阻,大于20米時(shí)根據(jù)實(shí)際情況使用合適的上拉電阻。
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png
3.3.3DHT11電路
DHT11一共引出四個(gè)引腳,其中一個(gè)接VCC,一個(gè)接GND,剩下兩個(gè)分別接到單片機(jī)的IO口。在本設(shè)計(jì)中,把DHT112引腳接到單片機(jī)的P21口。電路圖如圖所示:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.jpg
  
3.4 液晶顯示電路3.4.1 1602液晶簡介
液晶顯示器是一種顯示器件,具有小體積、輕重量、低功耗等特色。由于其功耗低、顯示的信息量大(例如,文本,圖形,曲線等)、無電磁輻射、使用壽命長,它已被廣泛應(yīng)用在便攜式電子產(chǎn)品。
本系統(tǒng)顯示采用了工業(yè)字符型液晶模塊1602,可顯示2行16個(gè)字符,能方便顯示英文字母大小寫、阿拉伯?dāng)?shù)字、常用符號等。通過自定義還可顯示簡單的漢字。在通信系統(tǒng),智能操作儀表和辦公設(shè)備的自動化中被廣泛的應(yīng)用,主要功能是顯示ASCII字符,因此被稱為“字符型顯示裝置”。1602液晶分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如下圖(圖4-10)所示:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg
圖4-10 液晶尺寸說明
1602LCD主要技術(shù)參數(shù):
◆顯示容量:16×2個(gè)字符
◆芯片工作電壓:4.5—5.5V
◆工作電流:2.0mA(5.0V)
◆模塊最佳工作電壓:5.0V
◆字符尺寸:2.95×4.35(W×H)mm
3.4.2液晶引腳說明
1602的引腳如表4-3所示:
   
  
編號
  
  
符號
  
  
引腳說明
  
  
編號
  
  
符號
  
  
引腳說明
  
  
1
  
  
VSS
  
  
電源地
  
  
9
  
  
D2
  
  
數(shù)據(jù)
  
  
2
  
  
VCC
  
  
電源正極
  
  
10
  
  
D3
  
  
數(shù)據(jù)
  
  
3
  
  
VO
  
  
液晶顯示偏壓
  
  
11
  
  
D4
  
  
數(shù)據(jù)
  
  
4
  
  
RS
  
  
數(shù)據(jù)/命令選擇
  
  
12
  
  
D5
  
  
數(shù)據(jù)
  
  
5
  
  
R/W
  
  
讀/寫選擇
  
  
13
  
  
D6
  
  
數(shù)據(jù)
  
  
6
  
  
EN
  
  
使能信號
  
  
14
  
  
D7
  
  
數(shù)據(jù)
  
  
7
  
  
D0
  
  
數(shù)據(jù)
  
  
15
  
  
BLA
  
  
背光源正極
  
  
8
  
  
D1
  
  
數(shù)據(jù)
  
  
16
  
  
BLK
  
  
背光源負(fù)極
  
                           4-3 1602液晶引腳說明
第一腳:接地電源VSS。
第二腳:5V正電源為VCC。  
第三腳:VO為液晶顯示器對比度調(diào)整的端口,對比度的強(qiáng)弱由接電源的不同決定,對比度的調(diào)整可以通過一個(gè)10k的電位器。  
第四腳:RS是寄存器選擇,高電平表示數(shù)據(jù)寄存器,低電平表示指令寄存器。
第五腳:R / W的讀和寫信號線,高電平為讀操作,低電平為寫操作。其中RSR/W的關(guān)系決定了當(dāng)時(shí)狀態(tài)。例如兩端共同為0時(shí)能夠?qū)懭朊罨蛘唢@示其地址,當(dāng)兩端同為1時(shí)可以讀忙碌信號,當(dāng)RS1,R/W0時(shí)能夠?qū)?shù)據(jù)錄入。  
第六腳:使能端EN,當(dāng)EN端由10時(shí),液晶模塊中的命令開始被運(yùn)行。
第七至十四腳:D0-D78位雙向數(shù)據(jù)線。
第十五腳:背光源正極。
第十六腳:背光源負(fù)極。
3.4.3指令介紹
1)清屏指令
指令如表4-4所示
表4-4 清屏指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.jpg
功能:
1)能夠?qū)⒁壕э@示內(nèi)容刪除,就是講DDRAM所有內(nèi)容都添加進(jìn)“空白”的          ASCI20II;
2)能夠使光標(biāo)回到原始位置,就是把光標(biāo)重新擺放回液晶顯示屏的左上方;
3)把地址顯示器即AC的數(shù)值歸位零
2)光標(biāo)歸位指令
指令如表4-5所示
4-5 光標(biāo)歸位指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
功能:
1)將光標(biāo)重新擺放回顯示器的左上方;
2)地址計(jì)數(shù)器即AC的數(shù)值被設(shè)為零;
3DDRAM所有的內(nèi)容將保持原內(nèi)容不會變化;
3)進(jìn)入模式設(shè)置指令
指令如表4-6所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg4-6 進(jìn)入模式設(shè)置指令功能表
功能:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg當(dāng)輸入一位數(shù)據(jù)之后光標(biāo)移動的方向?qū)⒈辉O(shè)置,參數(shù)設(shè)定的情況如下:
4)顯示開關(guān)設(shè)置指令
指令如表4-7所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg4-7 顯示開關(guān)設(shè)置指令功能表
功能:
能夠控制顯示器的開關(guān)與否,光標(biāo)的顯示或者關(guān)閉,光標(biāo)是否需要閃爍,參數(shù)      設(shè)定的情況如下:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.jpg
5)設(shè)定顯示屏或光標(biāo)移動方向指令
指令如表4-8所示
4-8 設(shè)定顯示屏或光標(biāo)移動方向指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg
功能:
將光標(biāo)移動或者整個(gè)顯示屏幕移動位置,參數(shù)設(shè)定的情況如下:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg
6)功能設(shè)定指令
指令如表4-9所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpg4-9 功能設(shè)定指令功能表
功能:
數(shù)據(jù)總線的位數(shù)何所顯示出來的行數(shù)字型將被設(shè)定,參數(shù)設(shè)定情況如下:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg
7)設(shè)定CGRAM地址指令
指令如表4-10所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg4-10 設(shè)定CGRAM地址指令功能表
功能:
下一次被存入數(shù)據(jù)的CGRAM地址將被設(shè)置,字符號為DB5DB4DB3即未來顯      示此字符的時(shí)候被采用的字符的地址(000-111)可同時(shí)定義八個(gè)字符,行號為  DB2DB1DB0 000-111)八行。
8)設(shè)定DDRAM地址指令
指令如表4-11所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg4-11 設(shè)定DDRAM地址指令功能表
功能:
下一次要存入數(shù)據(jù)的DDRAM地址將被設(shè)置。
9)讀取忙或AC地址指令
指令如表4-12所示
4-12 讀取忙或AC地址指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg
功能:
下一次要存入數(shù)據(jù)的DDRAM地址將被設(shè)置。
1HF(忙碌信號)讀取,假如液晶顯示器忙碌的時(shí)候則BF=1,暫時(shí)不能接收被單片機(jī)送出的數(shù)據(jù)和指令,當(dāng)BF=0的時(shí)候則相反。  
2)地址計(jì)數(shù)器(AC)內(nèi)容被接收。
10)數(shù)據(jù)寫入DDRAM或者CGRAM指令
指令如表4-13所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg4-13 數(shù)據(jù)寫入DDRAM或者CGRAM指令指令功能表
功能:
1DREAM被寫入字符碼,液晶顯示屏隨即顯示出相應(yīng)的字符;
2OGRAM被存入由使用者設(shè)計(jì)的圖案
3.4.4液晶顯示模塊電路
本液晶模塊的電路的連接圖如圖4-11所示。第1腳和第2腳分別接到了電路的GND和VCC,這2個(gè)腳是液晶工作的電源輸入腳。第3腳通過一個(gè)10K的電位器連接到地端,可通過調(diào)節(jié)該電位器來調(diào)節(jié)液晶的對比度。第4腳是液晶的寄存器控制腳,接到了單片機(jī)的P27腳上。第5腳是液晶的讀寫控制腳,直接接地。第6腳是液晶的使能腳,接到了單片機(jī)的P26腳上。第7腳到第14腳是液晶的數(shù)據(jù)/地址8位總線,接到了單片機(jī)的P0口上。最后第15腳和第16腳是液晶的背光電源腳,直接連接系統(tǒng)VCC和GND。
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg
4-11液晶模塊連接圖
3.6 STC89C52的系統(tǒng)時(shí)鐘設(shè)計(jì)
時(shí)鐘電路是用來產(chǎn)生89C51單片機(jī)工作時(shí)所必須的時(shí)鐘信號,89C51本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為保證工作方式的實(shí)現(xiàn),89C51在唯一的時(shí)鐘信號的控制下嚴(yán)格的按時(shí)序執(zhí)行指令進(jìn)行工作,時(shí)鐘的頻率影響單片機(jī)的速度和穩(wěn)定性。通常時(shí)鐘由于兩種形式:內(nèi)部時(shí)鐘和外部時(shí)鐘。
我們系統(tǒng)采用內(nèi)部時(shí)鐘方式來為系統(tǒng)提供時(shí)鐘信號。89C51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反向放大器,該放大器的輸入輸出引腳為XTAL1和XTAL2,它們跨接在晶體振蕩器和用于微調(diào)的電容,便構(gòu)成了一個(gè)自激勵(lì)振蕩器。
電路中的C1C2的選擇在30PF左右,但電容太小會影響振蕩的頻率、穩(wěn)定性和快速性。晶振頻率為在1.2MHZ12MHZ之間,頻率越高單片機(jī)的速度就越快,但對存儲器速度要求就高。為了提高穩(wěn)定性我們采用溫度穩(wěn)定性好的NPO電容,采用的晶振頻率為12MHZ。時(shí)鐘電路如圖所示:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image036.jpg
時(shí)鐘復(fù)位電路
4 軟件設(shè)計(jì)4.1 程序語言及開發(fā)環(huán)境
     C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言,它既具有高級語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它由美國貝爾實(shí)驗(yàn)室的Dennis M. Ritchie1972年推出,1978年后,C語言已先后被移植到大、中、小及微型機(jī)上,它可以作為工作系統(tǒng)設(shè)計(jì)語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件、三維、二維圖形和動畫,具體應(yīng)用例如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。
Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境將這些部分組合在一起。運(yùn)行Keil軟件需要WIN98NTWIN2000WINXP等操作系統(tǒng)。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會令你事半功倍。
4.2 程序流程圖4.2.1總體流程圖
程序開始后,先對液晶模塊顯示進(jìn)行初始化,通過延時(shí)一秒等待DHT11溫濕度傳感器啟動。DHT11溫濕度傳感器啟動后,對其進(jìn)行數(shù)據(jù)初始化后,進(jìn)行溫濕度信息的采集、轉(zhuǎn)化、處理,最后通過液晶顯示器讀出。DHT11溫濕度傳感器經(jīng)過一次數(shù)據(jù)采集和處理后需返回次延時(shí)程序處理來重新初始化后采集溫濕度數(shù)據(jù)。具體流程圖如圖所示:


file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image038.png


4.2.2 1602液晶程序設(shè)計(jì)
液晶開始顯示之前,必須先確定一個(gè)位置,表示要在哪個(gè)地方顯示,比如第1行第5列的位置。在完成坐標(biāo)定位之后就可以開始顯示內(nèi)容了。液晶在顯示的時(shí)候,是一位一位完成的。比如數(shù)字“123”,就會先顯示百位的“1”,然后是十位的“2”,最后是個(gè)位的“3”。顯示字符串的話,也是一樣的道理,比如顯示“hello”,也是從最開始的字母“h”開始顯示,一位一位的完成,直到顯示完字母“o”,才完成一次顯示任務(wù)。要說明的是,每次顯示一串字符或一個(gè)數(shù)字的時(shí)候,只需在最開始的時(shí)候完成一次定位,之后每顯示完一個(gè)字符,液晶會自動跳到下一個(gè)位置的,無需每個(gè)字符都定位一次。
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image039.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image040.png                             開始
  
        
定位行列坐標(biāo)
   
   
  







  
        
   
   
  


  
        
數(shù)據(jù)顯
   
示完?
   
   
  




file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image041.png

file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image042.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image043.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image044.png
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image045.png
  
        
顯示一個(gè)字符
   
   
  

file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image046.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image047.png
  
        
   
   
  
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image048.png

                              圖5-2液晶顯示流程圖
液晶顯示子函數(shù):


voidwrite_shu(uchar x,uchar y,uchar num)//數(shù)據(jù)顯示函數(shù)
{
uchar s,g;
if(y==0)
lcd_write_com(0x80+x);
else
lcd_write_com(0xc0+x);
s=num/10;// 數(shù)據(jù)分離顯示
lcd_write_data(0x30+s);
g=num%10;//數(shù)據(jù)分離顯示
lcd_write_data(0x30+g);
}
ucharwrite_byte1() //讀一個(gè)字節(jié)
{
uchari,comdata,temp1;
for(i=0;i<8;i++)
{
FLAG=2;
while((!dat)&&FLAG++);//判斷數(shù)據(jù)位是0還是1
Delay_10us();
Delay_10us();
Delay_10us();
temp1=0;
if(dat)temp1=1;     // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1
FLAG=2;
while((dat)&&FLAG++);//flag先與后加1 如果dat一直為1 uchar型變量 flag 溢出變?yōu)?font face="Times New Roman">0 再自加1
if(FLAG==1)break;      //超時(shí)則跳出for循環(huán)
comdata<<=1;//左移一位 高位在前 低位在后
comdata|=temp1;
}
return (comdata);
}


5.2.4溫度傳感器程序設(shè)計(jì)
讀取溫度值的流程圖如圖5-4所示,首先是初始化傳感器,相當(dāng)于是一次復(fù)位的過程,由于本設(shè)計(jì)只接了一個(gè)傳感器,因此無需區(qū)別傳感器的序列號,直接發(fā)一個(gè)指令0xcc跳過ROM尋找,接著發(fā)一個(gè)0x44的指令給傳感器,讓傳感器啟動溫度轉(zhuǎn)換。然后再次復(fù)位傳感器,接著還是一樣的跳過ROM指令0xcc,再往下就是發(fā)0xbe給傳感器準(zhǔn)備讀取傳感器的檢測結(jié)果,最后就是讀取傳感器返回的檢測結(jié)果。






file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image049.png


file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image050.png


  
        
初始化DHT11
   
   
   
  


         
                             圖5-4 溫度傳感器程序流程圖
溫度傳感器子程序:


void DHT11_5() //5個(gè)字節(jié)數(shù)據(jù) 兩個(gè)字節(jié)為溫度數(shù)據(jù) 兩個(gè)字節(jié)為濕度數(shù)據(jù) 最后一個(gè)字節(jié)為校驗(yàn)
{
uchar i,temp;
//主機(jī)拉低18ms
dat=0;
Delay_t(180);
dat=1;
//總線由上拉電阻拉高 主機(jī)延時(shí)20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號
dat=1;
//判斷從機(jī)是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
if(!dat)    //T !
{
FLAG=2; //超時(shí)標(biāo)志位
while((!dat)&&FLAG++);//判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束
FLAG=2;
while(
(dat)&&FLAG++);//判斷從機(jī)拉高80us是否結(jié)束
for(i=0;i<5;i++)//數(shù)據(jù)接收狀態(tài)
{
DHT11=write_byte1();
}
dat=1;     //釋放數(shù)據(jù)總線 為下一次讀取做好準(zhǔn)備
temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);
if(temp==DHT11[4])    //數(shù)據(jù)校驗(yàn)
{
RTflag=1;
}
if(RTflag==1) //如果RTflag=1 說明讀取到得數(shù)據(jù)正確
{
RTflag=0;
//     tm[0]=DATARHT[0]/10;
//     tm[1]=DATARHT[0]%10;
//     tm[2]=DATARHT[1]/10; //濕度
//     tm[3]=DATARHT[2]/10;
//     tm[4]=DATARHT[2]%10;
//     tm[5]=DATARHT[3]/10; //溫度
//write_str(0,0,"measurement");//第一行顯示濕度
write_str(3,0,"shidu:");//第一行顯示濕度
write_shu(9,0,DHT11[0]);
write_str(11,0,"%");
//write_str(0,1,"Temperature");//第二行為顯示溫度
write_str(3,1,"wendu:");//第二行為顯示溫度
write_shu(9,1,DHT11[2]);
write_str(11,1,"^C");
}
}
}
void lcdinit()
{
       uchar i;
       lcd_write_com(0x80+2);
       for(i=0;i<11;i++)
       {
              lcd_write_data(table1);
              delay(50);
       }     
       lcd_write_com(0x80+0x40+1);
       for(i=0;i<13;i++)
       {
              lcd_write_data(table2);
              delay(50);
       }
}
void main()
{
lcd_init(); //1602初始化
//delay(1000); //等待DHT11溫濕度傳感器數(shù)據(jù)穩(wěn)定 開始激活DHT11
lcdinit();
delay(5000);
lcd_write_com(0x01);
while(1)//循環(huán)讀取 并更新數(shù)據(jù)顯示
{

目錄
第1章 緒論... 6
1.1 本課題的背景及研究意義... 6
1.2 國內(nèi)外現(xiàn)狀... 6
1.3 總體設(shè)計(jì)思路... 7
第2章 總體設(shè)計(jì)... 7
2.1 方案選擇... 7
2.1.1控制芯片的選擇... 7
2.1.2溫濕度傳感器模塊的選擇... 7
第3章 系統(tǒng)硬件電路設(shè)計(jì)... 8
3.1 整體方案設(shè)計(jì)... 8
3.1.1系統(tǒng)概述... 8
3.1.2系統(tǒng)框圖... 8
3.2 單片機(jī)最小系統(tǒng)電路... 8
3.2.1單片機(jī)介紹... 8
3.2.2單片機(jī)最小系統(tǒng)... 11
3.3 DHT11數(shù)字傳感器... 12
3.3.1 DHT11數(shù)字溫濕度傳感器... 12
3.3.2  DHT11引腳... 12
3.3.3 DHT11電路... 13
3.4 液晶顯示電路... 13
3.4.1 1602液晶簡介... 13
3.4.2液晶引腳說明... 14
3.4.3指令介紹... 15
3.4.4液晶顯示模塊電路... 18
3.6 STC89C52的系統(tǒng)時(shí)鐘設(shè)計(jì)... 19
第4章 軟件設(shè)計(jì)... 20
4.1 程序語言及開發(fā)環(huán)境... 20
4.2 程序流程圖... 20
4.2.1總體流程圖... 20
4.2.2 1602液晶程序設(shè)計(jì)... 21
5.2.4溫度傳感器程序設(shè)計(jì)... 22
第5章 總結(jié)分析... 24
參考文獻(xiàn)... 26
附  錄    27
附錄1 原理圖... 27
附錄2 源程序... 27
附錄3 實(shí)物圖(正、反面)... 32
附錄4 元件清單... 33
附錄5 小組分工與合作... 33




第1章 緒論1.1 本課題的背景及研究意義
20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)在電子產(chǎn)品幾乎滲透了社會的各個(gè)領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。時(shí)間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無傷大雅。但是一旦重要事情,一時(shí)的耽誤可能釀成大禍。
目前單片機(jī)正朝著高性能和多品種方向發(fā)展,趨勢將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價(jià)格和外圍電路內(nèi)裝化等幾個(gè)方面發(fā)展。下面是單片機(jī)的主要發(fā)展趨勢。單片機(jī)應(yīng)用的重要意義在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)大部分功能,現(xiàn)在已經(jīng)能用單片機(jī)通過軟件方法來實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。
溫度、濕度和人類的生產(chǎn)、生活有著密切的關(guān)系,同時(shí)也是工業(yè)生產(chǎn)中最常見的基本參數(shù),例如機(jī)械、電子、石油、化工等各類工業(yè)中廣泛要求對溫度、濕度進(jìn)行檢測與控制。隨著人們生活水平的提高,人們對自己的生存環(huán)境越來越關(guān)注,而空氣中溫濕度的變化對人體的舒適度和情緒有著直接的影響,所以對溫濕度的檢測及控制就十分有必要了。
1.2 國內(nèi)外現(xiàn)狀
溫度、濕度是工業(yè)農(nóng)業(yè)生產(chǎn)不可求二少的考慮因素,但傳統(tǒng)的方法是用溫度表、毛發(fā)溫度表、雙金屬式測量機(jī)以及溫度試紙等測試器材,通過人工檢測,對不符合溫度和濕度要求的庫房進(jìn)行通風(fēng)、降溫和去濕等工作。這種人工測試方法費(fèi)時(shí)費(fèi)力、效率低、且測試的溫度及濕度誤差大,又具有較大的不確定性。而含有微型計(jì)算機(jī)或者微處理器的測量儀器,由于它擁有對數(shù)據(jù)儲存,運(yùn)算邏輯判斷及自動化功能,有著只能功能,很快得到人們的青睞和關(guān)注。
模擬集成溫度傳感器是在20世紀(jì)80年代問世的,他是將溫度傳感器集成一個(gè)芯片上,可完成溫度測量及模擬信號輸出功能的專用IC。模擬集成溫度傳感器的主要特點(diǎn)是測量溫度誤差小、價(jià)格低、響應(yīng)速度快、傳輸距離遠(yuǎn)、體積小、微功耗等,適合遠(yuǎn)距離測溫、控溫,不需要進(jìn)行非線性校準(zhǔn),外圍電路簡單。他是目前在國內(nèi)外應(yīng)用最為普遍的一種集成傳感器。
1.3 總體設(shè)計(jì)思路
選取單片機(jī)作為系統(tǒng)的主控部件,根據(jù)主控機(jī)的指令對溫度進(jìn)行實(shí)時(shí)采集并通過液晶顯示部分及時(shí)將測量結(jié)果顯示出來。因策,如何準(zhǔn)確獲得被測信號以及對被控對象狀態(tài)的監(jiān)察是單片機(jī)的核心人物。傳感器是實(shí)現(xiàn)測量與控制的首要換屆,對于溫濕度計(jì),系統(tǒng)應(yīng)具有兩大傳感模塊:即溫度傳感器模塊和濕度傳感器模塊。
此外,在微型計(jì)算機(jī)控制系統(tǒng)中,應(yīng)該設(shè)計(jì)液晶顯示模塊,將溫度和濕度的數(shù)據(jù)顯示出來,為了安全生產(chǎn),對于一些重要的參數(shù)或系統(tǒng)部位,應(yīng)當(dāng)設(shè)有緊急狀態(tài)報(bào)警模塊,但由于本設(shè)計(jì)是一個(gè)家用的溫濕度計(jì),因此設(shè)計(jì)得較為簡潔。
第2章 總體設(shè)計(jì)2.1 方案選擇2.1.1控制芯片的選擇
     方案一:采用STC89C52單片機(jī),支持串口編程,計(jì)算速度快,用戶程序空間(flash)8K,內(nèi)部帶有帶電可擦寫可編程讀寫存儲器(EEPROM)。
方案二:采用AT89C51單片機(jī),只能通過專用硬件編程器編程,用戶程序空間小,性價(jià)比低,計(jì)算速度較STC89C52單片機(jī)慢。
STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash存儲器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。因此本設(shè)計(jì)用STC89C52單片機(jī)作為控制器。
2.1.2溫濕度傳感器模塊的選擇
方案一:采用DTH11
方案二:采用SHT11
方案比較:DHT11核心部件采用濕敏電阻,其成本低,穩(wěn)定性差,SHT11核心部件采用濕敏電容,成本高,穩(wěn)定性好。通過成本比較,選擇方案一DTH11。



第3章 系統(tǒng)硬件電路設(shè)計(jì)3.1 整體方案設(shè)計(jì)3.1.1系統(tǒng)概述
整個(gè)系統(tǒng)以STC89C52單片機(jī)為核心器件,配合電阻電容晶振等器件,構(gòu)成單片機(jī)的最小系統(tǒng)。其它個(gè)模塊圍繞著單片機(jī)最小系統(tǒng)展開。溫濕度采集模塊,檢測當(dāng)前環(huán)境的溫度值,并對并把溫濕度數(shù)據(jù)傳輸給單片機(jī);顯示模塊,采用1602液晶作為顯示模塊,負(fù)責(zé)顯示測量到的濕度值和溫度值;最后一個(gè)是電源模塊,采用5V的USB供電,本系統(tǒng)如需移動測量時(shí),可采用移動電源進(jìn)行供電。
3.1.2系統(tǒng)框圖
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png

3.2 單片機(jī)最小系統(tǒng)電路3.2.1單片機(jī)介紹
(1)概述
STC89C52是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和512bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,功能強(qiáng)大的STC89C52單片機(jī)可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場合。
STC89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口線。STC89C52有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
(2)主要功能特性
  ◆兼容MCS51指令系統(tǒng);◆8k可反復(fù)擦寫(>1000次)Flash ROM; ◆32個(gè)雙向I/O口;  ◆512字節(jié)RAM ;◆3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷;◆時(shí)鐘頻率0-24MHz; ◆內(nèi)置4KB EEPROM;◆全雙工串行口◆4個(gè)外部中斷源; ◆共8個(gè)中斷源;◆2個(gè)讀寫中斷口線; ◆3級加密位; ◆低功耗空閑和掉電模式; ◆軟件設(shè)置睡眠和喚醒功能;

(3)8051單片機(jī)的引腳功能
MCS-51系列單片機(jī)一般采用40個(gè)引腳,雙列直插式封裝,用HMOS工藝制造,其外部引腳排列如圖4-1所示。其中,各引腳的功能為:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
圖4-1 STC89C52引腳圖
① 主電源引腳
VCC(40腳),接+5V電源正端;
GND(20腳),接+5V電源地端;
② 外接晶體或外部振蕩器引腳
XTAL1(19腳),接外部晶振的一個(gè)引腳。在單片機(jī)內(nèi)部,它是一個(gè)反相放大器   的輸入端。當(dāng)采用外部振蕩器時(shí),此引腳應(yīng)接  地。
XTAL2(18腳),接外部晶振的另一個(gè)引腳。在片內(nèi)接至反相放大器的輸出端和   內(nèi)部時(shí)鐘電路的輸入端。當(dāng)采用外部振蕩器時(shí),此腳接外部振蕩器的輸出端。
③ 控制信號線
RESET(9腳),復(fù)位信號輸入端,復(fù)位/掉電時(shí)內(nèi)部RAM的備用電源輸入端。
ALE(30腳),地址鎖存允許/編程脈沖輸入,用ALE鎖存從P0口輸出的低8   位地址。在對片內(nèi)EPROM編程時(shí),編程脈沖由此輸入。
PSEN(29腳),外部程序存儲器讀選通信號,低電平有效。
       EA(31腳),訪問外部存儲器允許/編程電壓輸入。EA為高電平時(shí),訪問內(nèi)部存       儲器;低電平時(shí),訪問外部存儲器。
④ 多功能I/O口引腳
8051單片機(jī)設(shè)有4個(gè)雙向I/O口(P0、P1、P2、P3),每一組I/O口線都可以獨(dú)立地用作輸入或輸出口,其中:
P0口(32~39腳)——雙向口(三態(tài)),可作為輸入/輸出口,可驅(qū)動8個(gè)LSTTL門電路。實(shí)際應(yīng)用中常作為分時(shí)使用的地址/數(shù)據(jù)總線口,對外部程序或數(shù)據(jù)存儲器尋址時(shí)低8位地址與數(shù)據(jù)總線分時(shí)使用P0口:先送低8位地址信號到P0口,由地址鎖存信號ALE的下降沿將地址信號鎖存到地址鎖存器后,再作為數(shù)據(jù)總線的口線對數(shù)據(jù)進(jìn)行輸入或輸出。
           P1口(1~8腳)——準(zhǔn)雙向口(三態(tài)),可驅(qū)動4個(gè)LSTTL門電路。用作       輸入線時(shí),口鎖存器必須由單片機(jī)先寫入“1”,每一位都可編程為輸入或輸出      線。
           P2口(21~28)——準(zhǔn)雙向口(三態(tài)),可驅(qū)動4個(gè)LSTTL門電路?勺     為輸入/輸出口,實(shí)際應(yīng)用中一般作為地址總線的高8位,與P0口一起組成16      位地址總線,用于對外部存儲器的接口電路進(jìn)行尋址。
           P3口(10~17腳)——準(zhǔn)雙向口(三態(tài)),可驅(qū)動4個(gè)LSTTL門電路。雙     功能口,作為第一功能使用時(shí),與P1口一樣;作為第二功能使用時(shí),每一           位都有特定用途,其特殊用途如表4.1所示:
表4.1 P3口第二用途
  
端口引腳
  
  
第二功能
  
  
注    釋
  
  
P3.0
  
  
RXD
  
  
串行口數(shù)據(jù)接收端
  
  
P3.1
  
  
TXD
  
  
串行口數(shù)據(jù)發(fā)送端
  
  
P3.2
  
  
/INT0
  
  
外中斷請求0
  
  
P3.3
  
  
/INT1
  
  
外中斷請求1
  
  
P3.4
  
  
T0
  
  
定時(shí)/計(jì)數(shù)器0外部計(jì)數(shù)信號輸入
  
  
P3.5
  
  
T1
  
  
定時(shí)/計(jì)數(shù)器1外部計(jì)數(shù)信號輸入
  
  
P3.6
  
  
/WR
  
  
外部RAM寫選通信號輸出
  
  
P3.7
  
  
/RD
  
  
外部RAM讀選通信號輸出
  









3.2.2單片機(jī)最小系統(tǒng)
STC89C52的最小系統(tǒng)由三個(gè)部分組成,晶振電路部分、復(fù)位電路部分、電源電路等三個(gè)部分組成。
晶振電路包括2個(gè)30pF的電容C2和C3,以及12M的晶振X1。電容的作用在這里是起振作用,幫助晶振更容易的起振,取值范圍是15-33pF。晶振的取值也可以是24M,晶振的取值越高,單片機(jī)的執(zhí)行速度越快。在進(jìn)行電路設(shè)計(jì)的時(shí)候,晶振部分越靠近單片機(jī)越好。
單片機(jī)復(fù)位電路就好比電腦的重啟部分,當(dāng)電腦在使用中出現(xiàn)死機(jī),按下重啟按鈕電腦內(nèi)部的程序從頭開始執(zhí)行。單片機(jī)也一樣,當(dāng)單片機(jī)系統(tǒng)在運(yùn)行中,受到環(huán)境干擾出現(xiàn)程序跑飛的時(shí)候,按下復(fù)位按鈕內(nèi)部的程序自動從頭開始執(zhí)行。
復(fù)位電路由10uF的極性電容C1和10K的電阻R4構(gòu)成。利用電容電壓不能突變的性質(zhì),可以知道,當(dāng)系統(tǒng)一上電,RESET腳將會出現(xiàn)高電平,并且這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定。典型的51單片機(jī)當(dāng)RESET腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以適當(dāng)組合RC的取值就可以保證可靠的復(fù)位。
最后一個(gè)是電源部分,采用5V的USB直接供電,可采用手機(jī)充電器、電腦USB口、移動電源等設(shè)備進(jìn)行供電。
此外,除了單片機(jī)最小系統(tǒng)的3個(gè)部分之外,這里還多了一些外部電路。
由于STC89C51的P0口是漏極開路輸出,因此在P0口接了一個(gè)10K的排阻R1,使得P0口可以作為普通的I/O口使用,本設(shè)計(jì)用P0口來做液晶的數(shù)據(jù)口。
特別注意的是,對于31腳(EA),當(dāng)接高電平時(shí),單片機(jī)在復(fù)位后從內(nèi)部ROM的0000H開始執(zhí)行;當(dāng)接低電平時(shí),復(fù)位后直接從外部ROM的0000H開始執(zhí)行。由于我們的程序存儲在了單片機(jī)內(nèi)部,所以EA要接高電平,保證單片機(jī)是從內(nèi)部讀取程序去執(zhí)行的。

3.3DHT11數(shù)字傳感器
3.3.1DHT11數(shù)字溫濕度傳感器
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(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ù)以程序的形式儲存在OTP內(nèi)存中,傳感器內(nèi)部在檢測信號的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達(dá)20米以上,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場合的最佳選則。產(chǎn)品為4針單排引腳封裝。連接方便,特殊封裝形式可根據(jù)用戶需求而提供。
3.3.2  DHT11引腳
DHT11有四個(gè)引腳,3號引腳一般懸空,如圖2-3所示。DHT11的供電電壓為3—5.5V。傳感器上電后,要等待1s以越過不穩(wěn)定狀態(tài)在此期間無需發(fā)送任何指令。電源引腳(VDD,GND)之間可增加一個(gè)100nF的電容,用以去耦濾波。建議連接線長度短于20米時(shí)用5K上拉電阻,大于20米時(shí)根據(jù)實(shí)際情況使用合適的上拉電阻。
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png

3.3.3DHT11電路
DHT11一共引出四個(gè)引腳,其中一個(gè)接VCC,一個(gè)接GND,剩下兩個(gè)分別接到單片機(jī)的IO口。在本設(shè)計(jì)中,把DHT11的2引腳接到單片機(jī)的P21口。電路圖如圖所示:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.jpg

3.4 液晶顯示電路3.4.1 1602液晶簡介
液晶顯示器是一種顯示器件,具有小體積、輕重量、低功耗等特色。由于其功耗低、顯示的信息量大(例如,文本,圖形,曲線等)、無電磁輻射、使用壽命長,它已被廣泛應(yīng)用在便攜式電子產(chǎn)品。
本系統(tǒng)顯示采用了工業(yè)字符型液晶模塊1602,可顯示2行16個(gè)字符,能方便顯示英文字母大小寫、阿拉伯?dāng)?shù)字、常用符號等。通過自定義還可顯示簡單的漢字。在通信系統(tǒng),智能操作儀表和辦公設(shè)備的自動化中被廣泛的應(yīng)用,主要功能是顯示ASCII字符,因此被稱為“字符型顯示裝置”。1602液晶分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如下圖(圖4-10)所示:





file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg







圖4-10 液晶尺寸說明
1602LCD主要技術(shù)參數(shù):
◆顯示容量:16×2個(gè)字符
◆芯片工作電壓:4.5—5.5V
◆工作電流:2.0mA(5.0V)
◆模塊最佳工作電壓:5.0V
◆字符尺寸:2.95×4.35(W×H)mm
3.4.2液晶引腳說明
1602的引腳如表4-3所示:

  
編號
  
  
符號
  
  
引腳說明
  
  
編號
  
  
符號
  
  
引腳說明
  
  
1
  
  
VSS
  
  
電源地
  
  
9
  
  
D2
  
  
數(shù)據(jù)
  
  
2
  
  
VCC
  
  
電源正極
  
  
10
  
  
D3
  
  
數(shù)據(jù)
  
  
3
  
  
VO
  
  
液晶顯示偏壓
  
  
11
  
  
D4
  
  
數(shù)據(jù)
  
  
4
  
  
RS
  
  
數(shù)據(jù)/命令選擇
  
  
12
  
  
D5
  
  
數(shù)據(jù)
  
  
5
  
  
R/W
  
  
讀/寫選擇
  
  
13
  
  
D6
  
  
數(shù)據(jù)
  
  
6
  
  
EN
  
  
使能信號
  
  
14
  
  
D7
  
  
數(shù)據(jù)
  
  
7
  
  
D0
  
  
數(shù)據(jù)
  
  
15
  
  
BLA
  
  
背光源正極
  
  
8
  
  
D1
  
  
數(shù)據(jù)
  
  
16
  
  
BLK
  
  
背光源負(fù)極
  
                           表4-3 1602液晶引腳說明










第一腳:接地電源VSS。
第二腳:5V正電源為VCC。  
第三腳:VO為液晶顯示器對比度調(diào)整的端口,對比度的強(qiáng)弱由接電源的不同決定,對比度的調(diào)整可以通過一個(gè)10k的電位器。  
第四腳:RS是寄存器選擇,高電平表示數(shù)據(jù)寄存器,低電平表示指令寄存器。
第五腳:R / W的讀和寫信號線,高電平為讀操作,低電平為寫操作。其中RS與R/W的關(guān)系決定了當(dāng)時(shí)狀態(tài)。例如兩端共同為0時(shí)能夠?qū)懭朊罨蛘唢@示其地址,當(dāng)兩端同為1時(shí)可以讀忙碌信號,當(dāng)RS為1,R/W為0時(shí)能夠?qū)?shù)據(jù)錄入。  
第六腳:使能端EN,當(dāng)EN端由1至0時(shí),液晶模塊中的命令開始被運(yùn)行。
第七至十四腳:D0-D7為8位雙向數(shù)據(jù)線。
第十五腳:背光源正極。
第十六腳:背光源負(fù)極。
3.4.3指令介紹
(1)清屏指令
指令如表4-4所示
表4-4 清屏指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.jpg


功能:
1)能夠?qū)⒁壕э@示內(nèi)容刪除,就是講DDRAM所有內(nèi)容都添加進(jìn)“空白”的          ASCI碼20II;
2)能夠使光標(biāo)回到原始位置,就是把光標(biāo)重新擺放回液晶顯示屏的左上方;
3)把地址顯示器即AC的數(shù)值歸位零
(2)光標(biāo)歸位指令
指令如表4-5所示
表4-5 光標(biāo)歸位指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg


功能:
1)將光標(biāo)重新擺放回顯示器的左上方;
2)地址計(jì)數(shù)器即AC的數(shù)值被設(shè)為零;
3)DDRAM所有的內(nèi)容將保持原內(nèi)容不會變化;
(3)進(jìn)入模式設(shè)置指令
指令如表4-6所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.jpg表4-6 進(jìn)入模式設(shè)置指令功能表



功能:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg當(dāng)輸入一位數(shù)據(jù)之后光標(biāo)移動的方向?qū)⒈辉O(shè)置,參數(shù)設(shè)定的情況如下:





(4)顯示開關(guān)設(shè)置指令
指令如表4-7所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg表4-7 顯示開關(guān)設(shè)置指令功能表




功能:
能夠控制顯示器的開關(guān)與否,光標(biāo)的顯示或者關(guān)閉,光標(biāo)是否需要閃爍,參數(shù)      設(shè)定的情況如下:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.jpg




(5)設(shè)定顯示屏或光標(biāo)移動方向指令
指令如表4-8所示
表4-8 設(shè)定顯示屏或光標(biāo)移動方向指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg



功能:
將光標(biāo)移動或者整個(gè)顯示屏幕移動位置,參數(shù)設(shè)定的情況如下:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg








(6)功能設(shè)定指令
指令如表4-9所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpg表4-9 功能設(shè)定指令功能表




功能:
數(shù)據(jù)總線的位數(shù)何所顯示出來的行數(shù)字型將被設(shè)定,參數(shù)設(shè)定情況如下:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg





(7)設(shè)定CGRAM地址指令
指令如表4-10所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg表4-10 設(shè)定CGRAM地址指令功能表




功能:
下一次被存入數(shù)據(jù)的CGRAM地址將被設(shè)置,字符號為DB5DB4DB3即未來顯      示此字符的時(shí)候被采用的字符的地址(000-111)可同時(shí)定義八個(gè)字符,行號為  DB2DB1DB0 (000-111)八行。
(8)設(shè)定DDRAM地址指令
指令如表4-11所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg表4-11 設(shè)定DDRAM地址指令功能表




功能:
下一次要存入數(shù)據(jù)的DDRAM地址將被設(shè)置。
(9)讀取忙或AC地址指令
指令如表4-12所示
表4-12 讀取忙或AC地址指令功能表
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg



功能:
下一次要存入數(shù)據(jù)的DDRAM地址將被設(shè)置。
1)HF(忙碌信號)讀取,假如液晶顯示器忙碌的時(shí)候則BF=1,暫時(shí)不能接收被單片機(jī)送出的數(shù)據(jù)和指令,當(dāng)BF=0的時(shí)候則相反。  
2)地址計(jì)數(shù)器(AC)內(nèi)容被接收。
(10)數(shù)據(jù)寫入DDRAM或者CGRAM指令
指令如表4-13所示
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg表4-13 數(shù)據(jù)寫入DDRAM或者CGRAM指令指令功能表



功能:
1)DREAM被寫入字符碼,液晶顯示屏隨即顯示出相應(yīng)的字符;
2)OGRAM被存入由使用者設(shè)計(jì)的圖案
3.4.4液晶顯示模塊電路
本液晶模塊的電路的連接圖如圖4-11所示。第1腳和第2腳分別接到了電路的GND和VCC,這2個(gè)腳是液晶工作的電源輸入腳。第3腳通過一個(gè)10K的電位器連接到地端,可通過調(diào)節(jié)該電位器來調(diào)節(jié)液晶的對比度。第4腳是液晶的寄存器控制腳,接到了單片機(jī)的P27腳上。第5腳是液晶的讀寫控制腳,直接接地。第6腳是液晶的使能腳,接到了單片機(jī)的P26腳上。第7腳到第14腳是液晶的數(shù)據(jù)/地址8位總線,接到了單片機(jī)的P0口上。最后第15腳和第16腳是液晶的背光電源腳,直接連接系統(tǒng)VCC和GND。
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg

圖 4-11液晶模塊連接圖
3.6 STC89C52的系統(tǒng)時(shí)鐘設(shè)計(jì)
時(shí)鐘電路是用來產(chǎn)生89C51單片機(jī)工作時(shí)所必須的時(shí)鐘信號,89C51本身就是一個(gè)復(fù)雜的同步時(shí)序電路,為保證工作方式的實(shí)現(xiàn),89C51在唯一的時(shí)鐘信號的控制下嚴(yán)格的按時(shí)序執(zhí)行指令進(jìn)行工作,時(shí)鐘的頻率影響單片機(jī)的速度和穩(wěn)定性。通常時(shí)鐘由于兩種形式:內(nèi)部時(shí)鐘和外部時(shí)鐘。
我們系統(tǒng)采用內(nèi)部時(shí)鐘方式來為系統(tǒng)提供時(shí)鐘信號。89C51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反向放大器,該放大器的輸入輸出引腳為XTAL1和XTAL2,它們跨接在晶體振蕩器和用于微調(diào)的電容,便構(gòu)成了一個(gè)自激勵(lì)振蕩器。
電路中的C1、C2的選擇在30PF左右,但電容太小會影響振蕩的頻率、穩(wěn)定性和快速性。晶振頻率為在1.2MHZ12MHZ之間,頻率越高單片機(jī)的速度就越快,但對存儲器速度要求就高。為了提高穩(wěn)定性我們采用溫度穩(wěn)定性好的NPO電容,采用的晶振頻率為12MHZ。時(shí)鐘電路如圖所示:
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image036.jpg
時(shí)鐘復(fù)位電路

第4章 軟件設(shè)計(jì)4.1 程序語言及開發(fā)環(huán)境
     C語言是一種計(jì)算機(jī)程序設(shè)計(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ī)硬件的應(yīng)用程序。它的應(yīng)用范圍廣泛,具備很強(qiáng)的數(shù)據(jù)處理能力,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,適于編寫系統(tǒng)軟件、三維、二維圖形和動畫,具體應(yīng)用例如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。
Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境將這些部分組合在一起。運(yùn)行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會令你事半功倍。
4.2 程序流程圖4.2.1總體流程圖
程序開始后,先對液晶模塊顯示進(jìn)行初始化,通過延時(shí)一秒等待DHT11溫濕度傳感器啟動。DHT11溫濕度傳感器啟動后,對其進(jìn)行數(shù)據(jù)初始化后,進(jìn)行溫濕度信息的采集、轉(zhuǎn)化、處理,最后通過液晶顯示器讀出。DHT11溫濕度傳感器經(jīng)過一次數(shù)據(jù)采集和處理后需返回次延時(shí)程序處理來重新初始化后采集溫濕度數(shù)據(jù)。具體流程圖如圖所示:


file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image038.png












4.2.2 1602液晶程序設(shè)計(jì)
液晶開始顯示之前,必須先確定一個(gè)位置,表示要在哪個(gè)地方顯示,比如第1行第5列的位置。在完成坐標(biāo)定位之后就可以開始顯示內(nèi)容了。液晶在顯示的時(shí)候,是一位一位完成的。比如數(shù)字“123”,就會先顯示百位的“1”,然后是十位的“2”,最后是個(gè)位的“3”。顯示字符串的話,也是一樣的道理,比如顯示“hello”,也是從最開始的字母“h”開始顯示,一位一位的完成,直到顯示完字母“o”,才完成一次顯示任務(wù)。要說明的是,每次顯示一串字符或一個(gè)數(shù)字的時(shí)候,只需在最開始的時(shí)候完成一次定位,之后每顯示完一個(gè)字符,液晶會自動跳到下一個(gè)位置的,無需每個(gè)字符都定位一次。
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image039.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image040.png                             開始
  
        
定位行列坐標(biāo)
   
   
  







  
        
   
   
  


  
        
數(shù)據(jù)顯
   
示完?
   
   
  




file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image041.png

file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image042.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image043.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image044.png
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image045.png
  
        
顯示一個(gè)字符
   
   
  

file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image046.pngfile:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image047.png
  
        
   
   
  
file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image048.png


                              圖5-2液晶顯示流程圖
液晶顯示子函數(shù):



voidwrite_shu(uchar x,uchar y,uchar num)//數(shù)據(jù)顯示函數(shù)

{

uchar s,g;

if(y==0)

lcd_write_com(0x80+x);

else

lcd_write_com(0xc0+x);

s=num/10;// 數(shù)據(jù)分離顯示

lcd_write_data(0x30+s);

g=num%10;//數(shù)據(jù)分離顯示

lcd_write_data(0x30+g);

}

ucharwrite_byte1() //讀一個(gè)字節(jié)

{

uchari,comdata,temp1;

for(i=0;i<8;i++)

{

FLAG=2;

while((!dat)&&FLAG++);//判斷數(shù)據(jù)位是0還是1

Delay_10us();

Delay_10us();

Delay_10us();

temp1=0;

if(dat)temp1=1;     // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1

FLAG=2;

while((dat)&&FLAG++);//flag先與后加1 如果dat一直為1 uchar型變量 flag 溢出變?yōu)? 再自加1

if(FLAG==1)break;      //超時(shí)則跳出for循環(huán)

comdata<<=1;//左移一位 高位在前 低位在后

comdata|=temp1;

}

return (comdata);

}


5.2.4溫度傳感器程序設(shè)計(jì)
讀取溫度值的流程圖如圖5-4所示,首先是初始化傳感器,相當(dāng)于是一次復(fù)位的過程,由于本設(shè)計(jì)只接了一個(gè)傳感器,因此無需區(qū)別傳感器的序列號,直接發(fā)一個(gè)指令0xcc跳過ROM尋找,接著發(fā)一個(gè)0x44的指令給傳感器,讓傳感器啟動溫度轉(zhuǎn)換。然后再次復(fù)位傳感器,接著還是一樣的跳過ROM指令0xcc,再往下就是發(fā)0xbe給傳感器準(zhǔn)備讀取傳感器的檢測結(jié)果,最后就是讀取傳感器返回的檢測結(jié)果。







file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image049.png


file:///C:/Users/YEMING~1/AppData/Local/Temp/msohtmlclip1/01/clip_image050.png



  
        
初始化DHT11
   
   
   
  




















                             圖5-4 溫度傳感器程序流程圖
溫度傳感器子程序:



void DHT11_5() //讀5個(gè)字節(jié)數(shù)據(jù) 兩個(gè)字節(jié)為溫度數(shù)據(jù) 兩個(gè)字節(jié)為濕度數(shù)據(jù) 最后一個(gè)字節(jié)為校驗(yàn)

{

uchar i,temp;

//主機(jī)拉低18ms

dat=0;

Delay_t(180);

dat=1;

//總線由上拉電阻拉高 主機(jī)延時(shí)20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號

dat=1;

//判斷從機(jī)是否有低電平響應(yīng)信號 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行

if(!dat)    //T !

{

FLAG=2; //超時(shí)標(biāo)志位

while((!dat)&&FLAG++);//判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號是否結(jié)束

FLAG=2;

while(

(dat)&&FLAG++);//判斷從機(jī)拉高80us是否結(jié)束

for(i=0;i<5;i++)//數(shù)據(jù)接收狀態(tài)

{

DHT11=write_byte1();

}

dat=1;     //釋放數(shù)據(jù)總線 為下一次讀取做好準(zhǔn)備

temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);

if(temp==DHT11[4])    //數(shù)據(jù)校驗(yàn)

{

RTflag=1;

}

if(RTflag==1) //如果RTflag=1 說明讀取到得數(shù)據(jù)正確

{

RTflag=0;

//     tm[0]=DATARHT[0]/10;

//     tm[1]=DATARHT[0]%10;

//     tm[2]=DATARHT[1]/10; //濕度

//     tm[3]=DATARHT[2]/10;

//     tm[4]=DATARHT[2]%10;

//     tm[5]=DATARHT[3]/10; //溫度

//write_str(0,0,"measurement");//第一行顯示濕度
write_str(3,0,"shidu:");//第一行顯示濕度
write_shu(9,0,DHT11[0]);

write_str(11,0,"%");

//write_str(0,1,"Temperature");//第二行為顯示溫度
write_str(3,1,"wendu:");//第二行為顯示溫度
write_shu(9,1,DHT11[2]);

write_str(11,1,"^C");
}

}

}
void lcdinit()
{
       uchar i;
       lcd_write_com(0x80+2);
       for(i=0;i<11;i++)
       {
              lcd_write_data(table1);
              delay(50);
       }     
       lcd_write_com(0x80+0x40+1);
       for(i=0;i<13;i++)
       {
              lcd_write_data(table2);
              delay(50);
       }
}
void main()
{
lcd_init(); //1602初始化
//delay(1000); //等待DHT11溫濕度傳感器數(shù)據(jù)穩(wěn)定 開始激活DHT11
lcdinit();
delay(5000);
lcd_write_com(0x01);
while(1)//循環(huán)讀取 并更新數(shù)據(jù)顯示
{
delay(1000);//等待DHT11溫濕度傳感器數(shù)據(jù)穩(wěn)定 開始激活DHT11
write_byte1();//讀一個(gè)字節(jié)
DHT11_5(); //讀數(shù)據(jù)
delay(1000); //延時(shí)等待
}
}




delay(1000);//等待DHT11溫濕度傳感器數(shù)據(jù)穩(wěn)定 開始激活DHT11
write_byte1();//讀一個(gè)字節(jié)
DHT11_5(); //讀數(shù)據(jù)
delay(1000); //延時(shí)等待
}
}




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

使用道具 舉報(bào)

沙發(fā)
ID:535213 發(fā)表于 2019-5-23 21:07 | 只看該作者
此帖僅作者可見

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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