

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘要</b></p><p> 當(dāng)今科技發(fā)展日新月異,電子技術(shù)及微電腦控制技術(shù)的應(yīng)用無(wú)處不在,使我們的生活更加豐富多彩,為我們帶來(lái)了很多的便利。傳統(tǒng)的溫度計(jì)都是采用水銀熱漲冷縮的原理制成的。這種溫度計(jì)不但本身誤差就大而且由于人讀取時(shí)的視覺(jué)誤差,導(dǎo)致讀取的數(shù)據(jù)并不精確。電子溫度傳感器不僅采用采集數(shù)據(jù)精度高的DS18B20組成,而且有四位一體的數(shù)碼管作為顯示裝置,
2、這樣更便于讀取數(shù)據(jù),給我們實(shí)時(shí)了解溫度的變化提供了便利。</p><p> 下面的篇章主要介紹通過(guò)對(duì)AT89C52單片機(jī)進(jìn)行程序設(shè)計(jì),DS18B20的詳解,并以此為控制核心,同時(shí)利用溫度傳感技術(shù)實(shí)現(xiàn)對(duì)當(dāng)前溫度進(jìn)行實(shí)時(shí)測(cè)量,并以按鍵控制溫度。此項(xiàng)目主要包括溫度傳感部分,提示報(bào)警部分,開(kāi)關(guān)控制部分及按鍵控制部分。 同時(shí)對(duì)項(xiàng)目研究背景及意義進(jìn)行了分析。</p><p> 關(guān)鍵詞:STC89C
3、51,數(shù)字控制,溫度計(jì),DS18B20</p><p><b> 目錄</b></p><p><b> 摘要2</b></p><p><b> 目錄3</b></p><p><b> 緒論3</b></p><p&g
4、t; 第一章 設(shè)計(jì)方案和系統(tǒng)組成4</p><p> 1.1 設(shè)計(jì)方案4</p><p> 1.2 系統(tǒng)組成5</p><p> 第二章 硬件結(jié)構(gòu)與工作原理6</p><p><b> 2.1硬件結(jié)構(gòu)6</b></p><p> 2.2 溫度監(jiān)測(cè)及控制電路7</p&g
5、t;<p> 第三章 軟件設(shè)計(jì)10</p><p> 3.1 主程序流程圖11</p><p> 3.2語(yǔ)言介紹11</p><p><b> 第四章 調(diào)試13</b></p><p><b> 第五章 結(jié)論14</b></p><p>
6、第六章 參考文獻(xiàn)15</p><p><b> 緒論</b></p><p> 隨著人們生活水平的不斷提高,單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一,它給人帶來(lái)的方便也是無(wú)可置疑的,其中數(shù)字溫度計(jì)就是一個(gè)典型的例子。隨著人們對(duì)它的要求越來(lái)越高,要為現(xiàn)代人工作和生活提供更好、更方便的設(shè)施就需要從數(shù)字單片機(jī)技術(shù)入手,一切向著數(shù)字化控制、智能化控制方向發(fā)展。</p&g
7、t;<p> 溫度測(cè)量在物理實(shí)驗(yàn)、醫(yī)療衛(wèi)生、食品生產(chǎn)等領(lǐng)域,尤其在熱學(xué)實(shí)驗(yàn)(如:物體的比熱容、汽化熱、熱功當(dāng)量、壓強(qiáng)溫度系數(shù)等教學(xué)實(shí)驗(yàn))中,有特別重要的意義。目前溫度計(jì)的發(fā)展很快,從原始的玻璃管溫度計(jì)發(fā)展到了現(xiàn)在的熱電阻溫度計(jì)、熱電偶溫度計(jì)、數(shù)字溫度計(jì)、電子溫度計(jì)等等?,F(xiàn)在所使用的溫度計(jì)通常都是精度為1℃和0.1℃的水銀、煤油或酒精溫度計(jì),這些溫度計(jì)的刻度間隔通常都很密,不容易準(zhǔn)確分辨,讀數(shù)困難,而且他們的熱容量還比較大
8、,達(dá)到熱平衡所需的時(shí)間較長(zhǎng),因此很難讀準(zhǔn),并且使用非常不方便。本文所介紹的數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便、測(cè)溫范圍廣、測(cè)溫準(zhǔn)確等優(yōu)點(diǎn),其輸出溫度采用數(shù)字顯示,主要供測(cè)溫要求準(zhǔn)確的場(chǎng)所和科研實(shí)驗(yàn)室使用。</p><p> 第一章 設(shè)計(jì)方案和系統(tǒng)組成</p><p><b> 1.1 設(shè)計(jì)方案</b></p><p><b&g
9、t; 1:溫度采集電路</b></p><p> 溫度采集部分要求精確度高,反應(yīng)靈敏,可采集的范圍廣,使用方便,而dollar公司生產(chǎn)的DS18B20采用單總線信號(hào)輸入,同時(shí)無(wú)轉(zhuǎn)換誤差、無(wú)傳輸損耗,測(cè)量精度高,長(zhǎng)期穩(wěn)定,可測(cè)范圍廣,適用不同領(lǐng)域。</p><p> 1.單片機(jī)控制調(diào)節(jié)部分</p><p> 它利用了AT89C52單片機(jī),通過(guò)對(duì)單片
10、機(jī)輸入程序,及鍵位設(shè)定,同時(shí)它采用四個(gè)獨(dú)立按鍵,可分別對(duì)個(gè)位和十分位的溫度進(jìn)行調(diào)節(jié),以方便用戶調(diào)節(jié),同時(shí)調(diào)節(jié)時(shí)設(shè)定的初始值比正常溫度稍微低些,調(diào)節(jié)時(shí)不是從零開(kāi)始節(jié)省了調(diào)節(jié)的時(shí)間,溫度的調(diào)節(jié)控制,滿足了智能化的要求。</p><p><b> 2.適時(shí)溫度顯示</b></p><p> 此項(xiàng)目采用了SM410564四位數(shù)碼管,通過(guò)溫度傳感器和單片機(jī)交換數(shù)據(jù),把當(dāng)前環(huán)
11、境下的溫度數(shù)據(jù)適時(shí)傳輸給數(shù)碼管,方便用戶了解當(dāng)前溫度,為下一步工作做好鋪墊。</p><p><b> 電路模塊圖示如下:</b></p><p><b> 1.2 系統(tǒng)組成</b></p><p> 系統(tǒng)的硬件:1)溫度采集及控制電路; 2)鍵盤(pán)輸入電路;3)數(shù)碼顯示電路;4)單片機(jī)外圍電路;5)輔助繼電器工作電路
12、;6)蜂鳴提醒及l(fā)ed警示電路;7)插座電路等</p><p> 系統(tǒng)的軟件:主要包括溫度檢測(cè)程序,鍵盤(pán)控制程序及繼電器控制程序,主要實(shí)現(xiàn)自動(dòng)檢測(cè)及當(dāng)前溫度自動(dòng)控制的功能。</p><p> 第二章 硬件結(jié)構(gòu)與工作原理</p><p> 2.1硬件結(jié)構(gòu) </p><p> 根據(jù)系統(tǒng)要求畫(huà)出的原理總圖:</p>&l
13、t;p> 該電路采用AT89C52單片機(jī)為中心控制芯片。AT89C52是美國(guó)ATMEL公司生產(chǎn)的低電壓、高性能CMOS8位單片機(jī),片內(nèi)含8K bytes的可反復(fù)擦寫(xiě)的PEROM和256bytes的RAM以及通用8位中央處理器和Flash存儲(chǔ)單元。AT89C52功能強(qiáng)大,可充分滿足該控制器存儲(chǔ)等各方面的需求。 </p><p> AT89C52功能簡(jiǎn)述:</p><p>
14、; AT89C52提供以下標(biāo)準(zhǔn)功能:8K字節(jié)Flash閃速存儲(chǔ)器,256字節(jié)內(nèi)部RAM,32個(gè)I/O口線,3個(gè)16位定時(shí)器/計(jì)時(shí)器,一個(gè)6位向量級(jí)中斷結(jié)構(gòu),一個(gè)全雙工串通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C52可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件的可選節(jié)電工作方式:空閑方式停止CPU的工作,但允許RAM的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。</p><p> AT89
15、C52引腳圖</p><p> AT89C52的參數(shù)了解:</p><p> 工作溫度 -55℃~+125℃ </p><p> 儲(chǔ)藏溫度 -65℃~+150℃</p><p> 任一引腳對(duì)地電壓 -1v~+7v</p><p> 最高工作電壓
16、 6.6v</p><p> 直流輸出電流 15mA</p><p> 2.2 溫度監(jiān)測(cè)及控制電路</p><p> 2.2.1溫度采集裝置:</p><p> 采用串行數(shù)字溫度傳感器DS18B20芯片使其換成脈沖信號(hào),送到89C52的I/O 端口2.7口(編程為計(jì)數(shù)器工作模式),通過(guò)測(cè)量輸出脈沖
17、頻率的大小來(lái)?yè)Q算成溫度高低信號(hào)</p><p> DS18B20 外形圖和引腳說(shuō)明</p><p> 1、DS18B20技術(shù)性能描述</p><p> 1.1 獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。</p><p> 1.2 測(cè)溫范圍-55℃~+125℃,固有測(cè)溫
18、分辨率0.5℃。</p><p> 1.3 支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)多點(diǎn)測(cè)溫,但當(dāng)用多個(gè)DS18B20時(shí)電壓驅(qū)動(dòng)不夠,一條線最多能驅(qū)動(dòng)大約5個(gè)。</p><p> 1.4 工作電源: 3~5V/DC</p><p> 2:DS18B20溫度的讀取</p><p> DS18B20在出廠時(shí)已配置為
19、12位,讀取溫度時(shí)共讀取16位,所以把后11位的2進(jìn)制轉(zhuǎn)化為10進(jìn)制后在乘以0.0625便為所測(cè)的溫度,還需要判斷正負(fù)。前5個(gè)數(shù)字為符號(hào)位,當(dāng)前5位為1時(shí),讀取的溫度為負(fù)數(shù);當(dāng)前5位為0時(shí),讀取的溫度為正數(shù)。16位數(shù)字?jǐn)[放是從低位到高位。</p><p> 2.2.2溫度數(shù)碼顯示:</p><p> 百位 12 十位 9 個(gè)位 8 十分位 6 <
20、/p><p> A 11 B 7 C 4 D 2 E 1 F 10 G 5 DP 3</p><p> DS18B20采集的溫度數(shù)據(jù)經(jīng)單片機(jī)分析在該數(shù)碼管上顯示。數(shù)碼管顯示控制部分與AT89C52接口電路在內(nèi)藏控制器的數(shù)碼顯示模塊中,已經(jīng)完成了控制器與數(shù)碼顯示驅(qū)動(dòng)器顯示器緩沖區(qū)的接口工作。</p><p> 2.2.3. 溫度調(diào)節(jié)設(shè)置按
21、鍵電路:</p><p> 通過(guò)四個(gè)外圍按鍵與單片機(jī)AT89C52直接相連,用戶可根據(jù)需要設(shè)置自己想要控制的正常范圍內(nèi)任意想要溫度。</p><p> 2.2.4內(nèi)部時(shí)鐘振蕩電路及復(fù)位電路:</p><p> 此部分為AT89C52的內(nèi)部時(shí)鐘電路振蕩器。80C52單片機(jī)內(nèi)部帶有時(shí)鐘電路,只需在片外通過(guò)XTAL1和XTAL2引腳接入定時(shí)控制元件(12MHZ晶振和
22、電容)即可構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。XTAL1和XTAL2分別是80C52內(nèi)部高增益反響放大器的輸入端和輸出端 時(shí)鐘頻率為 12MHz.</p><p> 此部分為其使能和復(fù)位電路,該電路采用上電自動(dòng)復(fù)位方式,通過(guò)復(fù)位電容C1的充電來(lái)實(shí)現(xiàn),接通電源就實(shí)現(xiàn)了系統(tǒng)的復(fù)位初始化。</p><p><b> 第三章 軟件設(shè)計(jì)</b></p><p&
23、gt; 系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,顯示數(shù)據(jù)刷新子程序,按鍵掃描處理子程序等。</p><p> 3.1 主程序流程圖</p><p> 主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20 的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s 進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,其程序流程見(jiàn)圖4.1 所示。</p>&
24、lt;p> 圖4.1 主程序流程圖</p><p><b> 3.2語(yǔ)言介紹</b></p><p> 3.2.1 匯編語(yǔ)言特點(diǎn)</p><p> 匯編語(yǔ)言是一種功能很強(qiáng)的程序設(shè)計(jì)語(yǔ)言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語(yǔ)言。匯編語(yǔ)言,作為一門(mén)語(yǔ)言,對(duì)應(yīng)于高級(jí)語(yǔ)言的編譯器,需要一個(gè)“匯編器”來(lái)把匯編語(yǔ)言原文件匯編成機(jī)器
25、可執(zhí)行的代碼。高級(jí)的匯編器如MASM,TASM等等為我們寫(xiě)匯編程序提供了很多類(lèi)似于高級(jí)語(yǔ)言的特征,比如結(jié)構(gòu)化、抽象等。在這樣的環(huán)境中編寫(xiě)的匯編程序,有很大一部分是面向匯編器的偽指令,已經(jīng)類(lèi)同于高級(jí)語(yǔ)言?,F(xiàn)在的匯編環(huán)境已經(jīng)如此高級(jí),即使全部用匯編語(yǔ)言來(lái)編寫(xiě)windows的應(yīng)用程序也是可行的,但這不是匯編語(yǔ)言的長(zhǎng)處。匯編語(yǔ)言的長(zhǎng)處在于編寫(xiě)高效且需要對(duì)機(jī)器硬件精確控制的程序。</p><p> MCS-51單片機(jī)的這
26、個(gè)指令系統(tǒng)中共包括111條指令,可以完成30多種功能。</p><p> 3.2.2 C語(yǔ)言特點(diǎn)</p><p> 它既具有高級(jí)語(yǔ)言的特點(diǎn),又具有匯編語(yǔ)言的特點(diǎn)。它可以作為工作系統(tǒng)設(shè)計(jì)語(yǔ)言,編寫(xiě)系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語(yǔ)言,編寫(xiě)不依賴計(jì)算機(jī)硬件的應(yīng)用程序。因此,它的應(yīng)用范圍廣泛,不僅僅是在軟件開(kāi)發(fā)上,而且各類(lèi)科研都需要用到C語(yǔ)言,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開(kāi)發(fā)。<
27、;/p><p> 1·語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。C語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。</p><p> 2·運(yùn)算符豐富。共有34種。C把括號(hào)、賦值、逗號(hào)等都作為運(yùn)算符處理。從而使C的運(yùn)算類(lèi)型極為豐富,可以實(shí)現(xiàn)其他高級(jí)語(yǔ)言難以實(shí)現(xiàn)的運(yùn)算。</p><p> 3·數(shù)據(jù)結(jié)構(gòu)類(lèi)型豐富。具有結(jié)構(gòu)化的控
28、制語(yǔ)句。與匯編語(yǔ)言相比,用C語(yǔ)言寫(xiě)的程序可移植性好。</p><p> 4·C語(yǔ)言允許直接訪問(wèn)物理地址,能進(jìn)行位(bit)操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作。因此有人把它稱為中級(jí)語(yǔ)言。</p><p> C語(yǔ)言對(duì)操作系統(tǒng)和系統(tǒng)使用程序以及需要對(duì)硬件進(jìn)行操作的場(chǎng)合,用C語(yǔ)言明顯優(yōu)于其它解釋型高級(jí)語(yǔ)言,有一些大型應(yīng)用軟件也是用C語(yǔ)言編寫(xiě)的。具有繪圖能力強(qiáng),可
29、移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫(xiě)系統(tǒng)軟件,三維,二維圖形和動(dòng)畫(huà)。它是數(shù)值計(jì)算的高級(jí)語(yǔ)言。</p><p> 本次實(shí)習(xí)運(yùn)用C語(yǔ)言編程來(lái)對(duì)單片機(jī)進(jìn)行顯示的控制、信號(hào)的傳輸轉(zhuǎn)換控制。</p><p> 3.2.3 Keil C51單片機(jī)軟件開(kāi)發(fā)系統(tǒng)的整體結(jié)構(gòu)</p><p> Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)
30、C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開(kāi)發(fā),體會(huì)更加深刻。</p><p> Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更
31、能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。下面詳細(xì)介紹Keil C51開(kāi)發(fā)系統(tǒng)各部分功能和使用。</p><p> 程序編輯使用Keil,新建一個(gè)工程,然后新建一個(gè)C文件,并添加到工程中。</p><p> C51的工具包非常豐富,其中uVision與Ishell分別是C51 for Windows和for Dos的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用I
32、DE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM中。</p><p><
33、b> 仿真如下:</b></p><p><b> .第四章 調(diào)試</b></p><p> 本次設(shè)計(jì)系統(tǒng)的調(diào)試以程序的調(diào)試為主。</p><p> 先編寫(xiě)顯示程序并進(jìn)行硬件的正確性檢驗(yàn),然后分別進(jìn)行主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序和顯示數(shù)據(jù)刷新子程序等的編程及調(diào)試。</p>&
34、lt;p> 由于DS18B20與單片機(jī)采用串行數(shù)據(jù)傳送,因此,對(duì)DS18B20進(jìn)行讀/寫(xiě)編程時(shí),必須嚴(yán)格的保證讀/寫(xiě)時(shí)序,否則將無(wú)法讀取測(cè)量結(jié)果。本程序采用單片機(jī)C語(yǔ)言編寫(xiě),用Keil C編譯器編程調(diào)試。</p><p> 軟件調(diào)試到數(shù)碼管能顯示溫度值,而且在有溫度變化時(shí)(例如改變傳感器的溫度值)顯示溫度能改變。</p><p><b> 第五章 結(jié)論</b&g
35、t;</p><p> 本次課程設(shè)計(jì)即將進(jìn)入尾聲,回想這兩周來(lái)的電子設(shè)計(jì)制作經(jīng)歷,我感觸甚是深刻。通過(guò)本次課程設(shè)計(jì),使我對(duì)電子設(shè)計(jì)及制作產(chǎn)生了較為濃厚的興趣,這不僅加強(qiáng)了自己對(duì)理論知識(shí)的理解和鞏固,還能提高自己的動(dòng)手能力,可以說(shuō)受益匪淺。當(dāng)然更重要的是,激起了我學(xué)好單片機(jī)的斗志。</p><p> 本次課程設(shè)計(jì)主要分為四部分:設(shè)計(jì)、仿真、調(diào)試。這三個(gè)步驟在整個(gè)課程設(shè)計(jì)過(guò)程中起著重要的作
36、用。</p><p> 本次畢業(yè)設(shè)計(jì)是針對(duì)MCS-51系列的單片機(jī)芯片STC89C51來(lái)設(shè)計(jì)一個(gè)數(shù)字溫度計(jì),該設(shè)計(jì)充分利用了溫度傳感器DS18B20功能強(qiáng)大的優(yōu)點(diǎn),如DS18B20可以直接讀出被測(cè)溫度值,進(jìn)行轉(zhuǎn)換;而且采用三線制與單片機(jī)相連,減少了外部的硬件電路,具有低成本和易使用的特點(diǎn),大大簡(jiǎn)化了硬件電路,也使得該數(shù)字溫度計(jì)不僅具有結(jié)構(gòu)簡(jiǎn)單、成本低廉、精確度較高、反應(yīng)速度較快、數(shù)字化顯示和不易損壞等特點(diǎn),而且
37、性能穩(wěn)定,適用范圍廣,因此特別適用于對(duì)測(cè)溫要求比較準(zhǔn)確的場(chǎng)所。</p><p><b> 第六章 參考文獻(xiàn)</b></p><p> [1]單片機(jī)應(yīng)用技術(shù)(C語(yǔ)言版).電子工業(yè)出版社。</p><p> [2] 模擬電子技術(shù)(第三版)胡宴如 主編。</p><p> [3] 數(shù)字電子技術(shù)(第三版)楊志忠 主編。&
38、lt;/p><p> [4] PROTEUS仿真軟件應(yīng)用 張文濤 主編。</p><p> [5] C語(yǔ)言程序設(shè)計(jì) 清華大學(xué)出版社。</p><p> [6] 張毅剛.MCS-51單片機(jī)應(yīng)用設(shè)計(jì)[M].高等教育出版社。2003-12-1。</p><p> [7] 王仲 .單片機(jī)原理及其接口技術(shù) [M] 機(jī)械工業(yè)出版社,2001.89-1
39、20 </p><p> [8] 郭力平.MCS-51系列單片機(jī)實(shí)用接口技術(shù)[M],人民郵電出版社,2003.23-56 </p><p> [9] 李廣弟.單片機(jī)基礎(chǔ). 北京:北京航空航天大學(xué)出版社,2001.8-10</p><p> [10] 康光華.電子技術(shù)基礎(chǔ)模擬部分(第五版),高等教育出版社,2006-1。</p><p>
40、 [11] 譚浩強(qiáng).程序設(shè)計(jì)(第三版),清華大學(xué)出版社,2005-7。</p><p><b> 附錄</b></p><p> #include <reg52.h></p><p> #include <intrins.h> //_nop_();延時(shí)函數(shù)用</p><p> #defi
41、ne dm P0 //段碼輸出口</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit DQ=P2^7; //溫度輸入口</p><p> sbit w0=P2^0; //數(shù)碼管4</p><p&g
42、t; sbit w1=P2^1; //數(shù)碼管3</p><p> sbit w2=P2^2; //數(shù)碼管2</p><p> sbit w3=P2^3; //數(shù)碼管1</p><p> sbit beep=P1^7; //蜂鳴器指示燈</p><p> sbit LED=P1^0;// 指示燈</p><p&g
43、t; sbit set=P2^6; //溫度設(shè)置切換鍵</p><p> sbit add=P2^4; //溫度加</p><p> sbit dec=P2^5; //溫度減</p><p> int temp1=0; //顯示當(dāng)前溫度和設(shè)置溫度的標(biāo)志位為0 時(shí)顯示當(dāng)前溫度</p><p><b> uint h;<
44、/b></p><p> uint temp;</p><p><b> uchar r;</b></p><p> uchar high=35,low=20;</p><p> uchar sign;</p><p> uchar q=0;</p><p>
45、; uchar tt=0;</p><p> uchar scale;</p><p> //**************溫度小數(shù)部分用查表法***********//</p><p> uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08
46、,0x08,0x09,0x09};</p><p><b> //小數(shù)斷碼表</b></p><p> uchar code table_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};</p><p> //共陰LED 段碼表"0&quo
47、t; "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"</p><p> uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0
48、xe6,0xed,0xfd,0x87,0xff,0xef}; //個(gè)位帶小數(shù)點(diǎn)的斷碼表</p><p> uchar data temp_data[2]={0x00,0x00}; //讀出溫度暫放</p><p> uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //顯示單元數(shù)據(jù),共4 個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用</p>&l
49、t;p> /*****************11us 延時(shí)函數(shù)*************************/</p><p> void delay(uint t)</p><p><b> {</b></p><p> for (;t>0;t--);</p><p><b> }
50、</b></p><p> void scan()</p><p><b> {</b></p><p><b> int j;</b></p><p> for(j=0;j<4;j++)</p><p><b> {</b>
51、</p><p> switch (j)</p><p><b> {</b></p><p> case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshu</p><p> case 1: dm=table_dm1[display[1]];w1=0
52、;delay(50);w1=1;//gewei</p><p> case 2: dm=table_dm[display[2]];w2=0;delay(50);w2=1;//shiwei</p><p> case 3: dm=table_dm[display[3]];w3=0;delay(50);w3=1;//baiwei</p><p> // else{
53、dm=table_dm[b3];w3=0;delay(50);w3=1;}</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //***************DS18B20 復(fù)位函數(shù)**
54、**********************/</p><p> ow_reset(void)</p><p><b> {</b></p><p> char presence=1;</p><p> while(presence)</p><p><b> {</b&
55、gt;</p><p> while(presence)</p><p><b> {</b></p><p> DQ=1;_nop_();_nop_();//從高拉倒低</p><p><b> DQ=0;</b></p><p> delay(50); //55
56、0 us</p><p><b> DQ=1;</b></p><p> delay(6); //66 us</p><p> presence=DQ; //presence=0 復(fù)位成功,繼續(xù)下一步</p><p><b> }</b></p><p> dela
57、y(45); //延時(shí)500 us</p><p> presence=~DQ;</p><p><b> }</b></p><p> DQ=1; //拉高電平</p><p><b> }</b></p><p> /****************DS18B2
58、0 寫(xiě)命令函數(shù)************************/</p><p> //向1-WIRE 總線上寫(xiě)1 個(gè)字節(jié)</p><p> void write_byte(uchar val)</p><p><b> {</b></p><p><b> uchar i;</b><
59、/p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p> DQ=1;_nop_();_nop_(); //從高拉倒低</p><p> DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us</p><p>
60、; DQ=val&0x01; //最低位移出</p><p> delay(6); //66 us</p><p> val=val/2; //右移1 位</p><p><b> }</b></p><p><b> DQ=1;</b></p><p>&
61、lt;b> delay(1);</b></p><p><b> }</b></p><p> /****************DS18B20 讀1 字節(jié)函數(shù)************************/</p><p> //從總線上取1 個(gè)字節(jié)</p><p> uchar read
62、_byte(void)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> uchar value=0;</p><p> for(i=8;i>0;i--)</p><p><b> {<
63、/b></p><p> DQ=1;_nop_();_nop_();</p><p> value>>=1;</p><p> DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p> DQ=1;_nop_();_nop_();_nop_();_nop_(); //4
64、 us</p><p> if(DQ)value|=0x80;</p><p> delay(6); //66 us</p><p><b> }</b></p><p><b> DQ=1;</b></p><p> return(value);</p>
65、;<p><b> }</b></p><p> /*****************讀出溫度函數(shù)************************/</p><p> read_temp()</p><p><b> {</b></p><p> ow_reset(); //
66、總線復(fù)位</p><p> delay(200);</p><p> write_byte(0xcc); //發(fā)命令</p><p> write_byte(0x44); //發(fā)轉(zhuǎn)換命令</p><p> ow_reset();</p><p><b> delay(1);</b><
67、;/p><p> write_byte(0xcc); //發(fā)命令</p><p> write_byte(0xbe);</p><p> temp_data[0]=read_byte(); //讀溫度值的低字節(jié)</p><p> temp_data[1]=read_byte(); //讀溫度值的高字節(jié)</p><p&g
68、t; temp=temp_data[1];</p><p><b> temp<<=8;</b></p><p> temp=temp|temp_data[0]; // 兩字節(jié)合成一個(gè)整型變量。</p><p> return temp; //返回溫度值</p><p><b> }<
69、;/b></p><p> /****************溫度數(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é)的低
70、半字節(jié)轉(zhuǎn)化成十進(jìn)制后,就是溫度值的小數(shù)部分</p><p> /********************************************************/</p><p> work_temp(uint tem)</p><p><b> {</b></p><p> uchar n=0;
71、</p><p> if(tem>6348) // 溫度值正負(fù)判斷</p><p> {tem=65536-tem;n=1;} // 負(fù)溫度求補(bǔ)碼,標(biāo)志位置1</p><p> display[4]=tem&0x0f; // 取小數(shù)部分的值</p><p> display[0]=ditab[display[4]]; /
72、/ 存入小數(shù)部分顯示值</p><p> display[4]=tem>>4; // 取中間八位,即整數(shù)部分的值</p><p> display[3]=display[4]/100; // 取百位數(shù)據(jù)暫存</p><p> display[1]=display[4]%100; // 取后兩位數(shù)據(jù)暫存</p><p> d
73、isplay[2]=display[1]/10; // 取十位數(shù)據(jù)暫存</p><p> display[1]=display[1]%10; //個(gè)位數(shù)據(jù)</p><p> r=display[1]+display[2]*10+display[3]*100;</p><p> /////符號(hào)位顯示判斷/////</p><p> if
74、(!display[3])</p><p><b> {</b></p><p> display[3]=0x0a; //最高位為0 時(shí)不顯示</p><p> if(!display[2])</p><p><b> {</b></p><p> display[
75、2]=0x0a; //次高位為0 時(shí)不顯示</p><p><b> }</b></p><p><b> }</b></p><p> if(n){display[3]=0x0b;} //負(fù)溫度時(shí)最高位顯示"-"</p><p><b> }</b>
76、;</p><p> void BEEP()</p><p><b> {</b></p><p> if((r>=high&&r<129)||r<low)</p><p><b> {</b></p><p> beep=!bee
77、p;</p><p><b> LED=!LED;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> bee
78、p=0;</b></p><p><b> LED=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> //*********設(shè)置溫度顯示轉(zhuǎn)換************//</p><
79、p> void xianshi(int horl)</p><p><b> {</b></p><p><b> int n=0;</b></p><p> if(horl>128)</p><p><b> {</b></p><p
80、> horl=256-horl;n=1;</p><p><b> }</b></p><p> display[3]=horl/100;</p><p> display[3]=display[3]&0x0f;</p><p> display[2]=horl%100/10;</p>
81、<p> display[1]=horl%10;</p><p> display[0]=0;</p><p> if(!display[3])</p><p><b> {</b></p><p> display[3]=0x0a; //最高位為0 時(shí)不顯示</p><p&g
82、t; if(!display[2])</p><p><b> {</b></p><p> display[2]=0x0a; //次高位為0 時(shí)不顯示</p><p><b> }</b></p><p><b> }</b></p><p>
83、;<b> if(n)</b></p><p><b> {</b></p><p> display[3]=0x0b; //負(fù)溫度時(shí)最高位顯示"-"</p><p><b> }</b></p><p><b> }</b>
84、</p><p> //*********按鍵查詢程序**************//</p><p> void keyscan()</p><p><b> {</b></p><p> int temp1; //最高溫度和最低溫度標(biāo)志位</p><p> if(set==0)<
85、;/p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> delay(500);//消抖</p><p> if(set==0)</p><
86、p><b> {</b></p><p><b> temp1++;</b></p><p> while(!set)</p><p><b> scan();</b></p><p><b> }</b></p><p
87、> if(temp1==1)</p><p><b> {</b></p><p> xianshi(high);</p><p><b> scan();</b></p><p> if(add==0)</p><p><b> {</b&
88、gt;</p><p> while(!add)</p><p><b> scan();</b></p><p><b> high+=1;</b></p><p><b> }</b></p><p> if(dec==0)</p&g
89、t;<p><b> {</b></p><p> while(!dec)</p><p><b> scan();</b></p><p><b> high-=1;</b></p><p><b> }</b></p>
90、;<p><b> }</b></p><p> if(temp1==2)</p><p><b> {</b></p><p> xianshi(low);</p><p> if(add==0)</p><p><b> {</b
91、></p><p> while(!add)</p><p><b> scan();</b></p><p><b> low+=1;</b></p><p><b> }</b></p><p> if(dec==0)</p&g
92、t;<p><b> {</b></p><p> while(!dec)</p><p><b> scan();</b></p><p><b> low-=1;</b></p><p><b> }</b></p>
93、<p><b> scan();</b></p><p><b> }</b></p><p> if(temp1>=3)</p><p><b> {</b></p><p><b> temp1=0;</b></p&
94、gt;<p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p&
95、gt;<p> /****************主函數(shù)************************/</p><p> void main()</p><p><b> {</b></p><p> dm=0x00; //初始化端口</p><p><b> w0=0;</b
96、></p><p><b> w1=0;</b></p><p><b> w2=0;</b></p><p><b> w3=0;</b></p><p> for(h=0;h<4;h++) //開(kāi)機(jī)顯示"0000"</p>
97、<p><b> {</b></p><p> display[h]=0;</p><p><b> }</b></p><p> ow_reset(); //開(kāi)機(jī)先轉(zhuǎn)換一次</p><p> write_byte(0xcc); //Skip ROM</p>&
98、lt;p> write_byte(0x44); //發(fā)轉(zhuǎn)換命令</p><p> for(h=0;h<100;h++) //開(kāi)機(jī)顯示"0000"</p><p><b> {</b></p><p><b> scan();</b></p><p><b
99、> }</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> if (temp1==0)</p><p><b> {</b></p><p> work_tem
100、p(read_temp()); //處理溫度數(shù)據(jù)</p><p><b> BEEP();</b></p><p> scan(); //顯示溫度值</p><p> keyscan();</p><p><b> }</b></p><p><b> e
101、lse</b></p><p> keyscan();</p><p><b> }</b></p><p><b> }</b></p><p> //***********************結(jié)束**************************//</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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)【畢業(yè)論文】
- 畢業(yè)論文--基于單片機(jī)的數(shù)字溫度計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的數(shù)字溫度計(jì)畢業(yè)論文
- 畢業(yè)論文——基于單片機(jī)的數(shù)字溫度計(jì)
- 基于51單片機(jī)數(shù)字溫度計(jì)顯示設(shè)計(jì)畢業(yè)論文
- 畢業(yè)論文---基于單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì)
- 畢業(yè)論文---基于單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì)
- 畢業(yè)論文范文——基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 畢業(yè)論文范文——基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)單片機(jī)控制系統(tǒng)的設(shè)計(jì)畢業(yè)論文
- 論文--基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)單片機(jī)的數(shù)字溫度計(jì)控制
- 基于單片機(jī)數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)論文
- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)論文
- 基于單片機(jī)數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)數(shù)字溫度計(jì)畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論