版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于51單片機(jī)的溫度計課程設(shè)計
- 數(shù)字溫度計課程設(shè)計---基于51單片機(jī)數(shù)字溫度計設(shè)計
- 數(shù)字溫度計課程設(shè)計---基于51單片機(jī)數(shù)字溫度計設(shè)計
- 基于51單片機(jī)的數(shù)字溫度計課程設(shè)計
- protel課程設(shè)計--基于51單片機(jī)的溫度計
- 基于51單片機(jī)數(shù)字溫度計設(shè)計報告課程設(shè)計
- 課程設(shè)計--基于51單片機(jī)的數(shù)字溫度計的設(shè)計
- 基于單片機(jī)溫度計課程設(shè)計
- 基于單片機(jī)溫度計課程設(shè)計
- 51單片機(jī)課程設(shè)計數(shù)字溫度計報告
- 單片機(jī)溫度計課程設(shè)計
- 單片機(jī)課程設(shè)計-- 基于單片機(jī)的數(shù)字溫度計設(shè)計
- 基于單片機(jī)數(shù)字溫度計課程設(shè)計
- 基于單片機(jī)的數(shù)字溫度計課程設(shè)計
- 基于單片機(jī)的數(shù)字溫度計課程設(shè)計
- 單片機(jī)課程設(shè)計--數(shù)字溫度計
- 單片機(jī)課程設(shè)計--數(shù)字溫度計
- 單片機(jī)課程設(shè)計-數(shù)字溫度計
- 單片機(jī)課程設(shè)計—數(shù)字溫度計
- 單片機(jī)課程設(shè)計---基于單片機(jī)的數(shù)字溫度計設(shè)計
評論
0/150
提交評論