基于51單片機(jī)的溫度計(jì)課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩21頁(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>  《51單片機(jī)》課程設(shè)計(jì)</p><p>  論文題目 以51單片機(jī)為基礎(chǔ)的溫度計(jì) </p><p>  系 別 機(jī)械與材料工程學(xué)院 </p><p>  專 業(yè) xxx </p><p>  班 級(jí) xxx

2、 </p><p>  學(xué) 號(hào) xxxxxxxxxxxx </p><p>  學(xué)生姓名 xxx </p><p>  指導(dǎo)教師 (簽名) </p><p>  完成時(shí)間 2015 年 12 月

3、 31 日</p><p><b>  課程設(shè)計(jì)成績(jī)?cè)u(píng)定表</b></p><p><b>  目 錄</b></p><p><b>  前言- 1 -</b></p><p>  第一章 設(shè)計(jì)任務(wù)及要求- 1 -</p><p>  1.1

4、 設(shè)計(jì)任務(wù)- 1 -</p><p>  1.2 設(shè)計(jì)要求- 1 -</p><p>  第二章 課程設(shè)計(jì)方案及器材選用分析- 1 -</p><p>  2.1設(shè)計(jì)總體方案- 1 -</p><p>  2.2器材選用分析- 3 -</p><p>  2.3 軟件流程圖- 9 -</p>

5、<p>  第三章 調(diào)試性能及分析- 11 -</p><p>  課程設(shè)計(jì)心得- 12 -</p><p>  附錄:程序- 12 -</p><p><b>  前言</b></p><p>  目前,單片機(jī)已經(jīng)在測(cè)控領(lǐng)域中獲得了廣泛的應(yīng)用,它除了可以測(cè)量電信以外,還可以用于溫度、濕度等非電信號(hào)的測(cè)量

6、,能獨(dú)立工作的單片機(jī)溫度檢測(cè)、溫度控制系統(tǒng)已經(jīng)廣泛應(yīng)用很多領(lǐng)域。</p><p>  本次課程設(shè)計(jì),就是用單片機(jī)實(shí)現(xiàn)溫度檢測(cè),傳統(tǒng)的溫度檢測(cè)大多以熱敏電阻為溫度傳感器,但熱敏電阻的可靠性差,測(cè)量溫度準(zhǔn)確率低,而且必須經(jīng)過(guò)專門的接口電路轉(zhuǎn)換成數(shù)字信號(hào)才能由單片機(jī)進(jìn)行處理。本次采用DS18B20數(shù)字溫度傳感器來(lái)實(shí)現(xiàn)基于51單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì)。</p><p>  傳統(tǒng)的溫度計(jì)有反應(yīng)速度慢

7、、讀數(shù)麻煩、測(cè)量精度不高、誤差大等缺點(diǎn)而下面利用集成溫度傳感器AD590設(shè)計(jì)并制作了一款基于AT89S52的4位數(shù)碼管顯示的數(shù)字溫度計(jì),其電路簡(jiǎn)單,軟硬件結(jié)構(gòu)模塊化,易于實(shí)現(xiàn)。 </p><p>  第一章 設(shè)計(jì)任務(wù)及要求</p><p><b>  1.1 設(shè)計(jì)任務(wù)</b></p><p>  現(xiàn)代社會(huì)生活中,多功能的數(shù)字溫度計(jì)可以給我們的生

8、活帶來(lái)很大的方便;支持“一線總線”接口的溫度傳感器簡(jiǎn)化了數(shù)字溫度計(jì)的設(shè)計(jì),降低了成本;以美國(guó)MAXIM/DALLAS半導(dǎo)體公司的單總線溫度傳感器DS18B20為核心,以ATMEL公司的AT89S52為控制器設(shè)計(jì)的DS18B20溫度控制器結(jié)構(gòu)簡(jiǎn)單、測(cè)溫準(zhǔn)確、具有一定控制功能的智能溫度控制器。</p><p>  本次采用DS18B20數(shù)字溫度傳感器來(lái)實(shí)現(xiàn)基于51單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì)。</p>&l

9、t;p><b>  1.2 設(shè)計(jì)要求</b></p><p>  設(shè)計(jì)一個(gè)基于51單片機(jī)的數(shù)字溫度計(jì)。</p><p>  第二章 課程設(shè)計(jì)方案及器材選用分析</p><p><b>  2.1設(shè)計(jì)總體方案</b></p><p>  提及到溫度的檢測(cè),我們首先會(huì)考慮傳統(tǒng)的測(cè)溫元件有熱電偶和熱

10、電阻,而熱電偶和熱電阻測(cè)出的一般都是電壓,再轉(zhuǎn)換成對(duì)應(yīng)的溫度,需要比較多的外部硬件支持,硬件電路復(fù)雜,軟件調(diào)試也復(fù)雜,制作成本高。</p><p>  因此,本數(shù)字溫度計(jì)設(shè)計(jì)采用智能溫度傳感器DS18B20作為檢測(cè)元件,測(cè)溫范圍為-55°C至+125°C,最大分辨率可達(dá)0.0625°C。DS18B20可以直接讀出被測(cè)量的溫度值,而采用三線制與單片機(jī)相連,減少了外部的硬件電路,具有低成

11、本和易使用的特點(diǎn)。</p><p>  按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由三個(gè)模塊組成:主控制器STC89C51,溫度傳感器DS18B20,驅(qū)動(dòng)顯示電路。</p><p>  圖2.1 系統(tǒng)總體框圖</p><p><b>  2.1.1方案論證</b></p><p>  方案一:由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻

12、之類的器件利用其感溫效應(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)換電路,感溫電路比較麻煩。</p><p>  所以,他的設(shè)計(jì)理論不符合本次設(shè)計(jì)的方案要求,應(yīng)繼續(xù)考慮另一可行方案。</p><p>  方案二:進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以

13、這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。</p><p>  因此,從以上兩種方案很容易看出,方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。</p><p>  2.1.2方案二的總體設(shè)計(jì)框圖</p><p>  溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì),控制器采用單片機(jī)AT89S

14、52,溫度傳感器采用DS18B20,用3位LED數(shù)碼管以串口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。DS18B20 采用3 腳PR-35 封裝。</p><p>  圖2.2 總體設(shè)計(jì)方框圖</p><p>  主控制器:?jiǎn)纹瑱C(jī)AT89S52具有低電壓供電和體積小等特點(diǎn),四個(gè)端口只需要兩個(gè)口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。</p><p&g

15、t;<b>  2.2器材選用分析</b></p><p>  2.2.1 DS18B20溫度傳感器</p><p>  1. DS18B20的特點(diǎn)</p><p>  本設(shè)計(jì)的測(cè)溫系統(tǒng)采用芯片DS18B20,DS18B20是DALLAS公司的最新單線數(shù)字溫度傳感器,它的體積更小,適用電壓更寬,更經(jīng)濟(jì)。</p><p>

16、;<b>  實(shí)現(xiàn)方法簡(jiǎn)介</b></p><p>  DS18B20采用外接電源方式工作,一線測(cè)溫一線與STC89C51連接,測(cè)出的數(shù)據(jù)放在寄存器中,將數(shù)據(jù)經(jīng)過(guò)BCD碼轉(zhuǎn)換后送到LED顯示。</p><p>  DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際

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

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

19、源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作; </p><p>  DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM,溫度傳感器,非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL,高速暫存器。</p><p>  64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。溫度

20、報(bào)警觸發(fā)器TH和TL,可通過(guò)軟件寫入戶報(bào)警上下限。</p><p>  DS18B20工作時(shí)寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式,DS18B20出廠時(shí)該位被設(shè)置為0,用戶要去改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來(lái)設(shè)置分辨率。</p><p>  以12位轉(zhuǎn)化為例說(shuō)明溫度高低字節(jié)存放形式及計(jì)算:12位轉(zhuǎn)

21、化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)高低兩個(gè)8位的RAM中,二進(jìn)制中的前面5位是符號(hào)位。如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625才能得到實(shí)際溫度。 </p><p>  高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來(lái)檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)

22、據(jù)的正確性。</p><p>  當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動(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í)

23、,表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。表2-4-2是一部分溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。</p><p>  DS18B20的測(cè)溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩

24、器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開啟時(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ù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶

25、振產(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è)溫度值。</p><p>  另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位

26、脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。 </p><p>  圖2.3 DS18B20封裝結(jié)構(gòu)圖及引腳圖</p><p>  2. DS18B20的使用方法</p><p>  由于DS18B20采用的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對(duì)AT89S51單片機(jī)來(lái)說(shuō),硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的

27、方法來(lái)模擬單總線的協(xié)議時(shí)序來(lái)完成對(duì)DS18B20芯片的訪問(wèn)。</p><p>  由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對(duì)讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。DS18B20有嚴(yán)格的通信協(xié)議來(lái)保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號(hào)的時(shí)序:初始化時(shí)序、讀時(shí)序、寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫時(shí)序開始,如果要求單總線器件回

28、送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動(dòng)讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。</p><p>  對(duì)于DS18B20的讀時(shí)序分為讀0時(shí)序和讀1時(shí)序兩個(gè)過(guò)程。</p><p>  對(duì)于DS18B20的讀時(shí)隙是從主機(jī)把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個(gè)讀時(shí)序過(guò)程,至少需要60us才能完成。</p

29、><p>  DS18B20的寫時(shí)序,對(duì)于DS18B20的寫時(shí)序仍然分為寫0時(shí)序和寫1時(shí)序兩個(gè)過(guò)程,</p><p>  對(duì)于DS18B20寫0時(shí)序和寫1時(shí)序的要求不同,當(dāng)要寫0時(shí)序時(shí),單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當(dāng)要寫1時(shí)序時(shí),單總線被拉低之后,在15us之內(nèi)就得釋放單線</p><p&g

30、t;  2.2.2 AT89S52單片機(jī)介紹</p><p>  1. AT89S52的主要性能</p><p>  與MCS-51單片機(jī)產(chǎn)品兼容,8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器、 1000次擦寫周期、 全靜態(tài)操作:0Hz~33Hz 、三級(jí)加密程序存儲(chǔ)器 、 32個(gè)可編程I/O口線 、三個(gè)16位定時(shí)器/計(jì)數(shù)器 八個(gè)中斷源 、全雙工UART串行通道、 低功耗空閑和掉電模式 、掉電后中

31、斷可喚醒 、看門狗定時(shí)器 、雙數(shù)據(jù)指針 、掉電標(biāo)識(shí)符 。</p><p>  2. AT89S52的功能特性</p><p>  AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯

32、片上,擁有靈巧的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 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,C

33、PU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash AT89S52 </p><p>  P0 口:P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。 </p>

34、<p>  當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。 </p><p>  在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è)TTL 邏輯電平。對(duì)P

35、1 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器2 的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。 </p><p>  在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。 </p><p><

36、b>  引腳號(hào)第二功能 </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)編程用)

37、</p><p>  P1.7 SCK(在系統(tǒng)編程用) </p><p>  P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng)4 個(gè) </p><p>  TTL 邏輯電平。對(duì)P2 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入 口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問(wèn)外

38、部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX @DPTR) 時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用 8位地址(如MOVX @RI)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。 </p><p>  在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。 </p><p>  P3 口:P3 口是一個(gè)具有內(nèi)部上

39、拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P3 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 P3口亦作為AT89S52特殊功能(第二功能)使用,如下所示。 在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。 </p><p><b>  端口引腳 第二功能</b&g

40、t;</p><p>  P3.0 RXD(串行輸入口)</p><p>  P3.1 TXD(串行輸出口)</p><p>  P3.2 INT0(外中斷0)</p><p>  P3.3 INT1(外中斷1)</p><p>  P3.4 T0(定時(shí)/計(jì)數(shù)器0)</p><p>  P3.5

41、 T1(定時(shí)/計(jì)數(shù)器1)</p><p>  P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)</p><p>  P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p>  此外,P3口還接收一些用于FLASH閃存編程和程序校驗(yàn)的控制信號(hào)。</p><p>  RST——復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將是單片機(jī)復(fù)位。&

42、lt;/p><p>  ALE/PROG——當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。</p><p>  對(duì)FLASH存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。</p&g

43、t;<p>  如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無(wú)效。</p><p>  PSEN——程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C52由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PS

44、EN有效,即輸出兩個(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)。</p><p>  如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器的指令。</p

45、><p>  FLASH存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。</p><p>  圖2.4 封裝AT89S52引腳圖</p><p><b>  2.3 軟件流程圖</b></p><p>  系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度

46、子程序,顯示數(shù)據(jù)刷新子程序等。</p><p>  2.3.1 主程序</p><p>  主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,其程序流程見圖3.6所示。</p><p>  圖 3.5主程序流程圖 圖3.6 讀溫度流程圖&

47、lt;/p><p>  2.3.2 讀溫度子程序</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖3.7示</p><p>  圖3.7 溫度轉(zhuǎn)換流程圖</p><p>  2.3.3 溫度轉(zhuǎn)換命令子程序</p><p>  

48、溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率時(shí)轉(zhuǎn)換時(shí)間約為750ms,在本程序設(shè)計(jì)中采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如圖3.8所示</p><p>  2.3.4 計(jì)算溫度子程序</p><p>  計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖3.9所示</p><p&g

49、t;  圖3.8 計(jì)算溫度流程圖 圖3.9 顯示數(shù)據(jù)刷新流程圖 </p><p>  第三章 調(diào)試性能及分析</p><p>  系統(tǒng)的性能調(diào)試以主程序?yàn)橹鳌S布{(diào)試比較簡(jiǎn)單,首先檢查電路的焊接是否正確,然后用萬(wàn)用表測(cè)試。軟件調(diào)試可以先編寫顯示程序并進(jìn)行硬件的正確性檢驗(yàn),然后分別進(jìn)行主程序、從程序的編寫和調(diào)試,由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,

50、因此對(duì)DS18B20進(jìn)行編程時(shí)必須嚴(yán)格地保證讀寫時(shí)序,否則將無(wú)法讀取測(cè)量結(jié)果。</p><p>  性能測(cè)試可用制作的溫度計(jì)和已有的成品溫度計(jì)來(lái)同時(shí)測(cè)量比較,由于DS18B20精度較高,所以誤差指標(biāo)可以限制在0.1°C以內(nèi),另外,-55°C至+125°C的測(cè)溫范圍使得該溫度計(jì)完全適用于一般的應(yīng)用場(chǎng)合,其低電壓供電的特性可做成電池供電的手持電子溫度計(jì)。</p><p

51、>  最開始的時(shí)候DS18B20僅靠杜邦線與單片機(jī)連接,但傳感器較為敏感,容易造成程序進(jìn)入死循環(huán)。最后決定將傳感器另外焊接在一塊洞洞板上。</p><p><b>  課程設(shè)計(jì)心得</b></p><p>  通過(guò)本次的課程設(shè)計(jì)我知道,課程設(shè)計(jì)一般強(qiáng)調(diào)能力培養(yǎng)為主,在獨(dú)立完成設(shè)計(jì)任務(wù)的同時(shí),還要注意其他幾方面能力的培養(yǎng)與提高,如獨(dú)立工作能力與創(chuàng)造力;綜合運(yùn)用專業(yè)

52、及基礎(chǔ)知識(shí)的能力,解決實(shí)際工程技術(shù)問(wèn)題的能力;查閱圖書資料、產(chǎn)品手冊(cè)和各種工具書的能力;工程繪圖的能力;書寫技術(shù)報(bào)告和編制技術(shù)資料的能力。在專業(yè)知識(shí)與研究方法方面為日后的畢業(yè)設(shè)計(jì)乃至畢業(yè)后的工作奠定良好的基礎(chǔ)</p><p><b>  參考文獻(xiàn) </b></p><p>  [1]  郭天祥.新概念51單片機(jī)C語(yǔ)言教程.北京[M]:電子工業(yè)出版社,2015</

53、p><p>  [2]  測(cè)溫芯片DS18B20詳細(xì)解讀.http://www.ndiy.cn/thread-24274-1-1.html.2013-10-6</p><p><b>  附錄:程序</b></p><p>  #include<reg52.h></p><p>  #define uchar u

54、nsigned char </p><p>  #define uint unsigned int</p><p>  sbit ds=P3^7; //溫度傳感器信號(hào)線</p><p>  sbit beep=P1^0;</p><p>  sbit D1=P2^7;</p><p>  sbit D2=P2^6;&l

55、t;/p><p>  sbit D3=P2^5;</p><p>  sbit D4=P2^4;</p><p>  sbit CLK164=P3^4;</p><p>  sbit DAT164=P3^6;</p><p>  uchar shumaguan[4]={0};</p><p>  u

56、int temp; //存放整形溫度數(shù)據(jù)</p><p>  uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//,</p><p>  uchar code tablen[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; </p&

57、gt;<p>  void delay(uint x) </p><p><b>  {</b></p><p>  uchar i,j;</p><p>  for(i=x;i>0;i--)</p><p>  for(j=110;j>0;j--);</p><p>

58、<b>  }</b></p><p>  void dsreset(void) //復(fù)位</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  ds=0;</b></p>&

59、lt;p><b>  i=103;</b></p><p>  while(i>0)i--;</p><p><b>  ds=1;</b></p><p><b>  i=4;</b></p><p>  while(i>0)i--;</p>

60、<p><b>  }</b></p><p>  bit readbit(void) //讀一位數(shù)據(jù) bit定義2位</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  bit dat;&

61、lt;/b></p><p>  ds=0;i++; //延時(shí)</p><p>  ds=1;i++;i++;</p><p><b>  dat=ds;</b></p><p>  i=8;while(i>0)i--;</p><p>  return(dat);</p>

62、;<p><b>  }</b></p><p>  uchar readbyte(void) //讀一個(gè)字節(jié)數(shù)據(jù)</p><p><b>  {</b></p><p>  uchar i,j,dat;</p><p><b>  dat=0;</b></

63、p><p>  for(i=1; i<=8; i++)</p><p><b>  {</b></p><p>  j=readbit();</p><p>  dat=(j<<7)|(dat>>1);</p><p><b>  }</b><

64、/p><p>  return(dat);</p><p><b>  }</b></p><p>  void writebyte(uchar dat) //向18b20寫一字節(jié)數(shù)據(jù)</p><p><b>  {</b></p><p><b>  uint i;&

65、lt;/b></p><p><b>  uchar j;</b></p><p>  bit testb;</p><p>  for(j=1;j<=8;j++)</p><p><b>  {</b></p><p>  testb=dat&0x01;

66、</p><p>  dat=dat>>1;</p><p>  if(testb) //寫1</p><p><b>  {</b></p><p><b>  ds=0;</b></p><p><b>  i++;i++;</b>&l

67、t;/p><p><b>  ds=1;</b></p><p>  i=8;while(i>0)i--;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>

68、;</p><p><b>  ds=0;</b></p><p>  i=8;while(i>0)i--;</p><p><b>  ds=1;</b></p><p><b>  i++;i++;</b></p><p><b> 

69、 } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void sendchange(void) //向18b20發(fā)送轉(zhuǎn)換溫度命令</p><p><b>  {</b></p><

70、p>  dsreset();</p><p><b>  delay(1);</b></p><p>  writebyte(0xcc); //寫跳過(guò)讀rom命令</p><p>  writebyte(0x44); //寫溫度轉(zhuǎn)換命令</p><p><b>  } </b></p&g

71、t;<p>  uint get_temp() //讀取寄存器中存儲(chǔ)的溫度數(shù)據(jù)</p><p><b>  { </b></p><p>  uchar a,b;</p><p>  dsreset();</p><p><b>  delay(1);</b></p>

72、<p>  writebyte(0xcc);</p><p>  writebyte(0xbe);</p><p>  a=readbyte(); //讀低八位</p><p>  b=readbyte(); //讀高八位</p><p><b>  temp=b;</b></p><p&

73、gt;  temp<<=8; //將高低兩個(gè)字節(jié)合成一個(gè)整形變量</p><p>  temp=temp|a;</p><p>  temp=temp*62500/10000; //溫度在寄存器中默認(rèn)為12位,分辨率為0.0625度</p><p>  return temp; </p><p><b>  }</

74、b></p><p>  void Put164(unsigned char tmp)</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</

75、b></p><p><b>  CLK164=0;</b></p><p>  if(tmp&0x80)</p><p><b>  DAT164=1;</b></p><p><b>  else </b></p><p><b&

76、gt;  DAT164=0;</b></p><p><b>  CLK164=1;</b></p><p><b>  tmp<<=1;</b></p><p><b>  }</b></p><p><b>  }</b><

77、;/p><p>  void SET(uchar j)</p><p><b>  {</b></p><p><b>  switch(j)</b></p><p><b>  {</b></p><p>  case 1:D1=0;D2=1;D3=1;D

78、4=1;break;</p><p>  case 2:D1=1;D2=0;D3=1;D4=1;break;</p><p>  case 3:D1=1;D2=1;D3=0;D4=1;break;</p><p>  case 4:D1=1;D2=1;D3=1;D4=0;break;</p><p>  default:D1=1;D2=1;D

79、3=1;D4=1;break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void shumaguansaomiao()</p><p><b>  {</b></p><p><b>

80、  SET(0);</b></p><p>  Put164(table[shumaguan[0]]);</p><p><b>  SET(1);</b></p><p>  delay(70);</p><p><b>  SET(0);</b></p><p&g

81、t;  Put164(tablen[shumaguan[1]]);</p><p><b>  SET(2);</b></p><p>  delay(70);</p><p><b>  SET(0);</b></p><p>  Put164(table[shumaguan[2]]);</

82、p><p><b>  SET(3);</b></p><p>  delay(70);</p><p><b>  SET(0);</b></p><p>  Put164(table[shumaguan[3]]);</p><p><b>  SET(4);<

83、/b></p><p><b>  }</b></p><p>  void shuzifenli(uint v)</p><p><b>  {</b></p><p>  shumaguan[0]=v/1000%10;</p><p>  shumaguan[1]=

84、v/100%10;</p><p>  shumaguan[2]=v/10%10;</p><p>  shumaguan[3]=v%10;</p><p>  shumaguansaomiao(); //掃描一次數(shù)碼管</p><p><b>  }</b></p><p>  void mai

85、n()</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  sendchange();</p><p>  delay(100);</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)論