

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)設計說明書</b></p><p> 設計題目: 基于單片機的數(shù)字溫度計的設計 </p><p> 專 業(yè): 電子信息工程技術 </p><p> 班 級: -1 </p><p> 學 號:
2、 </p><p> 姓 名: </p><p> 指導教師: </p><p><b> 二O一O年八月五日</b></p><p><b> 畢業(yè)設計任務書</b></p
3、><p> 備注:任務書由指導教師填寫,一式二份。其中學生一份,指導教師一份。</p><p><b> 目 錄</b></p><p><b> 摘 要1</b></p><p><b> 緒 論2</b></p><p> 第1章 數(shù)字溫度
4、計設計方案3</p><p> 1.1 數(shù)字溫度計設計方案論證3</p><p> 1.2 方案設計3</p><p> 1.3 設計要求和實現(xiàn)的功能4</p><p> 第2章 硬件電路設計5</p><p> 2.1 8051 單片機的基本組成5</p><p> 2
5、.1.1 各部分作用或功能介紹如下: 5</p><p> 2.2 顯示電路6</p><p> 2.3 溫度傳感器7</p><p> 2.3.1 DS18B20的簡介7</p><p> 2.3.2 DS18B20的兩個表格9</p><p> 2.3.3 DS18B20的測溫原理10<
6、/p><p> 2.3.4 DS18B20的時序設置11</p><p> 第3章 軟件設計12</p><p> 3.1 主程序流程圖12</p><p> 3.2 計算溫度子程序流程圖13</p><p> 3.3 溫度顯示流程圖14</p><p> 第4章 仿真調試1
7、5</p><p><b> 參考文獻17</b></p><p><b> 附 錄18</b></p><p> 附錄1 整機電路圖18</p><p> 附錄2 源程序19</p><p><b> 摘 要</b></p>
8、;<p> 本設計所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確,由于本設計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行A/D轉換后,就可以用單片機進行數(shù)據的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設計需要用到A/D轉換電路,感溫電路比較麻煩。其輸出溫度采用數(shù)字顯示,主要用于對測溫比較準確的場所,或科研實驗室使用,該設計控制器采用單
9、片機8051,溫度傳感器采用DS18B20,用6位共陽極LED數(shù)碼管實現(xiàn)溫度顯示。</p><p> 隨著時代的進步和發(fā)展,單片機技術已經普及到我們生活,工作,科研,各個領域,已經成為一種比較成熟的技術,本文將介紹一種基于單片機控制的數(shù)字溫度計。</p><p> 關鍵詞:51單片機;溫度計;溫度傳感器。</p><p><b> 緒 論</b
10、></p><p> 單片機的誕生標志著計算機正式形成了通用計算機系統(tǒng)和嵌入式計算機系統(tǒng)兩個分支。通用計算機系統(tǒng)主要用于海量高速數(shù)值運算,不必兼顧控制功能,其數(shù)據總線的寬度不斷更新,從8位、16位迅速過渡到32位、64位,并且不斷提高運算速度和完善通用操作系統(tǒng),以突出其高速海量數(shù)值運算的能力,在數(shù)據處理、模擬仿真、人工智能、圖像處理、多媒體、網絡通信中得到了廣泛應用;單片機作為最典型的嵌入式系統(tǒng),由于其微
11、小的體積和極低的成本,廣泛應用于家用電器、機器人、儀器儀表、工業(yè)控制單元、辦公自動化設備以及通信產品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化工具。因此,單片機的出現(xiàn)大大促進了現(xiàn)代計算機技術的飛速發(fā)展,成為近代計算機技術發(fā)展史上一個重要里程碑。</p><p> 隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計就是一個典型的例子,但人們對它的要求越來越高
12、,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設施就需要從數(shù)單片機技術入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。本設計所介紹的數(shù)字溫度計與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫準確,其輸出溫度采用數(shù)字顯示,主要用于對測溫比較準確的場所,或科研實驗室使用,該設計控制器使用單片機8051,測溫傳感器使用DS18B20,用6位共陰極LED數(shù)碼管通過8279實現(xiàn)溫度顯示。能準確達到以上要求。</p><p&g
13、t; 第1章 數(shù)字溫度計設計方案</p><p> 1.1 數(shù)字溫度計設計方案論證</p><p><b> 方案1</b></p><p> 由于本設計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行A/D轉換后,就可以用單片機進行數(shù)據的處理,在顯示電路上,就可以將被測溫度顯示出來,這
14、種設計需要用到A/D轉換電路,感溫電路比較麻煩。</p><p><b> 方案2</b></p><p> 進而考慮到用溫度傳感器,在單片機電路設計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉換,就可以滿足設計要求。</p><p> 選擇:傳統(tǒng)
15、的溫度檢測電路主要是利用熱敏電阻進行感溫后,再通過A/D轉換后讀取溫度值,但電路較為復雜,并且誤差范圍較大,本設計采用溫度傳感器DS18B20,它無須其它任何外圍元件便可實現(xiàn)溫度檢測</p><p> 1.2 方案2的設計</p><p> 溫度計電路設計總體設計方框圖如圖1-1所示。</p><p> 圖1-1 數(shù)字溫度計總體設計方框圖</p>
16、<p> 1.3 設計要求和實現(xiàn)的功能 </p><p> 1.用溫度傳感器測試溫度,用6位LED數(shù)碼管顯示溫度;2.測試溫度的范圍為-55~99℃,溫度誤差為±1℃;3.能進行仿真</p><p> 第2章 硬件電路設計</p><p> 系統(tǒng)整體硬件電路包括單片機控制器,溫度傳感器。本設計采用AT89C51為控制器,DS18B2
17、0為溫度傳感器與單片機的接口電路。</p><p> 2.1 AT89C51單片機的組成</p><p> 圖2-1 AT89C51單片機原理圖</p><p> 2.1.1 各部分作用或功能介紹如下:</p><p> 1.中央處理器(CPU)</p><p> 中央處理器是單片機的核心,完成運算和控制
18、功能。MCS-51的CPU能處理8位二進制數(shù)或代碼。</p><p> 2.內部數(shù)據存儲器(內部RAM)</p><p> 8051芯片中共有256個RAM單元,但其中后128單元被專用寄存器占用,能作為寄存器供用戶使用的只是前128單元,用于存放可讀寫的數(shù)據。因此通常所說的內部數(shù)據存儲器就是指前128單元,簡稱內部RAM。</p><p> 3.內部程序存儲
19、器(內部ROM)</p><p> 8051共有4KB掩膜ROM,用于存放程序、原始數(shù)據或表格,因此稱之為程序存儲器,簡稱內部ROM。</p><p><b> 4.定時器/計數(shù)器</b></p><p> 8051共有2個16位的定時器/計數(shù)器,以實現(xiàn)定時或計數(shù)功能,并以其定時或計數(shù)結果對計算機進行控制。</p><
20、p><b> 5.并行I/O口</b></p><p> MCS-51共有四個8位的I/O口(P0、P1、P2、P3),以實現(xiàn)數(shù)據的并行輸入輸出。在實訓中我們已經使用了P1口,通過P1口連接8個發(fā)光二極管。</p><p><b> 6.串行口</b></p><p> MCS-51單片機有一個全雙工的串行口
21、,以實現(xiàn)單片機和其它設備之間的串行數(shù)據傳送。該串行口功能較強,既可作為全雙工異步通信收發(fā)器使用,也可作為同步移位器使用。</p><p><b> 7.中斷控制系統(tǒng)</b></p><p> MCS-51單片機的中斷功能較強,以滿足控制應用的需要。8051共有5個中斷源,即外中斷2個,定時/計數(shù)中斷2個,串行中斷1個。全部中斷分為高級和低級共二個優(yōu)先級別。<
22、/p><p><b> 2.2 顯示電路</b></p><p> 由6位共陰極LED數(shù)碼管、位驅動電路、端輸入電路組成,采用動態(tài)掃描的方式顯示?;镜陌雽w數(shù)碼管是由八個條狀發(fā)光二極管芯片按圖2-3排列而成的。可實現(xiàn)0~9的顯示。其具體結構有“反射罩式”、“條形八段式”及“單片集成式多位數(shù)字式”等。用6位共陽極LED數(shù)碼管實現(xiàn)溫度顯示。能準確達到以上要求。</
23、p><p><b> 圖2-3 數(shù)碼管</b></p><p><b> 2.3 溫度傳感器</b></p><p> 2.3.1 DS18B20的簡介</p><p> DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能
24、直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下:</p><p> 1.獨特的單線接口僅需要一個端口引腳進行通信;</p><p> 2.多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網功能;</p><p><b> 3.無須外部器件;</b></p>
25、<p> 4.可通過數(shù)據線供電,電壓范圍為3.0~5.5V;</p><p><b> 5.零待機功耗;</b></p><p> 6.溫度以9或12位數(shù)字;</p><p> 7.用戶可定義報警設置;</p><p> 8.報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;</p&
26、gt;<p> DS18B20采用3腳PR-35封裝或8腳SOIC封裝,其內部結構框圖如圖2-5所示。</p><p> 圖2-5 DS18B20的內部結構</p><p> 64ROM的結構開始8位是產品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警觸發(fā)器TH和TL,
27、可通過軟件寫入戶報警上下限。 DS18B20溫度傳感器的內部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節(jié)的存儲器,結構如圖2-5所示。頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節(jié),為配置寄存器,它的內容用于確定溫度值的數(shù)字轉換分辨率。</p><p> DS18B20工作時寄存器中的分辨率轉換為相應精
28、度的溫度數(shù)值。該字節(jié)各位的定義如圖2-6所示。低5位一直為1,TM是工作模式位,用于設置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設置為0,用戶要去改動,R1和R0決定溫度轉換的精度位數(shù),來設置分辨率。</p><p> DS18B20溫度傳感器的內部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為9字節(jié)的存儲器,結構如圖2-6所示。</p
29、><p> 圖2-6 DS18B20字節(jié)定義</p><p> 由圖2-6可見,其中1、2字節(jié)用來存放當前溫度,1為低8位,2為高8位。字節(jié)3、4用來預置報警溫度的上下限,字節(jié)5用于配置寄存器,用于確定溫度數(shù)據位數(shù),字節(jié)6、7、8均為保留字節(jié),字節(jié)9存放前8個字節(jié)循環(huán)冗余校驗碼(CRC)。</p><p> DS18B20完成溫度轉換后,就把測得的溫度值與RAM
30、中的TH、TL字節(jié)內容作比較。若T>TH或T<TL,則將該器件內的報警標志位置位,并對主機發(fā)出的報警搜索命令作出響應。因此,可用多只DS18B20同時測量溫度并進行報警搜索。</p><p> 在64位ROM的最高有效字節(jié)中存儲有循環(huán)冗余檢驗碼(CRC)。主機ROM的前56位來計算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機收到的ROM數(shù)據是否正確。</p><p>
31、2.3.2 DS18B20的兩個空格</p><p> 由表2-7可見,DS18B20溫度轉換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據轉換時間越長。</p><p> 表2-7 DS18B20溫度轉換時間表</p><p> DS18B20溫度轉換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據轉換時間越長。因此,在實際應用中要將分辨率和轉換時間權衡考慮
32、。</p><p> 當DS18B20接收到溫度轉換命令后,開始啟動轉換。轉換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機可以通過單線接口讀出該數(shù)據,讀數(shù)據時低位在先,高位在后,數(shù)據格式以0.0625℃/LSB形式表示。</p><p> 當符號位S=0時,表示測得的溫度值為正值,可以直接將二進制位轉換為十進制;當符號位S=1時,表示測得
33、的溫度值為負值,要先將補碼變成原碼,再計算十進制數(shù)值。如表2-8是一部分溫度值對應的二進制溫度數(shù)據。</p><p> 表2-8一部分溫度對應值表</p><p> 2.3.3 DS18B20的測溫原理</p><p> 器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產生固定頻率的脈沖信號送給減法計數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所
34、產生的信號作為減法計數(shù)器2的脈沖輸入。器件中還有一個計數(shù)門,當計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產生的時鐘脈沖進行計數(shù)進而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55℃所對應的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,計數(shù)器1和溫度寄存器被預置在-55℃所對應的一個基數(shù)值。</p><p> 減法計數(shù)器1對低溫度系數(shù)晶振產生的脈沖信號進行減法計數(shù),當減法計數(shù)器
35、1的預置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產生的脈沖信號進行計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計數(shù)器的預置值,只要計數(shù)器門仍未關閉就重復上述過程,直到溫度寄存器值大致被測溫度值另外,由于DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的
36、各種操作按協(xié)議進行。操作協(xié)議為:初使化DS18B20(發(fā)復位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據。DS18B20溫度傳感器與單片機的接口為1接地,2接P1.0口,3接4.7K上拉電阻。</p><p> 另外,由于DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)DS18B20的各種操作按協(xié)議進行。操作協(xié)議為:初始化DS1820(發(fā)復位脈沖)→發(fā)ROM功能命令→
37、發(fā)存儲操作命令→處理數(shù)據。</p><p> 2.3.4 DS18B20的時序設置</p><p><b> 1.1復位時序</b></p><p> 復位使用DS18B20時,首先需將其復位,然后才能執(zhí)行其它命令。復位時,主機將數(shù)據線拉為低電平并保持480us~960us,然后釋放數(shù)據線,再由上拉電阻將數(shù)據線拉高15~60us,等待D
38、S18B20發(fā)出存在脈沖,存在脈沖有效時間為60~240us,這樣,就完成了復位操作。</p><p><b> 1.2.寫時序</b></p><p> 在主機對DS18B20寫數(shù)據時,先將數(shù)據線置為高電平,再變?yōu)榈碗娖?,該低電平應大于lus。在數(shù)據線變?yōu)榈碗娖胶?5us內,根據寫“1”或寫“0”使數(shù)據線變高或繼續(xù)為低。DS18B20將在數(shù)據線變成低電平后15u
39、s~60US內對數(shù)據線進行采樣。要求寫入DS18B20的數(shù)據持續(xù)時間應大6Ous而小于120us,兩次寫數(shù)據之間的時間間隔應大于lus。</p><p><b> 1.3讀時序</b></p><p> 讀時隙當主機從DS18B20讀數(shù)據時,主機先將數(shù)據線置為高電平,再變?yōu)榈碗娖剑摰碗娖綉笥趌us,然后釋放數(shù)據線,使其變?yōu)楦唠娖健S18B20在數(shù)據線從高電平
40、變?yōu)榈碗娖降?5us內將數(shù)據送到數(shù)據線上。主機可在15us后讀取數(shù)據線。</p><p><b> 第3章 軟件設計</b></p><p> 本數(shù)字溫度計系統(tǒng)軟件由主程序、計算溫度子程序、顯示溫度子程序組成,其源程序清單見附錄2所示。</p><p> 3.1 主程序流程圖</p><p> 主程序是調用顯示
41、子程序判斷后,讀取溫度值計算處理顯示數(shù)據,最后發(fā)出溫度轉換開始的命令,其子程序流程圖如圖3-1所示。 </p><p> 圖3-1 主程序流程圖</p><p> 3.2 計算溫度子程序流程圖</p><p> 計算溫度子程序將RAM中讀取值進行BCD碼的轉換運算,并進行溫度值正負的判定,其子程序流程圖如圖3-2所示。</p><p>
42、 圖3-2 計算溫度子程序流程圖</p><p> 3.3 溫度顯示流程圖</p><p> 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數(shù)據的改寫。其程序流程圖如圖3-3示。</p><p> 圖3-3 溫度顯示程序流程圖</p><p><b> 第4章 仿真調試<
43、;/b></p><p><b> 心得體會</b></p><p> 經過這么長時間的畢業(yè)設計,終于完成了我的數(shù)字溫度計的設計,雖然沒有完全達到設計要求,但從心底里說,還是高興的,高興之余不得不深思呀!在本次設計的過程中,我發(fā)現(xiàn)很多的問題,雖然以前還做過這樣的設計但這次設計真的讓我長進了很多,單片機課程設計重點就在于硬件設計軟件流程的設計,在單片機硬件電路
44、設計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉換,就可以滿足設計要求。系統(tǒng)整體硬件電路包括,傳感器數(shù)據采集電路,溫度顯示電路,單片機主板電路等,其中控制器采用單片機AT89C51,溫度傳感器采用DS18B20,由6位共陽極LED數(shù)碼管、位驅動電路、端輸入電路組成,采用動態(tài)掃描的方式顯示。LED 的顯示范圍從-55℃到99℃,在一定的溫
45、度范圍內,不考慮器件導致的誤差的話,精度已經達到±1℃。</p><p> 通過本次畢業(yè)設計,我真正的意識到,有好多的東西,只有我們去試著做了,才能真正的掌握,只學習理論有些東西是很難理解的,更談不上掌握。在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經常的寫與讀的過程中才能提高,我學會了綜合性的運用三年內所學知識分析解決問題,拓展了知識面,動手能力
46、得到充分鍛煉,使我受益非淺。這就是我在這次課程設計中的最大收獲。</p><p><b> 參考文獻</b></p><p> [1] 趙晶,電路設計與制版Protel99高級應用,人民郵電出版社,2004</p><p> [2]李廣弟.單片機基礎[M].北京航空航天大學出版社,1994</p><p> [3
47、]閻石.數(shù)字電子技術基礎(第三版).高等教育出版社,1989</p><p> [4]王恩榮.MCS-51單片機應用技術.化學工業(yè)出版社,2001</p><p> [5]樓然苗.單片機課程設計指導.北京航空航天大學出版社,2007</p><p><b> 附 錄</b></p><p><b> 附
48、錄1 整機電路圖</b></p><p><b> 附錄2 源程序</b></p><p> //***********DS18B20數(shù)字溫度計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通過P3.4讀寫DS18B20內的數(shù)據 //</p><p>
51、 //溫度傳感器DS18B20采用器件默認的12位轉化 //</p><p> //最大轉化時間750微秒,顯示溫度-55到+99度,顯示精度//</p><p> //為正負1度,顯示采用6位LED共陽顯示測溫值 //</p><p> //P0口為段碼輸出,P2.0~P2.5為位選 /
52、/</p><p> //************************************************//</p><p> #include <reg51.h></p><p> #include <intrins.h> //_nop_();延時函數(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ù)點控制</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> //共陽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ù)據,共6個數(shù)據和一個運算暫用</p><p> /*****************延時函數(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,在溫度檢測開始的時候顯示HELLO!</p><p> ********************************************************/</p><p><b> scan1()</b></p><p> { discan=scan_con[0]; //位選&
62、lt;/p><p> Disdata=0xf9; //數(shù)據顯示</p><p><b> DIN=0; </b></p><p> delay(300); //小數(shù)點顯示</p><p> discan=scan_con[1]; //位選</p><p
63、> Disdata=0xc0; //數(shù)據顯示</p><p> delay(300);</p><p> discan=scan_con[2]; //位選</p><p> Disdata=0xc7; //數(shù)據顯示</p><p> delay(300);</p><
64、;p> discan=scan_con[3]; //位選</p><p> Disdata=0xc7; //數(shù)據顯示</p><p> delay(300);</p><p> discan=scan_con[4]; //位選</p><p> Disdata=0x86; //數(shù)
65、據顯示</p><p> delay(300);</p><p> discan=scan_con[5]; //位選</p><p> Disdata=0xc089; //數(shù)據顯示</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ù)據顯示</p><p><b> if (k==3)</b></p><p> {DIN=0;} //小數(shù)點顯示</p><p> delay(200);</p><p><b> }</b></p><
69、;p><b> }</b></p><p><b> //</b></p><p><b> //</b></p><p> /****************DS18B20復位函數(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 復位成功,繼續(xù)下一步</p><p><b> } </b></p><p> delay(45); //延時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個字節(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個字節(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(); //總線復位</p><p> write_byte(0xcc); //發(fā)命令</p><p> write_byte(0x44); //發(fā)轉換命令</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é)合成一個整型變量。</p><p> return temp; //返回溫度值</p><p><b> }</b></p><p>
89、 /****************溫度數(shù)據處理函數(shù)************************/</p><p> //二進制高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一字節(jié),這個</p><p> //字節(jié)的二進制轉換為十進制后,就是溫度值的百、十、個位值,而剩</p><p> //下的低字節(jié)的低半字節(jié)轉化成十進制后,就是溫度值的小數(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) // 溫度值正負判斷</p><p><b> {</b></p><p> tem=65536-tem;</p><p><b> n=1;</b></p><p> }// 負溫度求補碼,標志位置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ù)據暫存</p><p> display[3]=(display[6])%100; // 取后兩位數(shù)據暫存</p><
94、;p> display[4]=(display[3])/10; // 取十位數(shù)據暫存</p><p> display[3]=(display[3])%10; </p><p> /******************符號位顯示判斷**************************/</p><p> if(!display[5]) &
95、lt;/p><p><b> {</b></p><p> display[5]=10; //最高位為0時不顯示</p><p> if(!display[4])</p><p><b> {</b></p><p> display[4
96、]=10; //次高位為0時不顯示</p><p><b> }</b></p><p><b> }</b></p><p><b> if(n)</b></p><p><b> {</b></p>
97、<p> display[5]=11; //負溫度時最高位顯示"-"</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(); //先復位DS18B20 開機先轉換一次</p><p> write_byte(0xcc); //Skip ROM</p><p> write_byte(0x44); //發(fā)轉換命令 啟動DS18B20對數(shù)據進行采集</p
100、><p> for(h=0;h<100;h++) //開機顯示"HELLO!"</p><p> {scan1();//顯示函數(shù)</p><p><b> }</b></p><p> while(1) //通過循環(huán)讀取處理數(shù)據
101、</p><p> { if(flash)</p><p> Disdata=0xff; //DS18B20不正常關閉顯示 </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ù)據</p><p><b> scan(); </b></p><p> } //顯示溫度值</p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機的數(shù)字溫度計畢業(yè)設計
- 基于單片機數(shù)字溫度計畢業(yè)設計
- 基于單片機數(shù)字溫度計畢業(yè)設計
- 畢業(yè)設計——基于單片機的數(shù)字溫度計設計
- 基于單片機的數(shù)字溫度計畢業(yè)設計
- 畢業(yè)設計--基于單片機數(shù)字溫度計
- 基于單片機的數(shù)字溫度計設計 畢業(yè)設計
- 單片機的數(shù)字溫度計畢業(yè)設計
- 基于單片機的數(shù)字溫度計的設計 畢業(yè)設計
- 基于單片機控制的數(shù)字溫度計----畢業(yè)設計
- 基于5單片機的數(shù)字溫度計畢業(yè)設計
- 基于51單片機的數(shù)字溫度計-畢業(yè)設計
- 畢業(yè)設計(論文)-基于單片機的數(shù)字溫度計設計
- 畢業(yè)設計(論文)基于單片機的數(shù)字溫度計設計
- 基于單片機的數(shù)字溫度計畢業(yè)設計論文
- 單片機畢業(yè)設計--單片機設計數(shù)字溫度計
- 畢業(yè)設計(論文)基于單片機的數(shù)字語音溫度計
- 基于單片機的溫度計的設計畢業(yè)設計
- 畢業(yè)設計(論文)單片機的數(shù)字溫度計控制
- 基于單片機的數(shù)字溫度計的設計
評論
0/150
提交評論