2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p><b>  引言1</b></p><p><b>  1 器件簡(jiǎn)介2</b></p><p>  1.1 AT89S52簡(jiǎn)介2<

2、/p><p>  1.1.1 主要性能2</p><p>  1.1.2 引腳說(shuō)明3</p><p>  1.2 DS18B20簡(jiǎn)介5</p><p>  1.2.1 主要特性5</p><p>  1.2.2 DS18B20的外形和內(nèi)部結(jié)構(gòu)6</p><p>  1.2.3 DS18B2

3、0引腳定義7</p><p><b>  2 系統(tǒng)設(shè)計(jì)7</b></p><p>  2.1功能與設(shè)計(jì)方案7</p><p>  2.1.1 功能要求7</p><p>  2.1.2 設(shè)計(jì)方案7</p><p>  2.1.2.1 方案論證8</p><p&g

4、t;  2.1.2.2 總體設(shè)計(jì)框圖8</p><p>  2.2 系統(tǒng)硬件設(shè)計(jì)8</p><p><b>  3 程序設(shè)計(jì)10</b></p><p>  3.1 下位機(jī)程序10</p><p>  3.1.1 DS18B20讀寫模塊10</p><p>  3.1.2 數(shù)碼管顯示模

5、塊11</p><p>  3.1.3 RS232串口通訊模塊12</p><p>  3.2 上位機(jī)程序12</p><p>  3.2.1 串口初始化12</p><p>  3.2.2 串口觸發(fā)接收程序13</p><p>  3.2.3 界面設(shè)計(jì)和數(shù)據(jù)分析統(tǒng)計(jì)程序14</p><

6、p><b>  結(jié)束語(yǔ)15</b></p><p><b>  附錄16</b></p><p><b>  致謝30</b></p><p><b>  作者簡(jiǎn)介31</b></p><p><b>  聲明31</b&g

7、t;</p><p>  基于51單片機(jī)的溫度數(shù)據(jù)采集系統(tǒng)</p><p>  [摘 要]溫度是一種被廣泛應(yīng)用于生產(chǎn)和生活的重要的物理量。在許多應(yīng)用領(lǐng)域,研制適當(dāng)和高效的測(cè)溫系統(tǒng)是十分必要的。本文結(jié)合實(shí)際使用經(jīng)驗(yàn),設(shè)計(jì)了一個(gè)基于51單片機(jī)和DS18B20溫度傳感器的近距離溫度數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)主要包括:溫度傳感器、單片機(jī)與PC RS232串行接口通訊、VB程序、模數(shù)轉(zhuǎn)換等部分。在本文設(shè)計(jì)

8、的中,為了實(shí)現(xiàn)人機(jī)對(duì)話和及時(shí)了解系統(tǒng)的運(yùn)行狀況,特給本系統(tǒng)增加了告警功能。該系統(tǒng)可應(yīng)用于倉(cāng)庫(kù)測(cè)溫、樓宇空調(diào)控制和生產(chǎn)過(guò)程監(jiān)控等領(lǐng)域。</p><p> ?。坳P(guān)鍵詞]溫度測(cè)量;DS18B20;單片機(jī);Visual Basic;</p><p>  The temperature data acquisition system based 51 MCU</p>

9、<p>  Abstract:Temperature is an important physical quantity that widely used in production and living. In many applications, it's very necessary to develop appropriate and efficient temperature measuring syste

10、m. Combining with the actual using experience, this article introduces a short distance temperature data acquisition system which designs based on 51MCU and DS18B20. This system mainly includes temperature sensor, MCU, P

11、C RS232 Serial interface, VB programming, and DAC. In this design, in order </p><p>  Key words:temperature Measurement;DS18B20;MCU;Visual Basic</p><p><b>  引言</b></p><p&g

12、t;  在生產(chǎn)和日常生活中,溫度的測(cè)量及控制十分重要。實(shí)時(shí)溫度檢測(cè)系統(tǒng)在各個(gè)方面的應(yīng)用十分廣泛:消防電氣的非破壞性溫度檢測(cè),大型電力、通訊設(shè)備的過(guò)熱故障預(yù)知檢測(cè),空調(diào)系統(tǒng)的溫度檢測(cè),各類機(jī)械組件組件的過(guò)熱預(yù)警,醫(yī)療相關(guān)設(shè)備的溫度測(cè)試…等等【1】。由此可見實(shí)時(shí)溫度檢測(cè)系統(tǒng)應(yīng)用十分廣闊。</p><p>  隨著科學(xué)技術(shù)的飛速發(fā)展,電子學(xué)的發(fā)展也越來(lái)越快,帶動(dòng)了大批相關(guān)產(chǎn)業(yè)的發(fā)展,其應(yīng)用范圍也越來(lái)越廣泛。如今,計(jì)算機(jī)

13、的使用領(lǐng)域已經(jīng)擴(kuò)展到了各個(gè)行業(yè),在這種形勢(shì)下,要想適應(yīng)當(dāng)今社會(huì)需求,就必須設(shè)計(jì)一種基于PC技術(shù)的新式電子儀器,以滿足社會(huì)更高層次的需求。近年來(lái),單片機(jī)發(fā)展同樣十分迅速,一個(gè)以嵌入式微機(jī)應(yīng)用為主的新技術(shù)革命浪潮正在蓬勃興起,單片機(jī)已經(jīng)滲透到工業(yè)、農(nóng)業(yè)、國(guó)防、科研等各個(gè)領(lǐng)域。傳統(tǒng)的溫度采集方式不僅耗時(shí),而且精度較低,遠(yuǎn)不能滿足各行業(yè)對(duì)于溫度數(shù)據(jù)高精度、高可靠性的要求。單片機(jī)和高精密的數(shù)字溫度傳感器的出現(xiàn)使得溫度數(shù)據(jù)的處理和采集得到了很好的解

14、決?;趩纹瑱C(jī)和數(shù)字溫度傳感器的溫度測(cè)量系統(tǒng),不但方便快捷,成本較低,而且大幅度提高了測(cè)量的精度【2】。</p><p>  本文介紹了一種基于51單片機(jī)和DS18B20數(shù)字溫度傳感器實(shí)現(xiàn)實(shí)時(shí)溫度數(shù)據(jù)采集和處理的一種設(shè)計(jì)方案。其中涉及了傳感器、數(shù)據(jù)采集、單片機(jī)數(shù)據(jù)處理、單片機(jī)和PC的串口通訊、VB編程等一系列相關(guān)理論。本設(shè)計(jì)運(yùn)用主從式思想,由一臺(tái)上位機(jī)(PC微型計(jì)算機(jī))處理和顯示溫度,一臺(tái)下位機(jī)(單片機(jī))進(jìn)行溫度

15、數(shù)據(jù)采集,組成兩級(jí)式溫度測(cè)量的檢測(cè)系統(tǒng)。該系統(tǒng)采用 RS-232串行通訊標(biāo)準(zhǔn),通過(guò)上位機(jī)(PC)控制下位機(jī)(單片機(jī))進(jìn)行實(shí)時(shí)溫度采集。溫度值既可以送回主控PC進(jìn)行數(shù)據(jù)處理,由顯示器顯示,也可以由下位機(jī)單獨(dú)工作,實(shí)時(shí)顯示當(dāng)前的溫度值,對(duì)溫度進(jìn)行監(jiān)控。下位機(jī)采用的是基于單片機(jī)和數(shù)字溫度傳感器DS18B20的系統(tǒng)。DS18B20利用單總線的特點(diǎn)可以方便的實(shí)現(xiàn)溫度的測(cè)量,并可以輕松的組建傳感器網(wǎng)絡(luò),該系統(tǒng)的抗干擾性好、設(shè)計(jì)靈活、方便,而且適合在

16、惡劣的環(huán)境下進(jìn)行實(shí)時(shí)溫度測(cè)量【3】。本方案設(shè)計(jì)的系統(tǒng)可以應(yīng)用在大型工業(yè)及民用常溫監(jiān)測(cè)場(chǎng)合,如糧倉(cāng)系統(tǒng)、大樓空調(diào)系統(tǒng)、醫(yī)療與健診的溫度測(cè)試、石化、機(jī)械…等,并且該系統(tǒng)在達(dá)到所需精度的同時(shí),具有較高的性價(jià)比。</p><p><b>  1 器件簡(jiǎn)介</b></p><p>  1.1 AT89S52簡(jiǎn)介</p><p>  AT89S52是一種

17、低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器【4】。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。</p><p>  1.1.1 主要性能</p&g

18、t;<p>  1、與MCS-51單片機(jī)產(chǎn)品兼容;</p><p>  2、8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器;</p><p>  3、1000次擦寫周期;</p><p>  4、全靜態(tài)操作:0Hz-33MHz;</p><p>  5、三級(jí)加密程序存儲(chǔ)器;</p><p>  6、32個(gè)可編程I/

19、O口線;</p><p>  7、三個(gè)16位定時(shí)器/計(jì)數(shù)器;</p><p><b>  8、六個(gè)中斷源;</b></p><p>  9、全雙工UART串行通道;</p><p>  10、低功耗空閑和掉電模式;</p><p>  11、掉電后中斷可喚醒;</p><p&g

20、t;  12、看門狗定時(shí)器;</p><p><b>  13、雙數(shù)據(jù)指針;</b></p><p><b>  14、掉電標(biāo)識(shí)符。</b></p><p>  1.1.2 引腳說(shuō)明</p><p>  AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存

21、儲(chǔ)器。使用Atmel 公司高密度非 易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng) 可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。 AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16

22、位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。</p><p>  P0 口:P0口是一個(gè)8位漏極開路的雙向I/O口。作為

23、輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏 輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。 當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下, P0不具有內(nèi)部上拉電阻。 在flash編程時(shí),P0口也用來(lái)接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn) 時(shí),需要外部上拉電阻。</p><p>  P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動(dòng)4 個(gè) T

24、TL 邏輯電平。對(duì)P1 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入 口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.1分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和定時(shí)器/計(jì)數(shù)器2 的觸發(fā)輸入(P1.1/T2EX)。 在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。</p><p><b>  引腳號(hào)第二功能:</

25、b></p><p>  P1.0 T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出</p><p>  P1.1 T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制)</p><p>  P1.5 MOSI(在系統(tǒng)編程用)</p><p>  P1.6 MISO(在系統(tǒng)編程用)</p><p>  P

26、1.7 SCK(在系統(tǒng)編程用)</p><p>  P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) TTL 邏輯電平。對(duì)P2 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入 口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 在訪問(wèn)外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX @DPTR) 時(shí),P2 口送

27、出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用 8位地址(如MOVX @RI)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。 在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。</p><p>  P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p3 輸出緩沖器能驅(qū)動(dòng)4 個(gè) TTL 邏輯電平。對(duì)P3 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸

28、入 口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。 在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。</p><p>  端口引腳 第二功能:</p><p>  P3.0 RXD(串行輸入口)</p><p>  P3.1 TXD(串行輸出口)</p&g

29、t;<p>  P3.2 INTO(外中斷0)</p><p>  P3.3 INT1(外中斷1)</p><p>  P3.4 TO(定時(shí)/計(jì)數(shù)器0)</p><p>  P3.5 T1(定時(shí)/計(jì)數(shù)器1)</p><p>  P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)</p><p>  P3.7 RD(外

30、部數(shù)據(jù)存儲(chǔ)器讀選通) 此外,P3口還接收一些用于FLASH閃存編程和程序校驗(yàn)的控制信號(hào)。</p><p>  RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將是單片機(jī)復(fù)位。</p><p>  ALE/PROG:當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因

31、此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。對(duì)FLASH存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無(wú)效。</p><p>  PSEN:程序

32、儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89S52由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖,在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次PSEN信號(hào)。</p><p>  EA/VPP:外部訪問(wèn)允許,欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。

33、如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器的指令。FLASH存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。</p><p>  XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸出端。</p><p>  1.2 DS18B20簡(jiǎn)介<

34、;/p><p>  1.2.1 主要特性</p><p>  1適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù) 據(jù)線供電</p><p>  2獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊</p><p>  3 DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B2

35、0可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫</p><p>  4 DS18B20在使用中不需要任何外圍元件,全部 傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)</p><p>  5 測(cè)溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃</p><p>  6 可編程 的分辨率為9~12位,對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、

36、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測(cè)溫</p><p>  7 在9位分辨率時(shí)最多在 93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快</p><p>  8 測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以"一 線總線"串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力</p><p>  

37、9 負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀, 但不能正常工作。</p><p>  1.2.2 DS18B20的外形和內(nèi)部結(jié)構(gòu)</p><p>  DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM 、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器【5】。DS18B20的外形和內(nèi)部結(jié)構(gòu)如下圖1、圖2:</p><p><b>  圖

38、1</b></p><p><b>  圖2</b></p><p>  1.2.3 DS18B20引腳定義:</p><p>  (1)DQ為數(shù)字信號(hào)輸入/輸出端;</p><p>  (2)GND為電源地;</p><p>  (3)VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)

39、接地)。</p><p><b>  2 系統(tǒng)設(shè)計(jì)</b></p><p>  2.1功能與設(shè)計(jì)方案</p><p>  2.1.1 功能要求</p><p>  設(shè)計(jì)一個(gè)基于89S52單片機(jī)、DS18B20數(shù)字溫度傳感器、Visual Basic 6.0的數(shù)據(jù)采集系統(tǒng)。用單片機(jī)系統(tǒng)接收溫度傳感器的溫度數(shù)據(jù),并在6位數(shù)碼

40、管上顯示當(dāng)前溫度值,可測(cè)溫度范圍-55-125攝氏度,精度0.1攝氏度。</p><p>  使用VB6.0編寫上位機(jī)程序,接收溫度數(shù)據(jù)并同步畫出溫度變化的曲線。</p><p>  整個(gè)實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)在設(shè)計(jì)時(shí)主要應(yīng)該滿足一下功能指標(biāo):</p><p>  測(cè)量溫度,并在8位數(shù)碼管上顯示實(shí)時(shí)溫度值;</p><p>  可測(cè)溫范圍-55-1

41、25攝氏度,精度0.1攝氏度;</p><p>  每秒給上位機(jī)傳送一次溫度數(shù)據(jù);</p><p>  上位機(jī)接收溫度,并將數(shù)據(jù)相關(guān)信息同步到曲線和表格中;</p><p>  2.1.2 設(shè)計(jì)方案</p><p>  2.1.2.1 方案論證</p><p>  方案一:采用熱敏電阻,可滿足40攝氏度至90攝氏度

42、測(cè)量范圍,但熱敏電阻精度、重復(fù)性、可靠性較差,對(duì)于檢測(cè)1攝氏度的信號(hào)是不適用的。而且在溫度測(cè)量系統(tǒng)中,采用單片溫度傳感器,比如AD590,LM35等.但這些芯片輸出的都是模擬信號(hào),必須經(jīng)過(guò)A/D轉(zhuǎn)換后才能送給計(jì)算機(jī),這樣就使得測(cè)溫裝置的結(jié)構(gòu)較復(fù)雜.另外,這種測(cè)溫裝置的一根線上只能掛一個(gè)傳感器,不能進(jìn)行多點(diǎn)測(cè)量.即使能實(shí)現(xiàn),也要用到復(fù)雜的算法,一定程度上也增加了軟件實(shí)現(xiàn)的難度。</p><p>  方案二:考慮使用

43、溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以可以采用一只數(shù)字溫度傳感器DS18B20,利用此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。</p><p>  從以上兩種方案的論述中容易看出,采用方案二電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,綜上所述采用方案二。</p><p>  2.1.2.2 總體設(shè)計(jì)框圖</p><p>  實(shí)時(shí)

44、溫度系統(tǒng)電路設(shè)計(jì)總體設(shè)計(jì)框圖如圖3所示,控制器采用單片機(jī)AT89S52,溫度傳感器采用DS18B20,用8位LED數(shù)碼管以串口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示并通過(guò)串口與上位機(jī)通訊,把溫度數(shù)據(jù)傳送給上位機(jī),用VB編寫的圖形界面程序把溫度變化曲線顯示出來(lái)。</p><p><b>  圖3</b></p><p>  2.2 系統(tǒng)硬件設(shè)計(jì)</p><p> 

45、 整體系統(tǒng)硬件電路包括傳感器數(shù)據(jù)采集電路、溫度顯示電路、報(bào)警電路、單片機(jī)最小系統(tǒng)主板電路等,電路圖和仿真圖如圖4、圖5所示。</p><p><b>  圖4</b></p><p><b>  圖5</b></p><p>  溫度傳感器的數(shù)據(jù)總線接單片機(jī)的P3.3口,單片機(jī)通過(guò)反復(fù)讀寫P3.3口的狀態(tài)采集數(shù)據(jù),因此讀寫

46、時(shí)有嚴(yán)格的時(shí)序要求。</p><p>  顯示電路采用6個(gè)共陽(yáng)極的LED數(shù)碼管顯示,顯示掃描代碼PO口發(fā)送,由于PO口內(nèi)部沒(méi)有上拉電阻,因此需要外接上拉電阻。P1口的邏輯狀態(tài)作位選線信號(hào),達(dá)到分時(shí)選通的目的,當(dāng)相應(yīng)口為高電平是LED數(shù)碼管才能顯示相應(yīng)代碼。</p><p>  此外,電路中還接有蜂鳴器,當(dāng)DS18B20工作不正常時(shí)可以達(dá)到報(bào)警的目的。最后還要實(shí)現(xiàn)單片機(jī)與上位機(jī)通信的功能,通

47、過(guò)MAX232電平轉(zhuǎn)換芯片將單片機(jī)的TTL信號(hào)轉(zhuǎn)換為串口的標(biāo)準(zhǔn)電平信號(hào),以便能向上位機(jī)發(fā)送或接收數(shù)據(jù)。</p><p><b>  3 程序設(shè)計(jì)</b></p><p><b>  3.1 下位機(jī)程序</b></p><p>  下位機(jī)程序采用C語(yǔ)言編寫,開機(jī)時(shí)對(duì)DS18B20數(shù)字溫度傳感器進(jìn)行檢測(cè),如果DS18B20檢測(cè)

48、不正常,則蜂鳴器報(bào)警,并關(guān)閉顯示。采用6個(gè)LED數(shù)碼管顯示,其中4個(gè)顯示溫度值,2個(gè)顯示溫度符號(hào)。同時(shí)如果溫度值最高位為0將不顯示出來(lái)。下位機(jī)程序使用C語(yǔ)言編寫比使用匯編語(yǔ)言編寫的可讀性要好很多,整個(gè)下位機(jī)程序包括三個(gè)模塊:DS18B20讀寫模塊、數(shù)碼管顯示模塊、RS232串口通訊模塊。只有當(dāng)上位機(jī)向下位機(jī)發(fā)出讀取溫度數(shù)據(jù)的指令時(shí),下位機(jī)才會(huì)將測(cè)得的實(shí)時(shí)溫度數(shù)據(jù)經(jīng)RS232串口傳給上位機(jī)。</p><p>  3

49、.1.1 DS18B20讀寫模塊</p><p>  首先需要初始化DS18B20:</p><p>  uchar Init_DS18B20(void) </p><p><b>  {</b></p><p>  DQ = 1; </p><p>  Delay(8); <

50、;/p><p>  DQ = 0; </p><p>  Delay(90); </p><p>  DQ = 1; </p><p><b>  Delay(8);</b></p><p>  presence = DQ; // 如果=0則初始化成功 =1則初

51、始化失敗</p><p>  Delay(100);</p><p><b>  DQ = 1; </b></p><p>  return(presence); // 返回信號(hào),0=presence,1= no presence</p><p><b>  }</b></p><

52、;p>  初始化完畢后,轉(zhuǎn)入溫度讀取程序。其流程為一無(wú)限循環(huán),單片機(jī)不斷從DS18B20讀取溫度數(shù)據(jù)。此處用flash標(biāo)志DS18B20的工作狀態(tài),當(dāng)flash=1時(shí)表示DS18B20工作異常,同時(shí)關(guān)閉顯示和蜂鳴器報(bào)警。此部分程序詳見附錄1,此處不再詳述。</p><p>  3.1.2 數(shù)碼管顯示模塊</p><p>  由于單片機(jī)控制端口有限,因此采用掃描顯示的方式,即通過(guò)快速刷

53、新數(shù)碼管的筆畫顯示,由于人眼視覺(jué)殘留的效應(yīng),只要刷新的速度足夠快,就能同時(shí)看到6個(gè)數(shù)碼管的顯示,有效的節(jié)省了單片機(jī)的控制端口。此外,在顯示模塊中,由于設(shè)計(jì)要求的顯示精度是精確到一位小數(shù),而DS18B20每一位的轉(zhuǎn)化溫度是0.0625攝氏度,因此小數(shù)第一位只有16種狀態(tài),因此只需要一一算出放在一個(gè)數(shù)組中,通過(guò)查表命令即可得到第一位小數(shù)的十進(jìn)制數(shù)值。同時(shí)通過(guò)移位即可獲得一個(gè)新的溫度整數(shù)部分的數(shù)據(jù),此處的部分代碼如下:</p>

54、<p>  unsigned char n=0;</p><p>  display[4]=temp_data[0]&0x0f;</p><p>  display[0]=ditab[display[4]]; // 通過(guò)查表命令得小數(shù)位的值</p><p>  display[4]=((temp_data[0]&0xf0)>

55、>4)|((temp_data[1]&0x0f)<<4);</p><p>  display[3]=display[4]/100;</p><p>  display[1]=display[4]%100; </p><p>  display[2]=display[1]/10;</p><p>  display

56、[1]=display[1]%10; </p><p>  if(!display[3]) </p><p><b>  { </b></p><p>  display[3]=0x0a; </p><p>  if(!display[2]) </p>

57、<p>  display[2]=0x0a;</p><p><b>  }</b></p><p>  此段程序中,display[0]為小數(shù)位十進(jìn)制數(shù),display[3]為百位十進(jìn)制數(shù),display[2]為十位十進(jìn)制數(shù),display[1]為個(gè)位十進(jìn)制數(shù)。然后再通過(guò)查詢共陽(yáng)極LED數(shù)碼管的顯示代碼分時(shí)選通即可顯示當(dāng)前溫度值。</p>

58、<p>  unsigned char code LEDData[ ]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}</p><p>  因?yàn)閭€(gè)位還需要顯示小數(shù)點(diǎn),故其顯示代碼稍有不同:</p><p>  unsigned char code

59、 LEDdian[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78, 0x00,0x10}</p><p>  3.1.3 RS232串口通訊模塊</p><p>  在此部分模塊中,波特率和晶振頻率在程序初始化時(shí)已經(jīng)定義為9600b/s和11.0592MHz,以便和上位機(jī)的波特率匹配。波特率的產(chǎn)生用定時(shí)器產(chǎn)生,本設(shè)計(jì)中選擇定時(shí)器

60、1,并設(shè)置其為工作方式2,8位的常數(shù)自動(dòng)重載定時(shí)器,這種工作方式可以省去用戶軟件中重裝初值的代碼,極大的簡(jiǎn)化了定時(shí)初值的計(jì)算,并可以精確確定定時(shí)時(shí)間。計(jì)算出定時(shí)器的初值后,就可以設(shè)定串口的工作方式了。部分代碼如下:</p><p>  void init(void)</p><p><b>  {</b></p><p>  EA = 1;

61、 </p><p>  TMOD = 0x20;// 定時(shí)器1工作于8位自動(dòng)重載模式, 用于產(chǎn)生波特率</p><p>  TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));</p><p>  TL1=(unsigned char)(256 -

62、(XTAL / (32L * 12L * baudrate))); // 定時(shí)器賦初值</p><p>  SCON = 0x50;// 設(shè)定串行口工作方式</p><p>  PCON &= 0x00;// 波特率不倍增</p><p>  TR1 = 1;// 啟動(dòng)定時(shí)器1</p><p>  IE = 0

63、x00;// 禁止任何中斷</p><p><b>  } </b></p><p><b>  3.2 上位機(jī)程序</b></p><p>  上位機(jī)程序中,通過(guò)使用VB6.0的通用串口控件MSComm來(lái)對(duì)發(fā)送到串口的數(shù)據(jù)進(jìn)行處理和顯示。上位機(jī)程序設(shè)計(jì)的核心是串口的初始化程序和接收程序的設(shè)計(jì)。</p>

64、<p>  3.2.1 串口初始化</p><p><b>  主要設(shè)計(jì)過(guò)程如下:</b></p><p>  串口設(shè)置:MSComm.SetSettings(波特率、校檢方式、數(shù)據(jù)位數(shù)、停止位數(shù))</p><p>  串口數(shù)據(jù):MSComm.InputMode(輸入模式)</p><p><b>

65、;  部分代碼如下:</b></p><p>  On Error GoTo err:</p><p>  MSComm1.CommPort = 1 ' 默認(rèn)設(shè)置為COM1</p><p>  MSComm1.InputMode = comInputModeBinary

66、 ' 二進(jìn)制輸入模式</p><p>  MSComm1.RThreshold = 1 ' 接收1個(gè)字符觸法OnComm 事件</p><p>  MSComm1.SThreshold = 1 ' 發(fā)送1個(gè)字符觸法OnComm 事件</p><p>  MSComm1.

67、Settings = "9600,n,8,2" ' 設(shè)置波特率</p><p>  此處均為默認(rèn)設(shè)置,可以根據(jù)具體情況更改設(shè)置,但必須與下位機(jī)一致。另外程序還包括提示出錯(cuò)程序,當(dāng)串口不存在或被占用時(shí)會(huì)出現(xiàn)提示信息。</p><p>  3.2.2 串口觸發(fā)接收程序</p><p>  當(dāng)

68、每發(fā)送一次指令時(shí),就會(huì)觸發(fā)OnComm事件,并返回?cái)?shù)據(jù)串,通過(guò)計(jì)算得到溫度測(cè)量值并顯示出來(lái),部分程序如下:</p><p>  Private Sub MSComm1_OnComm()</p><p>  Dim Inbyte() As Byte ' 接收數(shù)據(jù)暫存</p><p>  Dim buffer As

69、 String ' 溫度數(shù)據(jù)緩沖</p><p>  Dim datatemp2a, datatemp2b As String ' 兩字節(jié)進(jìn)制溫度數(shù)據(jù)</p><p>  Dim datatemp2 As String ' 十六進(jìn)制溫度數(shù)據(jù)</p>

70、<p>  Dim count As Integer ' 接收個(gè)數(shù)計(jì)數(shù)</p><p>  If num > Txttimes.Text - 1 Then ' 接收個(gè)數(shù)判斷</p><p>  Timer1.Enabled = False '

71、; 接收完畢</p><p>  Shpstate.FillColor = &H80FF&</p><p><b>  Exit Sub</b></p><p><b>  End If</b></p><p>  Select Case MSComm1.CommEvent</

72、p><p>  Case comEvReceive</p><p>  count = MSComm1.InBufferCount </p><p>  Inbyte = MSComm1.Input </p><p>  If count <> 2 Then Exit Sub coun

73、ter = counter + 1 </p><p>  For i = LBound(Inbyte) To UBound(Inbyte) buffer = buffer + Hex(Inbyte(i)) + Chr(32)</p><p><b>  Next i</b></p><p>  E

74、nd Select</p><p>  3.2.3 界面設(shè)計(jì)和數(shù)據(jù)分析統(tǒng)計(jì)程序</p><p>  此部分對(duì)采集到的實(shí)時(shí)溫度數(shù)據(jù)進(jìn)行處理并顯示,包括最大值、最小值、平均值、當(dāng)前值,同時(shí)用表格和坐標(biāo)曲線表示。此部分代碼詳見附錄2,此處不再詳述。</p><p><b>  結(jié)束語(yǔ)</b></p><p>  溫度測(cè)量系統(tǒng)是

75、現(xiàn)代工業(yè)生產(chǎn)過(guò)程中的一個(gè)重要環(huán)節(jié),特別是大型企業(yè)的主要設(shè)備往往需要極其精確的測(cè)量溫度參數(shù),甚至在許多需要對(duì)溫度進(jìn)行監(jiān)控和分析的場(chǎng)合還要求一種保證精度和高穩(wěn)定性的同時(shí)自動(dòng)化水平高、應(yīng)用范圍廣的溫度采集手段。而目前許多老舊設(shè)備上普遍存在和使用的測(cè)溫設(shè)備都有溫度信息傳遞不及時(shí)、精度不夠的嚴(yán)重缺點(diǎn),不利于工作人員根據(jù)溫度變化及時(shí)作出決定,嚴(yán)重影響和阻礙了工業(yè)自動(dòng)化的發(fā)展,此時(shí)開發(fā)一種能夠?qū)崟r(shí)性高、精度高、穩(wěn)定性高的綜合溫度處理分析監(jiān)控系統(tǒng)就十分

76、必要。</p><p>  在這種背景下,本文設(shè)計(jì)實(shí)現(xiàn)了低成本、高可靠、高實(shí)時(shí)性的基于51單片機(jī)和DS18B20數(shù)字溫度傳感器的溫度數(shù)據(jù)采集系統(tǒng)。在設(shè)計(jì)過(guò)程中,對(duì)整個(gè)系統(tǒng)的硬件和軟件皆采用模塊化程序設(shè)計(jì)的方法,將系統(tǒng)功能劃分為幾個(gè)子模塊,最后再進(jìn)行整合,從而實(shí)現(xiàn)了最終的溫度數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)。</p><p><b>  參考文獻(xiàn)</b></p><

77、;p>  [1] 王勇,葉敦范. 基于AT89S51的便攜式實(shí)時(shí)溫度檢測(cè)儀 [J] 儀表技術(shù)與傳感器 , Instrument Technique and Sensor, 2006,(4).</p><p>  [2] 王學(xué)梅,金廣鋒.數(shù)字溫度傳感器DS18B20在糧倉(cāng)溫度智能控制系統(tǒng)中的應(yīng)用 [J] 科技廣場(chǎng) , Science Mosaic, 2009,(5).</p><p

78、>  [3] 史寶玲. DS18B20數(shù)字溫度傳感器技術(shù)分析 [J] 中國(guó)新技術(shù)新產(chǎn)品 , China New Technologies and Products, 2011,(4). </p><p>  [4] 白建社,王航宇.基于AT89S52的多用途工業(yè)控制器設(shè)計(jì) [J] 科技廣場(chǎng) , Science Mosaic, 2008,(3). </p><p>  [5

79、] 夏莉英,陳雁.基于DS18B20的溫度測(cè)控系統(tǒng)設(shè)計(jì) [J] 微計(jì)算機(jī)信息 , Microcomputer Information, 2011,(1).</p><p>  [6] 霖鋒. Professional embedded from 51 mcu to ARM[M].哈工大,2007</p><p>  [7] 郭天祥.Altium Designer6.9 PCB設(shè)計(jì)

80、教程[M].哈工大,2004</p><p>  [8] 戴佳.51單片機(jī)應(yīng)用系統(tǒng)開發(fā)典型實(shí)例[M].電力出版社,2005年6月</p><p>  [9] 沈德金,陳粵初.MCS-51系列單片機(jī)接口電路與應(yīng)用程序?qū)嵗齕M].北京航空航天大學(xué)出版社,1999</p><p>  [10] 陳海宴.51單片機(jī)原理及應(yīng)用[M].北京航空航天大學(xué)出版社,2010.&

81、lt;/p><p>  [11] 童詩(shī)白.模擬電子技術(shù)基礎(chǔ)[M].高等教育出版社,2001 </p><p>  [12] 鐘富昭等.8051單片機(jī)典型模塊設(shè)計(jì)與應(yīng)用[M].人民郵電出版社,2007</p><p>  [13] 李平等.單片機(jī)入門與開發(fā)[M].機(jī)械工業(yè)出版社,2008</p><p>  [14] 王東峰等.單片機(jī)C語(yǔ)言

82、應(yīng)用100例[M].電子工業(yè)出版社,2009</p><p><b>  附錄</b></p><p><b>  附錄A 下位機(jī)程序</b></p><p>  #include <reg52.h></p><p>  #define XTAL 11059200 // CUP晶

83、振頻率</p><p>  #define baudrate 9600 // 通信波特率</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit DQ = P3^6; // 定義DS18B20端口D

84、Q </p><p>  sbit BEEP = P3^3;</p><p>  unsigned char presence ;</p><p>  unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff};</p><p

85、>  unsigned char code LEDdian[ ] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78, 0x00,0x10};</p><p>  unsigned char data temp_data[2] = {0x00,0x00};</p><p>  unsigned char data display[5] = {0

86、x00,0x00,0x00,0x00,0x00}; </p><p>  unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,</p><p>  0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};</p><p>  void beep()

87、; </p><p>  //sbit DIN = P0^7; // 小數(shù)點(diǎn)</p><p>  bit flash=0; // 顯示開關(guān)標(biāo)記</p><p>  void Delay(unsigned int num)// 延時(shí)函數(shù)</p><p><b>  {</b></p><p>

88、;  while( --num );</p><p><b>  }</b></p><p>  uchar Init_DS18B20(void) // 初始化ds1820</p><p><b>  {</b></p><p>  DQ = 1; // DQ復(fù)位</p>&

89、lt;p>  Delay(8); // 稍做延時(shí)</p><p>  DQ = 0; // 單片機(jī)將DQ拉低</p><p>  Delay(90); // 精確延時(shí) 大于 480us</p><p>  DQ = 1; // 拉高總線</p><p><b>  Delay(8);</b

90、></p><p>  presence = DQ; // 如果=0則初始化成功 =1則初始化失敗</p><p>  Delay(100);</p><p><b>  DQ = 1; </b></p><p>  return(presence); // 返回信號(hào),0=presence,1= no pre

91、sence</p><p><b>  }</b></p><p>  uchar ReadOneChar(void) // 讀一個(gè)字節(jié)</p><p><b>  {</b></p><p>  unsigned char i = 0;</p><p>  unsigned

92、 char dat = 0;</p><p>  for (i = 8; i > 0; i--)</p><p><b>  {</b></p><p>  DQ = 0; // 給脈沖信號(hào)</p><p>  dat >>= 1;</p><p>  DQ = 1; // 給脈

93、沖信號(hào)</p><p><b>  if(DQ)</b></p><p>  dat |= 0x80;</p><p><b>  Delay(4);</b></p><p><b>  }</b></p><p>  return (dat);<

94、/p><p><b>  }</b></p><p>  void WriteOneChar(unsigned char dat)// 寫一個(gè)字節(jié)</p><p><b>  {</b></p><p>  unsigned char i = 0;</p><p>  for (

95、i = 8; i > 0; i--)</p><p><b>  {</b></p><p><b>  DQ = 0;</b></p><p>  DQ = dat&0x01;</p><p><b>  Delay(5);</b></p><

96、;p><b>  DQ = 1;</b></p><p><b>  dat>>=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void Read_Temperature

97、(void)// 讀取溫度</p><p><b>  {</b></p><p>  Init_DS18B20();</p><p>  if(presence==1) </p><p><b>  { </b></p><p><b>  beep

98、();</b></p><p><b>  flash=1;</b></p><p>  } // DS18B20不正常,蜂鳴器報(bào)警</p><p><b>  else </b></p><p><b>  {</b>

99、</p><p><b>  flash=0;</b></p><p>  WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換</p><p>  Init_DS18B20();</p><p> 

100、 WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0xBE); // 讀取溫度寄存器</p><p>  temp_data[0] = ReadOneChar(); // 溫度低8位</p><p>  temp_data[1] = ReadOneChar(); // 溫度高8位 <

101、/p><p><b>  }</b></p><p><b>  }</b></p><p>  void Disp_Temperature()// 顯示溫度</p><p><b>  {</b></p><p>  unsigned char n=0;

102、</p><p>  display[4]=temp_data[0]&0x0f;</p><p>  display[0]=ditab[display[4]]; // 查表得小數(shù)位的值</p><p>  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<

103、;<4);</p><p>  display[3]=display[4]/100;</p><p>  display[1]=display[4]%100; </p><p>  display[2]=display[1]/10;</p><p>  display[1]=display[1]%10; //</p>

104、<p>  if(!display[3]) // 高位為0,不顯示</p><p><b>  { </b></p><p>  display[3]=0x0a; </p><p>  if(!display[2]) // 次高位為0,不顯示</p><p>

105、;  display[2]=0x0a;</p><p><b>  }</b></p><p>  P0 = 0xc6; // 顯示 C</p><p>  P1 = 0xfe; //P1.0</p><p>  Delay(300);</p><p>  P0 = 0x9c;

106、// 顯示 ° </p><p>  P1 = 0xfd; //P1.1</p><p>  Delay(300);</p><p>  P0 =LEDData[display[0]] ; // 顯示小數(shù)位</p><p>  P1 = 0xfb; //P1.2</p><p>  Delay

107、(300);</p><p>  P0 =LEDdian[display[1]]; // 顯示個(gè)位</p><p>  //DIN = 0;</p><p>  P1 = 0xf7; //P1.3 </p><p>  Delay(300);</p><p>  P0 =LEDData[display[2]];

108、 // 顯示十位</p><p>  P1 = 0xef; //P1.4</p><p>  Delay(300);</p><p>  P0 =LEDData[display[3]]; // 顯示百位</p><p>  P1 = 0xdf; //P1.5</p><p>  Delay(300);<

109、;/p><p>  P1 = 0xff; // 關(guān)閉顯示</p><p><b>  }</b></p><p>  void beep(void)</p><p><b>  {</b></p><p>  unsigned char i;<

110、/p><p>  for (i=0;i<100;i++)</p><p><b>  {</b></p><p>  Delay(60);</p><p>  BEEP=!BEEP; // BEEP取反</p><p><b>  } </b>

111、</p><p>  BEEP=1; // 關(guān)閉蜂鳴器</p><p><b>  }</b></p><p>  void init(void)</p><p><b>  {</b></p><p>  EA = 1;

112、 // "中斷總允許"</p><p>  TMOD = 0x20;// 定時(shí)器1工作于8位自動(dòng)重載模式, 用于產(chǎn)生波特率</p><p>  TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));</p><p>  TL1=(u

113、nsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // 定時(shí)器0賦初值</p><p>  SCON = 0x50;// 設(shè)定串行口工作方式</p><p>  PCON &= 0x00;// 波特率不倍增</p><p>  TR1 = 1;// 啟動(dòng)定時(shí)器1</p&g

114、t;<p>  IE = 0x00;// 禁止任何中斷</p><p><b>  }</b></p><p>  void send_char(void)</p><p>  // 傳送十六位的溫度數(shù)據(jù),低位在前</p><p><b>  {</b></p>

115、<p>  unsigned i=0;</p><p>  while (i < 2)</p><p><b>  {</b></p><p>  SBUF = temp_data[i];</p><p>  while (!TI); // 等特?cái)?shù)據(jù)傳送</p><p&g

116、t;  TI = 0; // 清除數(shù)據(jù)傳送標(biāo)志</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main(void)</p><

117、;p><b>  {</b></p><p>  uchar receive;</p><p><b>  init();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p>&

118、lt;p>  Read_Temperature(); // 讀取溫度</p><p>  if (flash==0) </p><p><b>  {</b></p><p>  Disp_Temperature(); // 顯示溫度</p>

119、<p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  P1 = 0xff ; // DS18B20不正常,關(guān)閉顯示</p><p><b>  }

120、</b></p><p>  if (RI) // 是否有數(shù)據(jù)到來(lái)</p><p><b>  {</b></p><p><b>  RI = 0;</b></p><p>  receive = SBUF;</p><p>  if

121、 (receive == 's') // 是否開始采集溫度</p><p><b>  {</b></p><p>  send_char(); // 傳送采集的溫度</p><p><b>  }</b></p><p><b>  }&

122、lt;/b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  附錄B 上位機(jī)程序</b></p><p><b>  定義窗體級(jí)變量</b></p><p>  Di

123、m datatemp(200) As Single ' 用于存儲(chǔ)溫度采樣值</p><p>  Dim num As Integer ' 用于存儲(chǔ)采樣值個(gè)數(shù)</p><p>  Dim counter As Integer ' 采樣個(gè)數(shù)計(jì)數(shù)器</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論