基于51單片機(jī)的溫度計課程設(shè)計_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《51單片機(jī)》課程設(shè)計</p><p>  論文題目 以51單片機(jī)為基礎(chǔ)的溫度計 </p><p>  系 別 機(jī)械與材料工程學(xué)院 </p><p>  專 業(yè) xxx </p><p>  班 級 xxx

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

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

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

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

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

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

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

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

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

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

12、之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p>  所以,他的設(shè)計理論不符合本次設(shè)計的方案要求,應(yīng)繼續(xù)考慮另一可行方案。</p><p>  方案二:進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計中,大多都是使用傳感器,所以

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

14、52,溫度傳感器采用DS18B20,用3位LED數(shù)碼管以串口傳送數(shù)據(jù)實(shí)現(xiàn)溫度顯示。DS18B20 采用3 腳PR-35 封裝。</p><p>  圖2.2 總體設(shè)計方框圖</p><p>  主控制器:單片機(jī)AT89S52具有低電壓供電和體積小等特點(diǎn),四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要,很適合便攜手持式產(chǎn)品的設(shè)計使用系統(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è)計的測溫系統(tǒng)采用芯片DS18B20,DS18B20是DALLAS公司的最新單線數(shù)字溫度傳感器,它的體積更小,適用電壓更寬,更經(jīng)濟(jì)。</p><p>

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

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

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

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

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

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

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

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

24、器產(chǎn)生的時鐘脈沖進(jìn)行計數(shù)進(jìn)而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55℃所對應(yīng)的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。</p><p>  減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶

25、振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)器門仍未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測溫度值。</p><p>  另外,由于DS18B20單線通信功能是分時完成的,它有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位

26、脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(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ù)的雙向傳輸,而對AT89S51單片機(jī)來說,硬件上并不支持單總線協(xié)議,因此,我們必須采用軟件的

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

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

29、><p>  DS18B20的寫時序,對于DS18B20的寫時序仍然分為寫0時序和寫1時序兩個過程,</p><p>  對于DS18B20寫0時序和寫1時序的要求不同,當(dāng)要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當(dāng)要寫1時序時,單總線被拉低之后,在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存儲器、 1000次擦寫周期、 全靜態(tài)操作:0Hz~33Hz 、三級加密程序存儲器 、 32個可編程I/O口線 、三個16位定時器/計數(shù)器 八個中斷源 、全雙工UART串行通道、 低功耗空閑和掉電模式 、掉電后中

31、斷可喚醒 、看門狗定時器 、雙數(shù)據(jù)指針 、掉電標(biāo)識符 。</p><p>  2. AT89S52的功能特性</p><p>  AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲器在系統(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 口線,看門狗定時器,2個數(shù)據(jù)指針,三個16 位 定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,C

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

34、<p>  當(dāng)訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。 </p><p>  在flash編程時,P0口也用來接收指令字節(jié);在程序校驗(yàn)時,輸出指令字節(jié)。程序校驗(yàn) 時,需要外部上拉電阻。 </p><p>  P1 口:P1 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P1 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平。對P

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

36、b>  引腳號第二功能 </b></p><p>  P1.0 T2(定時器/計數(shù)器T2的外部計數(shù)輸入),時鐘輸出 </p><p>  P1.1 T2EX(定時器/計數(shù)器T2的捕捉/重載觸發(fā)信號和方向控制) </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 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動4 個 </p><p>  TTL 邏輯電平。對P2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入 口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外

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

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

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

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

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

44、EN有效,即輸出兩個脈沖,在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。</p><p>  EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。</p><p>  如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器的指令。</p

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

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

47、lt;/p><p>  2.3.2 讀溫度子程序</p><p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯時不進(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位分辨率時轉(zhuǎn)換時間約為750ms,在本程序設(shè)計中采用1s顯示程序延時法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如圖3.8所示</p><p>  2.3.4 計算溫度子程序</p><p>  計算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖3.9所示</p><p&g

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

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

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

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

53、p><p>  [2]  測溫芯片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; //溫度傳感器信號線</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++; //延時</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) //讀一個字節(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); //寫跳過讀rom命令</p><p>  writebyte(0x44); //寫溫度轉(zhuǎn)換命令</p><p><b>  } </b></p&g

71、t;<p>  uint get_temp() //讀取寄存器中存儲的溫度數(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; //將高低兩個字節(jié)合成一個整形變量</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論