基于單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì) 畢業(yè)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(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>  畢業(yè)設(shè)計(jì)說(shuō)明書</b></p><p>  設(shè)計(jì)題目: 基于單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì) </p><p>  專 業(yè): 電子信息工程技術(shù) </p><p>  班 級(jí): -1 </p><p>  學(xué) 號(hào):

2、 </p><p>  姓 名: </p><p>  指導(dǎo)教師: </p><p><b>  二O一O年八月五日</b></p><p><b>  畢業(yè)設(shè)計(jì)任務(wù)書</b></p

3、><p>  備注:任務(wù)書由指導(dǎo)教師填寫,一式二份。其中學(xué)生一份,指導(dǎo)教師一份。</p><p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p><b>  緒 論2</b></p><p>  第1章 數(shù)字溫度

4、計(jì)設(shè)計(jì)方案3</p><p>  1.1 數(shù)字溫度計(jì)設(shè)計(jì)方案論證3</p><p>  1.2 方案設(shè)計(jì)3</p><p>  1.3 設(shè)計(jì)要求和實(shí)現(xiàn)的功能4</p><p>  第2章 硬件電路設(shè)計(jì)5</p><p>  2.1 8051 單片機(jī)的基本組成5</p><p>  2

5、.1.1 各部分作用或功能介紹如下: 5</p><p>  2.2 顯示電路6</p><p>  2.3 溫度傳感器7</p><p>  2.3.1 DS18B20的簡(jiǎn)介7</p><p>  2.3.2 DS18B20的兩個(gè)表格9</p><p>  2.3.3 DS18B20的測(cè)溫原理10<

6、/p><p>  2.3.4 DS18B20的時(shí)序設(shè)置11</p><p>  第3章 軟件設(shè)計(jì)12</p><p>  3.1 主程序流程圖12</p><p>  3.2 計(jì)算溫度子程序流程圖13</p><p>  3.3 溫度顯示流程圖14</p><p>  第4章 仿真調(diào)試1

7、5</p><p><b>  參考文獻(xiàn)17</b></p><p><b>  附 錄18</b></p><p>  附錄1 整機(jī)電路圖18</p><p>  附錄2 源程序19</p><p><b>  摘 要</b></p>

8、;<p>  本設(shè)計(jì)所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫準(zhǔn)確,由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。其輸出溫度采用數(shù)字顯示,主要用于對(duì)測(cè)溫比較準(zhǔn)確的場(chǎng)所,或科研實(shí)驗(yàn)室使用,該設(shè)計(jì)控制器采用單

9、片機(jī)8051,溫度傳感器采用DS18B20,用6位共陽(yáng)極LED數(shù)碼管實(shí)現(xiàn)溫度顯示。</p><p>  隨著時(shí)代的進(jìn)步和發(fā)展,單片機(jī)技術(shù)已經(jīng)普及到我們生活,工作,科研,各個(gè)領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),本文將介紹一種基于單片機(jī)控制的數(shù)字溫度計(jì)。</p><p>  關(guān)鍵詞:51單片機(jī);溫度計(jì);溫度傳感器。</p><p><b>  緒 論</b

10、></p><p>  單片機(jī)的誕生標(biāo)志著計(jì)算機(jī)正式形成了通用計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng)兩個(gè)分支。通用計(jì)算機(jī)系統(tǒng)主要用于海量高速數(shù)值運(yùn)算,不必兼顧控制功能,其數(shù)據(jù)總線的寬度不斷更新,從8位、16位迅速過(guò)渡到32位、64位,并且不斷提高運(yùn)算速度和完善通用操作系統(tǒng),以突出其高速海量數(shù)值運(yùn)算的能力,在數(shù)據(jù)處理、模擬仿真、人工智能、圖像處理、多媒體、網(wǎng)絡(luò)通信中得到了廣泛應(yīng)用;單片機(jī)作為最典型的嵌入式系統(tǒng),由于其微

11、小的體積和極低的成本,廣泛應(yīng)用于家用電器、機(jī)器人、儀器儀表、工業(yè)控制單元、辦公自動(dòng)化設(shè)備以及通信產(chǎn)品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化工具。因此,單片機(jī)的出現(xiàn)大大促進(jìn)了現(xiàn)代計(jì)算機(jī)技術(shù)的飛速發(fā)展,成為近代計(jì)算機(jī)技術(shù)發(fā)展史上一個(gè)重要里程碑。</p><p>  隨著人們生活水平的不斷提高,單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一,它所給人帶來(lái)的方便也是不可否定的,其中數(shù)字溫度計(jì)就是一個(gè)典型的例子,但人們對(duì)它的要求越來(lái)越高

12、,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。本設(shè)計(jì)所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫準(zhǔn)確,其輸出溫度采用數(shù)字顯示,主要用于對(duì)測(cè)溫比較準(zhǔn)確的場(chǎng)所,或科研實(shí)驗(yàn)室使用,該設(shè)計(jì)控制器使用單片機(jī)8051,測(cè)溫傳感器使用DS18B20,用6位共陰極LED數(shù)碼管通過(guò)8279實(shí)現(xiàn)溫度顯示。能準(zhǔn)確達(dá)到以上要求。</p><p&g

13、t;  第1章 數(shù)字溫度計(jì)設(shè)計(jì)方案</p><p>  1.1 數(shù)字溫度計(jì)設(shè)計(jì)方案論證</p><p><b>  方案1</b></p><p>  由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),這

14、種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p><b>  方案2</b></p><p>  進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。</p><p>  選擇:傳統(tǒng)

15、的溫度檢測(cè)電路主要是利用熱敏電阻進(jìn)行感溫后,再通過(guò)A/D轉(zhuǎn)換后讀取溫度值,但電路較為復(fù)雜,并且誤差范圍較大,本設(shè)計(jì)采用溫度傳感器DS18B20,它無(wú)須其它任何外圍元件便可實(shí)現(xiàn)溫度檢測(cè)</p><p>  1.2 方案2的設(shè)計(jì)</p><p>  溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖1-1所示。</p><p>  圖1-1 數(shù)字溫度計(jì)總體設(shè)計(jì)方框圖</p>

16、<p>  1.3 設(shè)計(jì)要求和實(shí)現(xiàn)的功能 </p><p>  1.用溫度傳感器測(cè)試溫度,用6位LED數(shù)碼管顯示溫度;2.測(cè)試溫度的范圍為-55~99℃,溫度誤差為±1℃;3.能進(jìn)行仿真</p><p>  第2章 硬件電路設(shè)計(jì)</p><p>  系統(tǒng)整體硬件電路包括單片機(jī)控制器,溫度傳感器。本設(shè)計(jì)采用AT89C51為控制器,DS18B2

17、0為溫度傳感器與單片機(jī)的接口電路。</p><p>  2.1 AT89C51單片機(jī)的組成</p><p>  圖2-1 AT89C51單片機(jī)原理圖</p><p>  2.1.1 各部分作用或功能介紹如下:</p><p>  1.中央處理器(CPU)</p><p>  中央處理器是單片機(jī)的核心,完成運(yùn)算和控制

18、功能。MCS-51的CPU能處理8位二進(jìn)制數(shù)或代碼。</p><p>  2.內(nèi)部數(shù)據(jù)存儲(chǔ)器(內(nèi)部RAM)</p><p>  8051芯片中共有256個(gè)RAM單元,但其中后128單元被專用寄存器占用,能作為寄存器供用戶使用的只是前128單元,用于存放可讀寫的數(shù)據(jù)。因此通常所說(shuō)的內(nèi)部數(shù)據(jù)存儲(chǔ)器就是指前128單元,簡(jiǎn)稱內(nèi)部RAM。</p><p>  3.內(nèi)部程序存儲(chǔ)

19、器(內(nèi)部ROM)</p><p>  8051共有4KB掩膜ROM,用于存放程序、原始數(shù)據(jù)或表格,因此稱之為程序存儲(chǔ)器,簡(jiǎn)稱內(nèi)部ROM。</p><p><b>  4.定時(shí)器/計(jì)數(shù)器</b></p><p>  8051共有2個(gè)16位的定時(shí)器/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)功能,并以其定時(shí)或計(jì)數(shù)結(jié)果對(duì)計(jì)算機(jī)進(jìn)行控制。</p><

20、p><b>  5.并行I/O口</b></p><p>  MCS-51共有四個(gè)8位的I/O口(P0、P1、P2、P3),以實(shí)現(xiàn)數(shù)據(jù)的并行輸入輸出。在實(shí)訓(xùn)中我們已經(jīng)使用了P1口,通過(guò)P1口連接8個(gè)發(fā)光二極管。</p><p><b>  6.串行口</b></p><p>  MCS-51單片機(jī)有一個(gè)全雙工的串行口

21、,以實(shí)現(xiàn)單片機(jī)和其它設(shè)備之間的串行數(shù)據(jù)傳送。該串行口功能較強(qiáng),既可作為全雙工異步通信收發(fā)器使用,也可作為同步移位器使用。</p><p><b>  7.中斷控制系統(tǒng)</b></p><p>  MCS-51單片機(jī)的中斷功能較強(qiáng),以滿足控制應(yīng)用的需要。8051共有5個(gè)中斷源,即外中斷2個(gè),定時(shí)/計(jì)數(shù)中斷2個(gè),串行中斷1個(gè)。全部中斷分為高級(jí)和低級(jí)共二個(gè)優(yōu)先級(jí)別。<

22、/p><p><b>  2.2 顯示電路</b></p><p>  由6位共陰極LED數(shù)碼管、位驅(qū)動(dòng)電路、端輸入電路組成,采用動(dòng)態(tài)掃描的方式顯示。基本的半導(dǎo)體數(shù)碼管是由八個(gè)條狀發(fā)光二極管芯片按圖2-3排列而成的??蓪?shí)現(xiàn)0~9的顯示。其具體結(jié)構(gòu)有“反射罩式”、“條形八段式”及“單片集成式多位數(shù)字式”等。用6位共陽(yáng)極LED數(shù)碼管實(shí)現(xiàn)溫度顯示。能準(zhǔn)確達(dá)到以上要求。</

23、p><p><b>  圖2-3 數(shù)碼管</b></p><p><b>  2.3 溫度傳感器</b></p><p>  2.3.1 DS18B20的簡(jiǎn)介</p><p>  DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能

24、直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點(diǎn)如下:</p><p>  1.獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;</p><p>  2.多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;</p><p><b>  3.無(wú)須外部器件;</b></p>

25、<p>  4.可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p><b>  5.零待機(jī)功耗;</b></p><p>  6.溫度以9或12位數(shù)字;</p><p>  7.用戶可定義報(bào)警設(shè)置;</p><p>  8.報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;</p&

26、gt;<p>  DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框圖如圖2-5所示。</p><p>  圖2-5 DS18B20的內(nèi)部結(jié)構(gòu)</p><p>  64ROM的結(jié)構(gòu)開(kāi)始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度報(bào)警觸發(fā)器TH和TL,

27、可通過(guò)軟件寫入戶報(bào)警上下限。 DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖2-5所示。頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。</p><p>  DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精

28、度的溫度數(shù)值。該字節(jié)各位的定義如圖2-6所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來(lái)設(shè)置分辨率。</p><p>  DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為9字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖2-6所示。</p

29、><p>  圖2-6 DS18B20字節(jié)定義</p><p>  由圖2-6可見(jiàn),其中1、2字節(jié)用來(lái)存放當(dāng)前溫度,1為低8位,2為高8位。字節(jié)3、4用來(lái)預(yù)置報(bào)警溫度的上下限,字節(jié)5用于配置寄存器,用于確定溫度數(shù)據(jù)位數(shù),字節(jié)6、7、8均為保留字節(jié),字節(jié)9存放前8個(gè)字節(jié)循環(huán)冗余校驗(yàn)碼(CRC)。</p><p>  DS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM

30、中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對(duì)主機(jī)發(fā)出的報(bào)警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。</p><p>  在64位ROM的最高有效字節(jié)中存儲(chǔ)有循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)ROM的前56位來(lái)計(jì)算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。</p><p>  

31、2.3.2 DS18B20的兩個(gè)空格</p><p>  由表2-7可見(jiàn),DS18B20溫度轉(zhuǎn)換的時(shí)間比較長(zhǎng),而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。</p><p>  表2-7 DS18B20溫度轉(zhuǎn)換時(shí)間表</p><p>  DS18B20溫度轉(zhuǎn)換的時(shí)間比較長(zhǎng),而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間越長(zhǎng)。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮

32、。</p><p>  當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開(kāi)始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第1、2字節(jié)。單片機(jī)可以通過(guò)單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。</p><p>  當(dāng)符號(hào)位S=0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位S=1時(shí),表示測(cè)得

33、的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。如表2-8是一部分溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。</p><p>  表2-8一部分溫度對(duì)應(yīng)值表</p><p>  2.3.3 DS18B20的測(cè)溫原理</p><p>  器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所

34、產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開(kāi)時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開(kāi)啟時(shí)間由高溫度系數(shù)振蕩器來(lái)決定,每次測(cè)量前,首先將-55℃所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。</p><p>  減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器

35、1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就是所測(cè)溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過(guò)程,直到溫度寄存器值大致被測(cè)溫度值另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對(duì)DS18B20的

36、各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。DS18B20溫度傳感器與單片機(jī)的接口為1接地,2接P1.0口,3接4.7K上拉電阻。</p><p>  另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS1820(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→

37、發(fā)存儲(chǔ)操作命令→處理數(shù)據(jù)。</p><p>  2.3.4 DS18B20的時(shí)序設(shè)置</p><p><b>  1.1復(fù)位時(shí)序</b></p><p>  復(fù)位使用DS18B20時(shí),首先需將其復(fù)位,然后才能執(zhí)行其它命令。復(fù)位時(shí),主機(jī)將數(shù)據(jù)線拉為低電平并保持480us~960us,然后釋放數(shù)據(jù)線,再由上拉電阻將數(shù)據(jù)線拉高15~60us,等待D

38、S18B20發(fā)出存在脈沖,存在脈沖有效時(shí)間為60~240us,這樣,就完成了復(fù)位操作。</p><p><b>  1.2.寫時(shí)序</b></p><p>  在主機(jī)對(duì)DS18B20寫數(shù)據(jù)時(shí),先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖剑摰碗娖綉?yīng)大于lus。在數(shù)據(jù)線變?yōu)榈碗娖胶?5us內(nèi),根據(jù)寫“1”或?qū)憽?”使數(shù)據(jù)線變高或繼續(xù)為低。DS18B20將在數(shù)據(jù)線變成低電平后15u

39、s~60US內(nèi)對(duì)數(shù)據(jù)線進(jìn)行采樣。要求寫入DS18B20的數(shù)據(jù)持續(xù)時(shí)間應(yīng)大6Ous而小于120us,兩次寫數(shù)據(jù)之間的時(shí)間間隔應(yīng)大于lus。</p><p><b>  1.3讀時(shí)序</b></p><p>  讀時(shí)隙當(dāng)主機(jī)從DS18B20讀數(shù)據(jù)時(shí),主機(jī)先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖?,該低電平?yīng)大于lus,然后釋放數(shù)據(jù)線,使其變?yōu)楦唠娖?。DS18B20在數(shù)據(jù)線從高電平

40、變?yōu)榈碗娖降?5us內(nèi)將數(shù)據(jù)送到數(shù)據(jù)線上。主機(jī)可在15us后讀取數(shù)據(jù)線。</p><p><b>  第3章 軟件設(shè)計(jì)</b></p><p>  本數(shù)字溫度計(jì)系統(tǒng)軟件由主程序、計(jì)算溫度子程序、顯示溫度子程序組成,其源程序清單見(jiàn)附錄2所示。</p><p>  3.1 主程序流程圖</p><p>  主程序是調(diào)用顯示

41、子程序判斷后,讀取溫度值計(jì)算處理顯示數(shù)據(jù),最后發(fā)出溫度轉(zhuǎn)換開(kāi)始的命令,其子程序流程圖如圖3-1所示。 </p><p>  圖3-1 主程序流程圖</p><p>  3.2 計(jì)算溫度子程序流程圖</p><p>  計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其子程序流程圖如圖3-2所示。</p><p>

42、  圖3-2 計(jì)算溫度子程序流程圖</p><p>  3.3 溫度顯示流程圖</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖3-3示。</p><p>  圖3-3 溫度顯示程序流程圖</p><p><b>  第4章 仿真調(diào)試<

43、;/b></p><p><b>  心得體會(huì)</b></p><p>  經(jīng)過(guò)這么長(zhǎng)時(shí)間的畢業(yè)設(shè)計(jì),終于完成了我的數(shù)字溫度計(jì)的設(shè)計(jì),雖然沒(méi)有完全達(dá)到設(shè)計(jì)要求,但從心底里說(shuō),還是高興的,高興之余不得不深思呀!在本次設(shè)計(jì)的過(guò)程中,我發(fā)現(xiàn)很多的問(wèn)題,雖然以前還做過(guò)這樣的設(shè)計(jì)但這次設(shè)計(jì)真的讓我長(zhǎng)進(jìn)了很多,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于硬件設(shè)計(jì)軟件流程的設(shè)計(jì),在單片機(jī)硬件電路

44、設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。系統(tǒng)整體硬件電路包括,傳感器數(shù)據(jù)采集電路,溫度顯示電路,單片機(jī)主板電路等,其中控制器采用單片機(jī)AT89C51,溫度傳感器采用DS18B20,由6位共陽(yáng)極LED數(shù)碼管、位驅(qū)動(dòng)電路、端輸入電路組成,采用動(dòng)態(tài)掃描的方式顯示。LED 的顯示范圍從-55℃到99℃,在一定的溫

45、度范圍內(nèi),不考慮器件導(dǎo)致的誤差的話,精度已經(jīng)達(dá)到±1℃。</p><p>  通過(guò)本次畢業(yè)設(shè)計(jì),我真正的意識(shí)到,有好多的東西,只有我們?nèi)ピ囍隽耍拍苷嬲恼莆?,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)更是如此,程序只有在經(jīng)常的寫與讀的過(guò)程中才能提高,我學(xué)會(huì)了綜合性的運(yùn)用三年內(nèi)所學(xué)知識(shí)分析解決問(wèn)題,拓展了知識(shí)面,動(dòng)手能力

46、得到充分鍛煉,使我受益非淺。這就是我在這次課程設(shè)計(jì)中的最大收獲。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 趙晶,電路設(shè)計(jì)與制版Protel99高級(jí)應(yīng)用,人民郵電出版社,2004</p><p>  [2]李廣弟.單片機(jī)基礎(chǔ)[M].北京航空航天大學(xué)出版社,1994</p><p>  [3

47、]閻石.數(shù)字電子技術(shù)基礎(chǔ)(第三版).高等教育出版社,1989</p><p>  [4]王恩榮.MCS-51單片機(jī)應(yīng)用技術(shù).化學(xué)工業(yè)出版社,2001</p><p>  [5]樓然苗.單片機(jī)課程設(shè)計(jì)指導(dǎo).北京航空航天大學(xué)出版社,2007</p><p><b>  附 錄</b></p><p><b>  附

48、錄1 整機(jī)電路圖</b></p><p><b>  附錄2 源程序</b></p><p>  //***********DS18B20數(shù)字溫度計(jì)C程序****************//</p><p>  //*MCU: AT89C51 //</p>

49、;<p>  //*MCU-crystal: 12 //</p><p>  //*Version: 01 //</p><p>  //*Last Updata: 2010-08-5 //</p>&l

50、t;p>  //*Author: 何林威 //</p><p>  //*Description: //</p><p>  //89s51通過(guò)P3.4讀寫DS18B20內(nèi)的數(shù)據(jù) //</p><p>

51、  //溫度傳感器DS18B20采用器件默認(rèn)的12位轉(zhuǎn)化 //</p><p>  //最大轉(zhuǎn)化時(shí)間750微秒,顯示溫度-55到+99度,顯示精度//</p><p>  //為正負(fù)1度,顯示采用6位LED共陽(yáng)顯示測(cè)溫值 //</p><p>  //P0口為段碼輸出,P2.0~P2.5為位選 /

52、/</p><p>  //************************************************//</p><p>  #include <reg51.h></p><p>  #include <intrins.h> //_nop_();延時(shí)函數(shù)用</

53、p><p>  #define Disdata P0 //段碼輸出口</p><p>  #define discan P2 //掃描口</p><p>  #define uchar unsigned char</p><p>

54、;  #define uint unsigned int</p><p>  sbit DQ=P3^4; //溫度輸入口</p><p>  sbit DIN=P0^7; //LED小數(shù)點(diǎn)控制</p><p>  sbit

55、hold=P1^0;</p><p>  uint h; </p><p>  uint temp;</p><p>  unsigned char presence,flash=0;</p><p>  uchar code ditab[16]=</p><p>  {0x00,0x01,0x01,0

56、x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//溫度小數(shù)部分用查表法</p><p><b>  //</b></p><p>  uchar code dis_7[14]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xf

57、f,0xbf,0x9c,0xc6};</p><p>  //共陽(yáng)LED段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮&quo

58、t; "-" "o" "C" </p><p>  uchar code scan_con[6]={0xc1,0xc2,0xc4,0xc8,0xd0,0xe0}; //列掃描控制字</p><p>  uint data temp_data[2]={0x00,0x00}; //讀出溫度暫

59、放</p><p>  uint data display[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //顯示單元數(shù)據(jù),共6個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用</p><p>  /*****************延時(shí)函數(shù)*************************/</p><p>  void delay(uint t)

60、</p><p><b>  {</b></p><p>  for (;t>0;t--);</p><p><b>  } </b></p><p>  /*******************************************************</p>

61、<p>  顯示掃描函數(shù)1,在溫度檢測(cè)開(kāi)始的時(shí)候顯示HELLO!</p><p>  ********************************************************/</p><p><b>  scan1()</b></p><p>  { discan=scan_con[0]; //位選&

62、lt;/p><p>  Disdata=0xf9; //數(shù)據(jù)顯示</p><p><b>  DIN=0; </b></p><p>  delay(300); //小數(shù)點(diǎn)顯示</p><p>  discan=scan_con[1]; //位選</p><p

63、>  Disdata=0xc0; //數(shù)據(jù)顯示</p><p>  delay(300);</p><p>  discan=scan_con[2]; //位選</p><p>  Disdata=0xc7; //數(shù)據(jù)顯示</p><p>  delay(300);</p><

64、;p>  discan=scan_con[3]; //位選</p><p>  Disdata=0xc7; //數(shù)據(jù)顯示</p><p>  delay(300);</p><p>  discan=scan_con[4]; //位選</p><p>  Disdata=0x86; //數(shù)

65、據(jù)顯示</p><p>  delay(300);</p><p>  discan=scan_con[5]; //位選</p><p>  Disdata=0xc089; //數(shù)據(jù)顯示</p><p>  delay(300);</p><p><b>  }</b><

66、/p><p>  /****************顯示掃描函數(shù)***************************/</p><p><b>  scan()</b></p><p><b>  {</b></p><p><b>  char k;</b></p>

67、<p>  for(k=0;k<6;k++) //6位LED掃描控制</p><p><b>  { </b></p><p>  discan=scan_con[k]; //位選</p><p>  Disdata=dis_7[display[k]];

68、 //數(shù)據(jù)顯示</p><p><b>  if (k==3)</b></p><p>  {DIN=0;} //小數(shù)點(diǎn)顯示</p><p>  delay(200);</p><p><b>  }</b></p><

69、;p><b>  }</b></p><p><b>  //</b></p><p><b>  //</b></p><p>  /****************DS18B20復(fù)位函數(shù)************************/</p><p>  ow_re

70、set(void) </p><p><b>  {</b></p><p>  char presence=1;</p><p>  while(presence)</p><p><b>  {</b></p><p>  while(presence)</p

71、><p><b>  {</b></p><p><b>  DQ=1;</b></p><p><b>  _nop_();</b></p><p>  _nop_();//從高拉倒低</p><p>  DQ=0;

72、 </p><p>  delay(50); //550 us</p><p>  DQ=1; </p><p>  delay(6); //66 us</p><p>

73、  presence=DQ; //presence=0 復(fù)位成功,繼續(xù)下一步</p><p><b>  } </b></p><p>  delay(45); //延時(shí)500 us</p><p>  presence=~DQ; </p><p><b

74、>  }</b></p><p>  DQ=1; //拉高電平</p><p><b>  }</b></p><p><b>  //</b></p><p><b>  //</b></p><p&g

75、t;  /****************DS18B20寫命令函數(shù)************************/</p><p>  void write_byte(uchar val) //向1-WIRE 總線上寫1個(gè)字節(jié)</p><p><b>  { </b></p><p><b>  ucha

76、r i;</b></p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p><b>  DQ=1;</b></p><p><b>  _nop_();</b></p><p>  _

77、nop_(); //從高拉倒低</p><p><b>  DQ=0;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();&

78、lt;/b></p><p>  _nop_(); //5 us</p><p>  DQ=val&0x01; //最低位移出</p><p>  delay(6); //66 us</p><p>  val=val

79、/2; //右移1位</p><p><b>  }</b></p><p><b>  DQ=1;</b></p><p><b>  delay(1);</b></p><p><b>  }</b&g

80、t;</p><p><b>  //</b></p><p>  /****************DS18B20讀1字節(jié)函數(shù)************************/</p><p>  uchar read_byte(void) //從總線上取1個(gè)字節(jié)</p><p><b>  {</b

81、></p><p><b>  uchar i;</b></p><p>  uchar value=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();

82、</p><p>  value>>=1;</p><p>  DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p>  DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p>  if(DQ)va

83、lue|=0x80;</p><p>  delay(6); //66 us</p><p><b>  }</b></p><p><b>  DQ=1;</b></p><p>  return(value);</p&

84、gt;<p><b>  }</b></p><p><b>  //</b></p><p>  /****************讀出溫度函數(shù)************************/</p><p>  read_temp()</p><p><b>  {&l

85、t;/b></p><p>  ow_reset(); //總線復(fù)位</p><p>  write_byte(0xcc); //發(fā)命令</p><p>  write_byte(0x44); //發(fā)轉(zhuǎn)換命令</p>&l

86、t;p>  ow_reset(); </p><p><b>  delay(1);</b></p><p>  write_byte(0xcc); //發(fā)命令</p><p>  write_byte(0xbe);</p><p>

87、  temp_data[0]=read_byte(); //讀溫度值的第字節(jié)</p><p>  temp_data[1]=read_byte(); //讀溫度值的高字節(jié)</p><p>  temp=temp_data[1];</p><p>  temp<<=8;

88、 </p><p>  temp=temp|temp_data[0]; // 兩字節(jié)合成一個(gè)整型變量。</p><p>  return temp; //返回溫度值</p><p><b>  }</b></p><p> 

89、 /****************溫度數(shù)據(jù)處理函數(shù)************************/</p><p>  //二進(jìn)制高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一字節(jié),這個(gè)</p><p>  //字節(jié)的二進(jìn)制轉(zhuǎn)換為十進(jìn)制后,就是溫度值的百、十、個(gè)位值,而剩</p><p>  //下的低字節(jié)的低半字節(jié)轉(zhuǎn)化成十進(jìn)制后,就是溫度值的小數(shù)部分</p&g

90、t;<p>  /********************************************************/</p><p>  work_temp(uint tem)</p><p><b>  {</b></p><p>  uchar n=0;</p><p>  if(tem

91、>6348) // 溫度值正負(fù)判斷</p><p><b>  {</b></p><p>  tem=65536-tem;</p><p><b>  n=1;</b></p><p>  }// 負(fù)溫度求補(bǔ)碼,標(biāo)志位置1

92、 </p><p>  display[6]=tem&0x0f; // 取小數(shù)部分的值</p><p>  display[2]=ditab[display[6]]; // 存入小數(shù)部分顯示值</p><p>  display[6]=tem>>4; // 取中間八位,即整數(shù)部分的值</p>

93、<p>  display[0]=13;</p><p>  display[1]=12; </p><p>  display[5]=(display[6])/100; // 取百位數(shù)據(jù)暫存</p><p>  display[3]=(display[6])%100; // 取后兩位數(shù)據(jù)暫存</p><

94、;p>  display[4]=(display[3])/10; // 取十位數(shù)據(jù)暫存</p><p>  display[3]=(display[3])%10; </p><p>  /******************符號(hào)位顯示判斷**************************/</p><p>  if(!display[5]) &

95、lt;/p><p><b>  {</b></p><p>  display[5]=10; //最高位為0時(shí)不顯示</p><p>  if(!display[4])</p><p><b>  {</b></p><p>  display[4

96、]=10; //次高位為0時(shí)不顯示</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(n)</b></p><p><b>  {</b></p>

97、<p>  display[5]=11; //負(fù)溫度時(shí)最高位顯示"-"</p><p>  } </p><p><b>  }</b></p><p>  /****************主函數(shù)************************/</p><p><

98、;b>  main()</b></p><p><b>  { </b></p><p><b>  int i;</b></p><p>  Disdata=0xff; //初始化端口</p><p>  discan=0xff;</p>

99、;<p>  ow_reset(); //先復(fù)位DS18B20 開(kāi)機(jī)先轉(zhuǎn)換一次</p><p>  write_byte(0xcc); //Skip ROM</p><p>  write_byte(0x44); //發(fā)轉(zhuǎn)換命令 啟動(dòng)DS18B20對(duì)數(shù)據(jù)進(jìn)行采集</p

100、><p>  for(h=0;h<100;h++) //開(kāi)機(jī)顯示"HELLO!"</p><p>  {scan1();//顯示函數(shù)</p><p><b>  }</b></p><p>  while(1) //通過(guò)循環(huán)讀取處理數(shù)據(jù)

101、</p><p>  { if(flash)</p><p>  Disdata=0xff; //DS18B20不正常關(guān)閉顯示 </p><p>  if(hold==0)</p><p>  for(i=0;;i++)</p><p><b>  {</b></

102、p><p><b>  scan();</b></p><p>  if(hold==1) </p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b><

103、/p><p><b>  { </b></p><p>  work_temp(read_temp()); //處理溫度數(shù)據(jù)</p><p><b>  scan(); </b></p><p>  } //顯示溫度值</p>&l

溫馨提示

  • 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)論