多功能溫濕度計(jì)設(shè)計(jì)畢業(yè)論文_第1頁
已閱讀1頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  多功能數(shù)字溫濕度計(jì)設(shè)計(jì)</p><p>  【摘要】溫度和濕度是兩個(gè)最基本的環(huán)境參數(shù),人們生活與溫濕度息息相關(guān)。在工農(nóng)業(yè)生產(chǎn)、氣象、環(huán)保、國(guó)防、科研等部門,經(jīng)常需要對(duì)環(huán)境溫度與濕度進(jìn)行測(cè)量。準(zhǔn)確測(cè)量溫濕度在生物制藥、食品加工、造紙等行業(yè)更是至關(guān)重要的。因此研究溫濕度的測(cè)量方法具有重要的意義。</p><p>  本論文講述了一種以單片機(jī)AT89C52為主要控制器件,以

2、DHT22為數(shù)字溫濕度傳感器的新型數(shù)字溫濕度計(jì),具有時(shí)間、溫濕度顯示,并且可以自行設(shè)置溫度預(yù)警值,當(dāng)溫度超出預(yù)警值時(shí)報(bào)警,存儲(chǔ)溫濕度的功能。</p><p>  【關(guān)鍵詞】溫度;濕度;DHT22;時(shí)間</p><p>  Multifunction digital hygrometer design</p><p>  [Abstract] Temperature

3、and humidity are the two most basic environmental parameters, people's life is closely related to temperature and humidity. In industrial and agricultural production, meteorology, environmental protection, national d

4、efense, scientific research departments, often need to measure temperature and humidity to the environment. Accurate measurement of temperature and humidity in biological pharmaceutical, food processing, paper making ind

5、ustries is of vital importance. So the te</p><p>  This paper tells the story of a single chip microcomputer AT89C52 as the main control device, a new type of digital temperature and humidity for DHT22 digit

6、al temperature and humidity meter, time, temperature and humidity display, and was able to set temperature warning value, when temperature exceeds the warning alarm, the function of storage temperature and humidity.</

7、p><p>  [Keyword] Temperature; humidity; DHT22; time</p><p><b>  目 錄</b></p><p>  1.溫濕度計(jì)發(fā)展史1</p><p>  1.1溫度計(jì)的發(fā)展史1</p><p>  1.2濕度計(jì)的發(fā)展史2</

8、p><p>  2. 設(shè)計(jì)任務(wù)分析及方案論證3</p><p>  2.1設(shè)計(jì)數(shù)字溫濕度計(jì)的需求分析3</p><p>  2.2設(shè)計(jì)任務(wù)及要求3</p><p>  2.3 設(shè)計(jì)總體方案及方案論證3</p><p>  2.4器件的選擇4</p><p>  2.4.1主控制器芯片4&

9、lt;/p><p>  2.4.2溫濕度傳感器7</p><p>  2.4.3時(shí)鐘芯片8</p><p>  2.4.4存儲(chǔ)芯片8</p><p>  2.4.5 LCD128649</p><p>  2.5溫濕度測(cè)量的方法及分析11</p><p>  3. 硬件電路的設(shè)計(jì)12&l

10、t;/p><p>  3.1總體結(jié)構(gòu)框圖12</p><p>  3.2 主控制電路和測(cè)溫濕電路12</p><p>  3.3 存儲(chǔ)模塊與時(shí)鐘模塊電路13</p><p>  3.4 顯示模塊電路14</p><p>  4.  軟件設(shè)計(jì)及分析15</p><p>  4.1程

11、序流程圖15</p><p>  4.2 DHT22工作原理16</p><p>  4.3 DS1302工作原理22</p><p>  4.4 AT24C02工作原理25</p><p>  4.5 LCD12864的工作原理31</p><p><b>  5. 結(jié)論34</b>

12、</p><p>  參 考 文 獻(xiàn)35</p><p><b>  致 謝36</b></p><p>  附錄A 實(shí)物圖37</p><p>  附錄B 元件清單39</p><p><b>  溫濕度計(jì)發(fā)展史</b></p><p>

13、  1.1溫度計(jì)的發(fā)展史</p><p>  世界上記錄最熱的溫度是在利比亞,時(shí)間是1922年9月13日,溫度是攝氏58度,之后1953年在墨西哥記錄到60度。美國(guó)記錄的最高溫度是在加州的死亡谷,1913年7月10日,溫度是56.7度,曾經(jīng)有人描述過在這個(gè)溫度下的感受,人可以感受到死亡的威脅,鳥熱的從天上掉下來。</p><p>  古希臘人早就知道空氣在受熱的時(shí)候會(huì)膨脹,在大約2000年

14、前,亞歷山大的英雄(Hero of Alexandria),這其實(shí)是一希臘人,生活在埃及的亞歷山大,名字叫"Hero”,他發(fā)明了一個(gè)類似蒸汽機(jī)的東西,用的就是熱氣膨脹的原理,但這個(gè)還不是溫度計(jì)。</p><p>  直到1592年,伽利略發(fā)明了一個(gè)類似溫度計(jì)的東西,這個(gè)也可以測(cè)定氣壓,1612年,伽利略的朋友Santorio Santorio (1561-1636),(并不是我把名字打重了,他的名字和姓

15、氏就是一樣的,)他把伽利略的溫度計(jì)改造了一下,在一個(gè)封閉的系統(tǒng)里,隨著溫度的變化,空氣收縮膨脹,彩色的液體高度也隨著變化,他用這個(gè)測(cè)定人體的溫度變化,算是世界上第一個(gè)體溫表。</p><p>  直到1713年,Daniel Fahrenheit(1686-1736)在溫度計(jì)上放上了刻度,首先把冰融化的溫度和健康人體的溫度兩個(gè)刻度標(biāo)上,但他很快意識(shí)到,冰融化的溫度是不變的,但水結(jié)冰的溫度則是變化的,他把冰,水和鹽

16、混在一起,這個(gè)溫度作為0度,而冰融化的溫度是32度,人體的溫度是96度。1835年,人們發(fā)現(xiàn)人體的正常溫度是98.6度(就是攝氏37度)。Fahrenheit有的時(shí)候用酒精作為表示溫度的液體,但后來他選擇了水銀,以后這個(gè)溫度計(jì)的上限訂到了水沸騰的點(diǎn),212度。這個(gè)就是英國(guó)美國(guó)使用的華氏度。</p><p>  1742年,瑞典的天文學(xué)家Anders Celsius(1701-1744)把水結(jié)冰的點(diǎn)定位0度,水沸騰

17、的點(diǎn)定位100度,之后Carolus Linnaeus(1707-1778)把這個(gè)順序倒了過來,就是現(xiàn)在世界上使用最廣泛的攝氏度。</p><p>  從攝氏度的國(guó)家來到使用華氏度的國(guó)家非常不習(xí)慣,要經(jīng)常把華氏度轉(zhuǎn)換成攝氏度,才能明白天氣預(yù)報(bào)是什么意思,很多年后才習(xí)慣華氏度,具體轉(zhuǎn)換是F=9/5C+32,C=5/9(F-32),心算還是比較困難的。</p><p>  1848年Kelvi

18、n引入一個(gè)絕對(duì)0度的概念,就是攝氏零下273.5度,然后攝氏0度就是273.15K, 100攝氏度就是373.15K。</p><p>  1.2濕度計(jì)的發(fā)展史</p><p>  濕度計(jì)是測(cè)量空氣內(nèi)含水分多少的儀器。《史記·天官書》中即有測(cè)濕的記載。我國(guó)漢朝初年就已出現(xiàn)濕度計(jì),它是利用天平來測(cè)量空氣干燥或潮濕的。天平濕度計(jì)的使用方法,是把兩個(gè)重量相等而吸濕性不同的物體,例如灰和

19、鐵,分別掛在天平兩端。當(dāng)空氣濕度發(fā)生變化時(shí),由于兩個(gè)物體吸入的分水不同,重量也就起了變化,于是天平發(fā)生偏差,從而指示出空氣潮濕的程度。這就是濕度計(jì)的由來。</p><p>  空氣的濕度可通俗地理解為空氣的潮濕程度.它有絕對(duì)濕度和相對(duì)濕度之分.</p><p>  絕對(duì)濕度:空氣中水蒸氣的壓強(qiáng) p 叫做空氣的絕對(duì)濕度.</p><p>  空氣的濕度可以用空氣中所含

20、水蒸汽的密度,即單位體積的空氣中所含水蒸汽的質(zhì)量來表示.由于直接測(cè)量空氣中水蒸氣的密度比較困難,而水蒸氣的壓強(qiáng)隨水蒸氣密度的增大而增大,所以通常用空氣中水蒸氣的壓強(qiáng)來表示空氣的濕度,這就是空氣的絕對(duì)濕度.</p><p><b>  相對(duì)濕度:</b></p><p>  (1)概念的引入:為了表示空氣中水蒸氣離飽和狀態(tài)的遠(yuǎn)近而引入相對(duì)濕度的概念.</p>

21、<p>  (2)相對(duì)濕度 B :某溫度時(shí)空氣的絕對(duì)濕度 p 跟同一溫度下水的飽和汽壓 ps 的百分比叫做這時(shí)空氣的相對(duì)濕度</p><p> ?、俨煌瑴囟认滤娘柡推麎嚎梢圆楸淼玫?lt;/p><p> ?、谠诮^對(duì)濕度 p 不變而降低溫度時(shí),由于水的飽和汽壓減小而使空氣的相對(duì)濕度增大。</p><p> ?、劬邮业南鄬?duì)濕度以 60 %~ 70 %較適宜。

22、</p><p>  2. 設(shè)計(jì)任務(wù)分析及方案論證</p><p>  2.1設(shè)計(jì)數(shù)字溫濕度計(jì)的需求分析</p><p>  溫度與濕度與人們的生活息息相關(guān)。在工農(nóng)業(yè)生產(chǎn)、氣象、環(huán)保、國(guó)防、科研等部門,經(jīng)常需要對(duì)環(huán)境溫度與濕度進(jìn)行測(cè)量及控制。準(zhǔn)確測(cè)量溫濕度在生物制藥、食品加工、造紙等行業(yè)更是至關(guān)重要的。傳統(tǒng)的溫度計(jì)是用水銀柱來顯示的,雖然結(jié)構(gòu)簡(jiǎn)單、價(jià)格便宜,但是它的

23、精確度不高,不易讀數(shù)。傳統(tǒng)濕度計(jì)采用干濕球顯示法,不僅復(fù)雜而且測(cè)量精度不高。而采用單片機(jī)對(duì)溫濕度進(jìn)行測(cè)量,不僅具有控制方便,簡(jiǎn)單和靈活等優(yōu)點(diǎn),而且可以提高溫濕度的測(cè)量精度。用12864液晶顯示屏來顯示溫濕度的數(shù)值和時(shí)間,看起來更加直觀。</p><p>  測(cè)量溫濕度的關(guān)鍵是溫濕度傳感器。過去測(cè)量溫度與濕度是分開的。隨著技術(shù)的進(jìn)步和人們生活的需要出現(xiàn)了溫濕度傳感器。溫度傳感器的發(fā)展經(jīng)歷了3個(gè)階段:傳統(tǒng)的分立式溫度

24、傳感器、模擬集成溫度傳感器、智能集成溫度傳感器。目前,國(guó)際上新型溫度傳感器正從模擬式向數(shù)字式、從集成化向智能化、網(wǎng)絡(luò)化的方向發(fā)展。濕度傳感器也是經(jīng)歷了這樣一個(gè)階段逐漸走向數(shù)字智能化。</p><p>  總之,無論在日常生活中還是在工業(yè)、農(nóng)業(yè)方面都離不開對(duì)周圍環(huán)境進(jìn)行溫濕度的測(cè)量。因此,研究溫濕度的測(cè)量具有非常重要的意義。</p><p>  2.2設(shè)計(jì)任務(wù)及要求</p>&

25、lt;p>  設(shè)計(jì)一個(gè)以單片機(jī)為核心的多功能溫濕度測(cè)量系統(tǒng),可實(shí)現(xiàn)的功能為:</p><p>  (1)有日期,時(shí)間等顯示功能;</p><p>  (2)用戶還可自行設(shè)置合適的溫度;</p><p>  (3)超出設(shè)置的合適溫度時(shí),蜂鳴器會(huì)提示;</p><p>  (4)可存儲(chǔ)并查看溫濕度。</p><p>

26、  2.3 設(shè)計(jì)總體方案及方案論證</p><p>  按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由7個(gè)模塊組成:主控制器模塊,溫濕度傳感模塊,鍵盤輸入模塊,時(shí)鐘模塊,存儲(chǔ)模塊,LCD顯示電路及蜂鳴器模塊。</p><p>  主控制器的功能有單片機(jī)來完成,主要負(fù)責(zé)處理由溫濕度傳感器、時(shí)鐘芯片傳遞來的數(shù)據(jù),并把處理好的數(shù)據(jù)送向顯示模塊,以及把數(shù)據(jù)發(fā)給存儲(chǔ)芯片和接收存儲(chǔ)芯片發(fā)來的數(shù)據(jù)。溫濕傳感器主要用

27、來采集周圍環(huán)境參數(shù),并把所采集來的參數(shù)送往主控制器。按鍵電路主要用來完成時(shí)間的調(diào)整,設(shè)定溫濕度適宜范圍,存儲(chǔ)和查詢溫濕度。這里需要6個(gè)按鍵,兩個(gè)用來調(diào)整時(shí)間,兩個(gè)用來設(shè)定溫濕度適宜范圍,還有兩個(gè)用來存儲(chǔ)和查詢溫濕度。蜂鳴器模塊是由一個(gè)蜂鳴器組成,用來判斷周圍環(huán)境的溫度是否超出設(shè)定值了,當(dāng)溫度超出設(shè)置的預(yù)警值時(shí),蜂鳴器會(huì)發(fā)出聲響。</p><p><b>  2.4器件的選擇</b></

28、p><p>  2.4.1主控制器芯片</p><p>  AT89C52是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,AT89C52單片機(jī)在電子行業(yè)中有著廣

29、泛的應(yīng)用。</p><p>  AT89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2 個(gè)讀寫口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的 Flash存儲(chǔ)器可有效地降低開發(fā)成本。</p><p>  AT89C52為8

30、位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電

31、路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0~P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0 端口(32~39 腳)被定義為N1 功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及28 腳定義為握手信號(hào)功能端口,連接主板CPU 的相應(yīng)功

32、能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。</p><p>  P0:P0 口是一組8 位漏極開路型雙向I/O 口, 也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8 個(gè)TTL邏輯門電路,對(duì)端口P0 寫“1”時(shí),可作為高阻抗輸入端用。</p><p>  在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8 位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上

33、拉電阻。在Flash編程時(shí),P0 口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。</p><p>  P1:P1口 是一個(gè)帶內(nèi)部上拉電阻的8 位雙向I/O 口, P1 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL 邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。&l

34、t;/p><p>  與AT89C51 不同之處是,P1.0 和P1.1 還可分別作為定時(shí)/計(jì)數(shù)器2 的外部計(jì)數(shù)輸入(P1.0/T2)和輸入(P1.1/T2EX),F(xiàn)lash 編程和程序校驗(yàn)期間,P1 接收低8 位地址,其第二功能如表2.1所示。</p><p>  表2.1 P1.0和P1.1的第二功能</p><p>  P2:P2口是一個(gè)帶有內(nèi)部上拉電阻的

35、8 位雙向I/O 口,P2 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL 邏輯門電路。對(duì)端口P2 寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。</p><p>  在訪問外部程序存儲(chǔ)器或16 位地?cái)?shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX @DPTR 指令)時(shí),P2 口送出高8 位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存

36、儲(chǔ)器(如執(zhí)行MOVX@RI 指令)時(shí),P2 口輸出P2鎖存器的內(nèi)容。</p><p>  Flash編程或校驗(yàn)時(shí),P2亦接收高位地址和一些控制信號(hào)。</p><p>  P3:P3 口是一組帶有內(nèi)部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL 邏輯門電路。對(duì)P3 口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時(shí),被外部拉低的P3 口將用

37、上拉電阻輸出電流(IIL)。</p><p>  P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能,如表2.2所示。</p><p>  表2.2 P3的第二功能</p><p>  P3 口還接收一些用于Flash閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。</p><p>  AT89C52的電路仿真圖如圖2.1。<

38、/p><p>  圖2.1 AT89C52仿真圖</p><p>  2.4.2溫濕度傳感器</p><p>  溫濕度傳感器采用DHT22,DHT22數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電容式感濕元件和一個(gè)NTC測(cè)溫元件,并與一個(gè)

39、高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT22傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式儲(chǔ)存在OTP內(nèi)存中,傳感器內(nèi)部在檢測(cè)信號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡(jiǎn)易快捷。超小的體積、極低的功耗,信號(hào)傳輸距離可達(dá)20米以上,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場(chǎng)合的最佳選則。產(chǎn)品為4針單排引腳封裝。連接方便,特殊封裝形式可根據(jù)用戶需求

40、而提供。其引腳功能如圖2.2所示。</p><p>  圖2.2 DHT22的引腳</p><p><b>  2.4.3時(shí)鐘芯片</b></p><p>  時(shí)鐘芯片采用DS1302,DS1302 是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作

41、電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時(shí)提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。其引腳如圖2.3所示。</p><p>  圖2.3 DS1302的引腳圖&l

42、t;/p><p><b>  2.4.4存儲(chǔ)芯片</b></p><p>  本次設(shè)計(jì)采用的是AT24C02存儲(chǔ)模塊,AT24C02是一個(gè)2K位串行CMOS E2PROM, 內(nèi)部含有256個(gè)8位字節(jié),CATALYST公司的先進(jìn)CMOS技術(shù)實(shí)質(zhì)上減少了器件的功耗。AT24C02有一個(gè)8字節(jié)頁寫緩沖器。該器件通過IIC總線接口進(jìn)行操作,有一個(gè)專門的寫保護(hù)功能。</p&

43、gt;<p>  AT24C02支持I2C,總線數(shù)據(jù)傳送協(xié)議I2C,總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器。任何從總線接收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送是由產(chǎn)生串行時(shí)鐘和所有起始停止信號(hào)的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)(發(fā)送或接收)的模式,由于A0、A1和A2可以組成000~111八種情況,即通過器件地址輸入端A0、A1和A2可以實(shí)現(xiàn)將最多8個(gè)AT24C02器件連接到總

44、線上,通過進(jìn)行不同的配置進(jìn)行選擇器件。其封裝及引腳如圖2.4所示。</p><p>  圖2.4 AT24C02的三種封裝圖及引腳圖</p><p>  2.4.5 LCD12864</p><p>  帶中文字庫(kù)的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128

45、×64, 內(nèi)置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集.利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面。可以顯示8×4行16×16點(diǎn)陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模

46、塊。</p><p>  主要技術(shù)參數(shù)和顯示特性:電源:VDD 3.3V~+5V(內(nèi)置升壓電路,無需負(fù)壓);顯示內(nèi)容:128列× 64行;顯示顏色:黃綠屏,藍(lán)屏;顯示角度:6:00鐘直視;LCD類型:STN;與MCU接口:8位并口或串行;配置LED背光;多種軟件功能:光標(biāo)顯示、畫面移位、自定義字符、睡眠模式等。</p><p>  12864的引腳功能如表2.3所示:</p

47、><p>  表2.3 LCD12864的引腳功能</p><p>  2.5溫濕度測(cè)量的方法及分析</p><p>  DHT22是一個(gè)單總線接口的數(shù)字溫濕度傳感器。它是四針單排封裝,一個(gè)接電源,一個(gè)接地線,DATA接口直接和單片機(jī)的P2^7相連,另外一個(gè)是空引腳,不接線。連接線長(zhǎng)度短于20米時(shí)用5K上拉電阻。單片機(jī)通過P2^7向DHT22發(fā)送命令,DHT22

48、接收到命令后做出相應(yīng)的應(yīng)答。由于DHT22內(nèi)部包含一個(gè)14位A/D轉(zhuǎn)換器,所以單片機(jī)接收到就是數(shù)字信號(hào),只需要做相應(yīng)的處理就能得到所需要的數(shù)據(jù)。這里減少了很多外部的電路的連接,用起來比較方便。</p><p>  3. 硬件電路的設(shè)計(jì)</p><p><b>  3.1總體結(jié)構(gòu)框圖</b></p><p>  圖3.1 總結(jié)構(gòu)框圖<

49、;/p><p>  3.2 主控制電路和測(cè)溫濕電路</p><p>  本次硬件設(shè)計(jì)的核心就是AT89C52,其他部位的硬件都是圍繞著它來設(shè)計(jì)的。數(shù)字溫濕度傳感器DHT22的DATA口與AT89C52的P2^7口相連。按鍵電路就是7個(gè)按鍵分別與AT89C52的P3^2,P3^3,P2^3,P2^4,P2^5,P0^0和P0^1口相連。當(dāng)有按鍵按下時(shí)單片機(jī)接收到有效的信號(hào),S1鍵和S2鍵用來調(diào)整

50、溫度報(bào)警范圍,S1鍵是增加溫度值,S2鍵是減少溫度值;S3,S4和S5鍵是用來調(diào)整時(shí)間和日期的,S3鍵用來移動(dòng)設(shè)置的光標(biāo),S4鍵是增加鍵,S5鍵是減少鍵;S6和S7鍵是用來保存和查詢溫濕度的,S6鍵用來查詢溫濕度和退出界面,S7鍵用來保存溫濕度和日期。報(bào)警電路就是蜂鳴器與單片機(jī)的P2^6口相連,當(dāng)溫度超過設(shè)置的預(yù)警值時(shí),蜂鳴器就會(huì)發(fā)出警報(bào)。其電路接線圖如圖3.2所示。</p><p>  圖3.2 DHT

51、22電路接線圖</p><p>  3.3 存儲(chǔ)模塊與時(shí)鐘模塊電路</p><p>  本次設(shè)計(jì)使用的存儲(chǔ)模塊是以AT24C02存儲(chǔ)芯片為核心的,該模塊有四個(gè)引腳,其中的VCC和GND引腳分別接電源和接地,SDA引腳與單片機(jī)的P3^6口連接,SCL引腳與單片機(jī)的P3^7口連接,存儲(chǔ)芯片主要是用來存儲(chǔ)想要保存的溫濕度。時(shí)鐘模塊是以DS1302芯片為核心的,該模塊有五個(gè)引腳,其中VCC引腳懸空

52、,GND引腳接地,CLK引腳與單片機(jī)的P2^0口連接,DAT引腳與單片機(jī)的P2^1口連接,RST引腳與單片機(jī)的P2^2口連接,時(shí)鐘芯片主要是用來提供秒分時(shí)日日期月年的信息,并具有掉電存儲(chǔ)的功能。</p><p>  DS1302的電路接線圖如圖3.3所示:</p><p>  圖3.3 DS1302的電路接線圖</p><p>  AT24C02的電路接線圖

53、如圖3.4所示:</p><p>  圖3.4 AT24C02電路圖</p><p>  3.4 顯示模塊電路</p><p>  本次設(shè)計(jì)采用的顯示屏是LCD12864,LCD12864一共有20個(gè)引腳,其中RS引腳與單片機(jī)的P0^3口連接,R/W引腳與P0^4口連接,E引腳與P0^5口連接,PSB引腳與P0^6口連接,D0~D7分別與P1^0~P1^7連接

54、,其他的電源口、接地口和空引腳分別對(duì)應(yīng)相應(yīng)的引腳或懸空。LCD顯示的時(shí)候分為四行,第一行顯示日期,第二行顯示時(shí)間,第三行顯示濕度,第四行顯示溫度和預(yù)警值。12864的接線電路圖如圖3.5所示。</p><p>  圖3.5 12864接線電路圖</p><p>  4.  軟件設(shè)計(jì)及分析</p><p><b>  4.1程序流程圖<

55、;/b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  N</b></p><p><b>  Y</b></p><p>  圖4.1 程序流程圖<

56、/p><p>  4.2 DHT22工作原理</p><p>  DHT22為單總線接口,DATA 用于微處理器與DHT22之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時(shí)間5ms左右,具體格式在下面說明,當(dāng)前數(shù)據(jù)傳輸為40bit,高位先出。如下:</p><p>  數(shù)據(jù)格式: 40bit數(shù)據(jù)=16bit濕度數(shù)據(jù)+16bit溫度數(shù)據(jù)+8bit校驗(yàn)和</p>

57、<p>  例子: 接收40bit數(shù)據(jù)如下:</p><p>  0000 0010 1000 1100 0000 0001 0101 1111 1110 1110</p><p>  濕度數(shù)據(jù)溫度數(shù)據(jù)校驗(yàn)和</p><p>  濕度高8位+濕度低8位+溫度高8位+溫度低8位=的末8位=校驗(yàn)和</p><p>  例如:0000

58、 0010+1000 1100+0000 0001+0101 1111=1110 1110</p><p>  濕度=65.2%RH 溫度=35.1℃</p><p>  當(dāng)溫度低于0℃時(shí)溫度數(shù)據(jù)的最高位置1。</p><p>  例如:-10.1℃表示為1000 0000 0110 0101</p><p>  用戶主機(jī)(MCU)發(fā)送一次開

59、始信號(hào)后,DHT22從低功耗模式轉(zhuǎn)換到高速模式,等待主機(jī)開始信號(hào)結(jié)束后,DHT22發(fā)送響應(yīng)信號(hào),送出40bit的數(shù)據(jù),并觸發(fā)一次信號(hào)采集。如圖4.2所示:</p><p>  圖4.2 接收開始信號(hào)</p><p>  空閑時(shí)總線為高電平,通訊開始時(shí)主機(jī)(MCU)拉低總線500us后釋放總線,延時(shí)20-40us后主機(jī)開始檢測(cè)從機(jī)(DHT22)的響應(yīng)信號(hào)。從機(jī)的響應(yīng)信號(hào)是一個(gè)80us

60、左右的低電平,隨后從機(jī)在拉高總線80us左右代表即將進(jìn)入數(shù)據(jù)傳送。如圖4.3所示:</p><p>  圖4.3 進(jìn)入數(shù)據(jù)傳送</p><p>  高電平后就是數(shù)據(jù)位,每1bit數(shù)據(jù)都是由一個(gè)低電平時(shí)隙和一個(gè)高電平組成。低電平時(shí)隙就是一個(gè)50us左右的低電平,它代表數(shù)據(jù)位的起始,其后的高電平的長(zhǎng)度決定數(shù)據(jù)位所代表的數(shù)值,較長(zhǎng)的高電平代表1,較短的高電平代表0。共40bit數(shù)據(jù),當(dāng)最

61、后一Bit數(shù)據(jù)傳送完畢后,從機(jī)將再次拉低總線50us左右,隨后釋放總線,由上拉電阻拉高。</p><p>  數(shù)字1信號(hào)表示方法如圖4.4所示:</p><p>  圖4.4 數(shù)字1信號(hào)表示方法</p><p>  數(shù)字0信號(hào)表示方法.如圖4.5所示:</p><p>  圖4.5 數(shù)字0信號(hào)表示方法</p>&

62、lt;p>  DHT22的的電氣特性如表4.1所示:</p><p>  表4.1 DHT22的電氣特性</p><p>  VDD=5V,T = 25℃,除非特殊標(biāo)注</p><p>  注:采樣周期間隔不得低于2秒鐘(建議2秒以上)</p><p><b>  讀八位數(shù)據(jù)子程序:</b></p&g

63、t;<p>  void COM(void)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<8;i++) </p><p><b>  {</b></p&g

64、t;<p><b>  FLAG=2;</b></p><p>  while((!DATA)&&FLAG++);</p><p>  Delay_10us();</p><p>  Delay_10us();</p><p>  Delay_10us();</p><

65、p><b>  u8temp=0;</b></p><p><b>  if(DATA)</b></p><p><b>  u8temp=1;</b></p><p><b>  FLAG=2;</b></p><p>  while((DATA)

66、&&FLAG++);</p><p>  if(FLAG==1)break;</p><p>  comdata<<=1;</p><p>  comdata|=u8temp; </p><p><b>  }</b></p><p><b>

67、;  }</b></p><p><b>  溫濕度讀取子程序:</b></p><p>  void RH(void)</p><p><b>  {</b></p><p>  uchar T_data_H_temp,T_data_L_temp;</p><p&

68、gt;  uchar RH_data_H_temp,RH_data_L_temp,checkdata_temp;</p><p><b>  DATA=0;</b></p><p><b>  Delay(5);</b></p><p><b>  DATA=1;</b></p>&l

69、t;p>  Delay_10us();</p><p>  Delay_10us();</p><p>  Delay_10us();</p><p>  Delay_10us();</p><p>  DATA=1; </p><p>  if(!DATA) </p><p>

70、<b>  {</b></p><p><b>  FLAG=2;</b></p><p>  while((!DATA)&&FLAG++);</p><p><b>  FLAG=2;</b></p><p>  while((DATA)&&F

71、LAG++);</p><p><b>  COM();</b></p><p>  RH_data_H_temp=comdata;</p><p><b>  COM();</b></p><p>  RH_data_L_temp=comdata;</p><p><

72、b>  COM();</b></p><p>  T_data_H_temp=comdata;</p><p><b>  COM();</b></p><p>  T_data_L_temp=comdata;</p><p><b>  COM();</b></p>

73、<p>  checkdata_temp=comdata;</p><p>  DATA=1; u8temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);</p><p>  if(u8temp==checkdata_temp)</p><p><b>  {<

74、/b></p><p>  RH_data_H=RH_data_H_temp;</p><p>  RH_data_L=RH_data_L_temp;</p><p>  T_data_H=T_data_H_temp;</p><p>  T_data_L=T_data_L_temp;</p><p>  che

75、ckdata=checkdata_temp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  濕度轉(zhuǎn)換子程序:</b></p><p&g

76、t;  void read_RH(void)</p><p><b>  {</b></p><p><b>  RH();</b></p><p>  TE_RH[0]=(RH_data_H*256+RH_data_L)/100+'0';</p><p>  TE_RH[1]=(R

77、H_data_H*256+RH_data_L)%100/10+'0';</p><p>  TE_RH[2]='.';</p><p>  TE_RH[3]=(RH_data_H*256+RH_data_L)%100%10+'0';</p><p><b>  }</b></p>

78、<p><b>  溫濕度轉(zhuǎn)換子程序:</b></p><p>  void read_TE_RH(void)</p><p><b>  {</b></p><p>  uchar Temper_shi_ge;</p><p>  read_RH();</p><

79、p>  set_Temper_chu();</p><p>  if((T_data_H&0x8f)!=0x00) //負(fù)溫度</p><p><b>  {</b></p><p>  T_data_H=T_data_H&0x7f;</p><p>  TEMPER[0]='-'

80、;</p><p>  TEMPER[1]=(T_data_H*256+T_data_L)/100+'0';</p><p>  TEMPER[2]=(T_data_H*256+T_data_L)%100/10+'0';</p><p>  TEMPER[3]='.';</p><p>  TE

81、MPER[4]=(T_data_H*256+T_data_L)%100%10+'0';</p><p>  Temper_shi_ge=(T_data_H*256+T_data_L)/100*10 + (T_data_H*256+T_data_L)%100/10;</p><p>  Temper_reg[1]=Temper_chu/10+'0';</

82、p><p>  Temper_reg[2]=Temper_chu%10+'0';</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  TEMPER

83、[0]=(T_data_H*256+T_data_L)/100+'0';</p><p>  TEMPER[1]=(T_data_H*256+T_data_L)%100/10+'0';</p><p>  TEMPER[2]='.';</p><p>  TEMPER[3]=(T_data_H*256+T_data_L

84、)%100%10+'0';</p><p>  Temper_shi_ge=(T_data_H*256+T_data_L)/100*10+ (T_data_H*256+T_data_L)%100/10;</p><p>  Temper_reg[0]=Temper_chu/10+'0';</p><p>  Temper_reg[1]

85、=Temper_chu%10+'0';</p><p><b>  }</b></p><p>  if(Temper_shi_ge > Temper_chu)</p><p><b>  {</b></p><p><b>  beep=0;</b>&

86、lt;/p><p>  delayms(10);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  beep=1;</b></

87、p><p><b>  }</b></p><p><b>  }</b></p><p>  4.3 DS1302工作原理</p><p>  DS1302的控制字如表4.2所示:</p><p>  表4.2 DS1302的控制字</p><

88、p>  控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6:如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1(A4~A0):指示操作單元的地址;位0(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作??刂谱挚偸菑淖畹臀婚_始輸出。在控制字指令輸入后的下一個(gè) SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入 DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令

89、后的下一個(gè) SCLK脈沖的下降沿,讀出 DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。</p><p>  DS1302的時(shí)序:</p><p>  圖4.6 單個(gè)字節(jié)讀</p><p>  圖4.7 單個(gè)字節(jié)寫</p><p>  如以上圖4.6和圖4.7所示:</p><p>  CE 輸入驅(qū)

90、動(dòng)高啟動(dòng)所有的數(shù)據(jù)傳輸。CE 輸入有兩個(gè)功能。首先,CE 打開控制邏輯,允許訪問的移位寄存器的地址/命令序列。其次,CE 提供了一個(gè)終止單字節(jié)或多字節(jié)數(shù)據(jù)傳輸方法。一個(gè)時(shí)鐘周期是由一個(gè)下降沿之后的上升沿序列。對(duì)于數(shù)據(jù)傳輸而言,數(shù)據(jù)必須在有效的時(shí)鐘的上升沿輸入,在時(shí)鐘的下降沿輸出。如果CE 為低,所有的I/ O 引腳變?yōu)楦咦杩範(fàn)顟B(tài),數(shù)據(jù)傳輸終止。</p><p><b>  對(duì)于數(shù)據(jù)輸入:</b&g

91、t;</p><p>  開始的8 個(gè)SCLK 周期,輸入寫命令字節(jié),數(shù)據(jù)字節(jié)在后8 個(gè)SCLK 周期的上升沿輸入。數(shù)據(jù)輸入位0 開始。</p><p><b>  對(duì)于數(shù)據(jù)輸出:</b></p><p>  開始的8 個(gè)SCLK 周期,輸入一個(gè)讀命令字節(jié),數(shù)據(jù)字節(jié)在后8 個(gè)SCLK 周期的下降沿輸出。注意,第一個(gè)數(shù)據(jù)字節(jié)的第一個(gè)下降沿發(fā)生后,

92、命令字的最后一位被寫入,命令字節(jié)的最后一位被寫入。當(dāng)CE 仍為高時(shí)。如果還有額外的SCLK 周期,DS1302 將重新發(fā)送數(shù)據(jù)字節(jié),這使DS1302 具有連續(xù)突發(fā)讀取的能力。</p><p>  DS1302的寫字節(jié)子程序:</p><p>  void DS1302WriteByte(uchar dat)</p><p><b>  {</b>

93、;</p><p><b>  uchar i;</b></p><p><b>  SCLK=0;</b></p><p>  delayus(2);</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b>&

94、lt;/p><p>  SDA=dat&0x01;</p><p>  delayus(2);</p><p><b>  SCLK=1;</b></p><p>  delayus(2);</p><p><b>  SCLK=0;</b></p><

95、;p><b>  dat>>=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  DS1302的讀字節(jié)子程序:</p><p>  uchar DS1302ReadByte()</p>

96、<p><b>  {</b></p><p>  uchar i,dat;</p><p>  delayus(2);</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  da

97、t>>=1;</b></p><p>  if(SDA==1)</p><p>  dat|=0x80;</p><p><b>  SCLK=1;</b></p><p>  delayus(2);</p><p><b>  SCLK=0;</b>

98、</p><p>  delayus(2);</p><p><b>  }</b></p><p>  return dat;</p><p><b>  }</b></p><p>  DS1302的讀數(shù)據(jù)子程序:</p><p>  uchar

99、DS1302Read(uchar cmd)</p><p><b>  {</b></p><p>  uchar dat;</p><p><b>  RST=0;</b></p><p><b>  SCLK=0;</b></p><p><b

100、>  RST=1;</b></p><p>  DS1302WriteByte(cmd);</p><p>  dat=DS1302ReadByte();</p><p><b>  SCLK=1;</b></p><p><b>  RST=0;</b></p>&

101、lt;p>  return dat;</p><p><b>  }</b></p><p>  DS1302的寫數(shù)據(jù)子程序:</p><p>  void DS1302Write(uchar cmd, uchar dat)</p><p><b>  {</b></p><

102、;p><b>  RST=0;</b></p><p><b>  SCLK=0; </b></p><p><b>  RST=1;</b></p><p>  DS1302WriteByte(cmd);</p><p>  DS1302WriteByte(dat);&

103、lt;/p><p><b>  SCLK=1;</b></p><p><b>  RST=0;</b></p><p><b>  }</b></p><p>  4.4 AT24C02工作原理</p><p>  AT24C02的使用方法:</p&

104、gt;<p>  時(shí)鐘及數(shù)據(jù)傳輸:SDA引腳通常被外圍器件拉高。SDA引腳的數(shù)據(jù)應(yīng)在 SCL 為低時(shí)變化;當(dāng)數(shù)據(jù)在SCL 為高時(shí)變化,將視為下文所述的一個(gè)起始或停止命令。</p><p>  起始命令:當(dāng) SCL 為高,SDA由高到低的變化被視為起始命令,必須以起始命令作為任何一次讀/寫操作命令的開始。</p><p>  停止命令:當(dāng) SCL為高,SDA 由低到高的變化被視

105、為停止命令,在一個(gè)讀操作后,停止命令會(huì)使 EEPROM 進(jìn)入等待態(tài)低功耗模式。</p><p>  應(yīng)答:所有的地址和數(shù)據(jù)字節(jié)都是以 8 位為一組串行輸入和輸出的。每收到一組 8 位的數(shù)據(jù)后,EEPROM都會(huì)在第9 個(gè)時(shí)鐘周期時(shí)返回應(yīng)答信號(hào)。每當(dāng)主控器件接收到一組8 位的數(shù)據(jù)后,應(yīng)當(dāng)在第9 個(gè)時(shí)鐘周期向EEPROM 返回一個(gè)應(yīng)答信號(hào)。收到該應(yīng)答信號(hào)后EEPROM 會(huì)繼續(xù)輸出下一組8 位的數(shù)據(jù)。若此時(shí)沒有得到主控器

106、件的應(yīng)答信號(hào),EEPROM 會(huì)停止讀出數(shù)據(jù),直到主控器件返回一個(gè)停止命令來結(jié)束讀周期。</p><p>  等待模式:AT24C02特有一個(gè)低功耗的等待模式??梢酝ㄟ^以下方法進(jìn)入該模式:(1)上電;(2)收到停止位并且結(jié)束所有的內(nèi)部操作后。</p><p>  器件復(fù)位:在協(xié)議中斷、下電或系統(tǒng)復(fù)位后,器件可通過以下步驟復(fù)位:(1)連續(xù)輸入 9 個(gè)時(shí)鐘;(2)在每個(gè)時(shí)鐘周期中確保當(dāng)SCL 為

107、高時(shí)SDA 也為高;(3)建立一個(gè)起始條件。</p><p>  總線時(shí)序圖如圖4.8所示:SCL:串行時(shí)鐘輸入,SDA:串行輸入/輸出</p><p>  圖4.8 總線時(shí)序圖</p><p>  寫周期時(shí)序圖如圖4.9所示:</p><p>  注:寫周期Twr是指一個(gè)寫序列最后一個(gè)有效停止命令到內(nèi)部擦/寫周期結(jié)束的時(shí)間。<

108、/p><p>  圖4.9 寫周期時(shí)序</p><p>  數(shù)據(jù)有效時(shí)序圖如圖4.10所示:</p><p>  圖4.10 數(shù)據(jù)有效時(shí)序圖</p><p>  起始、停止命令定義如圖4.11所示:</p><p>  圖4.11 起始命令、停止命令時(shí)序圖</p><p> 

109、 輸出應(yīng)答如圖4.12所示:</p><p>  圖4.12 輸出應(yīng)答時(shí)序圖</p><p><b>  發(fā)送字節(jié)子程序:</b></p><p>  void i2c_sendbyte(unsigned char bt)</p><p><b>  {</b></p><

110、;p>  unsigned char i;</p><p>  for(i=0; i<8; i++)</p><p><b>  { </b></p><p>  if (bt & 0x80) </p><p><b>  SDO = 1;</b></p><

111、;p><b>  else </b></p><p><b>  SDO = 0;</b></p><p><b>  nops();</b></p><p><b>  SCL = 1;</b></p><p><b>  bt <

112、<= 1;</b></p><p>  nops(); </p><p><b>  SCL = 0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

113、;  接收字節(jié)子程序:</b></p><p>  unsigned char i2c_recbyte()</p><p><b>  {</b></p><p>  unsigned char dee, i;</p><p>  for (i=0; i<8; i++)</p><p

114、><b>  {</b></p><p>  SCL = 1; </p><p><b>  nops();</b></p><p>  dee <<= 1;</p><p><b>  if (SDO) </b></p><p>

115、;  dee = dee | 0x01;</p><p><b>  SCL = 0;</b></p><p><b>  nops();</b></p><p><b>  }</b></p><p>  return dee;</p><p><

116、;b>  }</b></p><p><b>  寫字節(jié)子程序:</b></p><p>  void i2c_writebyte(unsigned char add,unsigned char dat)</p><p><b>  {</b></p><p>  i2c_star

117、t();</p><p>  i2c_sendbyte(SLAVEADDR);</p><p>  i2c_waitACK();</p><p>  i2c_sendbyte(add);</p><p>  i2c_waitACK();</p><p>  i2c_sendbyte(dat);</p>&

118、lt;p>  i2c_waitACK();</p><p>  i2c_stop();</p><p>  delayus(20);</p><p><b>  }</b></p><p><b>  讀字節(jié)子程序:</b></p><p>  unsigned cha

119、r i2c_readbyte(unsigned char add)</p><p><b>  {</b></p><p>  unsigned char hep;</p><p>  i2c_start();</p><p>  i2c_sendbyte(SLAVEADDR); </p><p>

120、;  i2c_waitACK();</p><p>  i2c_sendbyte(add); </p><p>  i2c_waitACK();</p><p>  i2c_start();</p><p>  i2c_sendbyte(SLAVEADDR+1); </p><p>  i2c_waitACK();&

121、lt;/p><p>  hep = i2c_recbyte();</p><p>  i2c_ACK(0); </p><p>  i2c_stop(); </p><p>  return hep;</p><p><b>  }</b></p><p><b> 

122、 寫數(shù)據(jù)子程序:</b></p><p>  void i2c_serwrite(unsigned char *p, unsigned char add, unsigned char num)</p><p><b>  {</b></p><p>  unsigned char n;</p><p>  i

123、2c_start();</p><p>  i2c_sendbyte(SLAVEADDR);</p><p>  i2c_waitACK();</p><p>  i2c_sendbyte(add);</p><p>  i2c_waitACK();</p><p>  for(n=0; n<num; n++)&

124、lt;/p><p><b>  {</b></p><p>  i2c_sendbyte(*p);</p><p>  i2c_waitACK();</p><p><b>  p++;</b></p><p><b>  }</b></p>

125、<p>  i2c_stop();</p><p>  delayus(20); </p><p><b>  }</b></p><p><b>  讀數(shù)據(jù)子程序:</b></p><p>  void i2c_serread(unsigned char *k, unsigned cha

溫馨提示

  • 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. 眾賞文庫(kù)僅提供信息存儲(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)論