版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> XXXXX大學(xué)物電學(xué)院</p><p><b> 單片機課程設(shè)計報告</b></p><p> 課 程 名 稱: 單片機課程實訓(xùn) </p><p> 題 目: 人工智能時鐘溫度計 </p><p> 專 業(yè) 班 級:
2、 </p><p> 學(xué) 生 姓 名: </p><p> 學(xué) 生 學(xué) 號: </p><p> 日 期: </p><p&
3、gt; 指 導(dǎo) 教 師: </p><p><b> 目 錄</b></p><p><b> 摘 要III</b></p><p> AbstractIII</p><p><b> 1 課題背景1</b>
4、</p><p> 1.1 系統(tǒng)設(shè)計1</p><p> 1.2 總體方框圖1</p><p> 1.3 基本要求1</p><p> 2 設(shè)計方案簡述2</p><p> 2.1 DS18B20數(shù)字溫度傳感器2</p><p> 2.1.1 DS18B20的性能特點2&
5、lt;/p><p> 2.1.2 DS18B20的管腳分布2</p><p> 2.1.3 DS18B20的內(nèi)部結(jié)構(gòu)和工作方式3</p><p> 2.2飛思卡爾單片機5</p><p> 2.3 1602型LCD6</p><p> 2.3.1 1602型LCD的特性6</p><
6、p> 2.3.2 1602型LCD的操作控制6</p><p><b> 3 詳細(xì)設(shè)計7</b></p><p> 3.1 溫度采集模塊7</p><p> 3.2 單片機控制系統(tǒng)7</p><p> 3.3 溫度和時間顯示模塊8</p><p> 3.4 軟件設(shè)計8
7、</p><p> 3.4.1 DS18B20的溫度采集程序9</p><p> 3.4.2 系統(tǒng)主程序13</p><p> 4 設(shè)計結(jié)果及分析15</p><p> 4.1 測試環(huán)境及工具15</p><p> 4.2 測試方法和測試結(jié)果15</p><p><b&
8、gt; 5 總結(jié)16</b></p><p><b> 參考文獻(xiàn)17</b></p><p> 附錄一 系統(tǒng)總電路圖18</p><p> 附錄二 系統(tǒng)源代碼18</p><p><b> 摘 要</b></p><p> 傳統(tǒng)溫度計通常
9、利用熱脹冷縮現(xiàn)象為設(shè)計的依據(jù),因此這種方法無論從設(shè)計原理還是視覺讀數(shù)都有很大的誤差。本次課程設(shè)計以DS18B20作為數(shù)字溫度傳感器,其具有線性優(yōu)良、讀取方便、性能穩(wěn)定、靈敏度高、抗干擾能力強、使用方便等優(yōu)點,可以大大提高測量溫度的精度,使用飛思卡爾MC9S08QG8單片機控制,布線緊湊,能夠滿足各項測溫需求。在測量溫度的同時,還能顯示時間,為溫度的數(shù)字化存儲、監(jiān)測、傳輸、處理奠定了很好的基礎(chǔ)。設(shè)計小巧,攜帶方便,并可以應(yīng)用于冰箱、空調(diào)器
10、等日常生活中溫度的測量和控制。</p><p> 關(guān)鍵詞:溫度計;DS18B20;MC9S08QG8</p><p><b> Abstract</b></p><p> Traditional thermometer usual use expand with heat and contract with cold phenomenon
11、 for design basis, therefore this method regardless of all has the very big error from the principle of design or the visible reading. This curriculum designs by DS18B20 took the digital temperature sensor, it has the li
12、nearity finely, the read convenient, the performance stable, the high sensitivity, a merits and so on easy to operate, may enhance the survey temperature greatly the precision, the use Freescale M</p><p> K
13、eywords: Thermometer; DS18B20; MC9S08QG8</p><p><b> 1 課題背景</b></p><p><b> 1.1 系統(tǒng)設(shè)計</b></p><p> 本課程設(shè)計的任務(wù)是設(shè)計和制作一個人工智能數(shù)字溫度計。由于在生產(chǎn)生活中都有很多領(lǐng)域需要測量溫度,所以溫度計的好壞即測量靈
14、敏度,測溫范圍,穩(wěn)定度以及實用性和適用性就顯得尤為重要。傳統(tǒng)溫度計通常利用固體、液體、氣體受溫度的影響而熱脹冷縮等的現(xiàn)象為設(shè)計的依據(jù),因此這種方法無論從設(shè)計原理還是視覺讀數(shù)都有很大的誤差。本次課程設(shè)計以DS18B20作為數(shù)字溫度傳感器,其具有線性優(yōu)良、性能穩(wěn)定、靈敏度高、抗干擾能力強、使用方便等優(yōu)點,可以大大提高測量溫度的精度,并可以廣泛應(yīng)用于冰箱、空調(diào)器、糧倉等日常生活中溫度的測量和控制。</p><p>&l
15、t;b> 1.2 總體方框圖</b></p><p> 現(xiàn)將系統(tǒng)模塊總體設(shè)計框圖列于下圖1中:</p><p> 圖1 總體設(shè)計方框圖</p><p><b> 1.3 基本要求</b></p><p> 1. 使用飛思卡爾單片機設(shè)計,使用DS18B20作為數(shù)字溫度傳感器;</p>
16、<p> 2. 能夠較準(zhǔn)確的測量溫度并核算誤差;</p><p> 3. 能夠顯示時間,系統(tǒng)錯誤代碼等信息;</p><p><b> 2 設(shè)計方案簡述</b></p><p> 2.1 DS18B20數(shù)字溫度傳感器</p><p> DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司生產(chǎn)的DS
17、18B20型單線智能溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式。可廣泛用于工業(yè)、民用、軍事等領(lǐng)域的溫度測量及控制儀器、測控系統(tǒng)和大型設(shè)備中。它具有體積小,接口方便,傳輸距離遠(yuǎn)等特點。 </p><p> 2.1.1 DS18B20的性能特點</p><p> D
18、S18B20從功能和技術(shù)的角度來說有以下性能特點:</p><p> 采用單總線專用技術(shù),既可通過串行口線,也可通過其它I/O口線與微機接口,無須經(jīng)過其它變換電路,直接輸出被測溫度值(9位二進(jìn)制數(shù),含符號位)</p><p> 測溫范圍為-55℃至+125℃,測量分辨率最小為0.0625℃</p><p> 內(nèi)含64位經(jīng)過激光修正的只讀存儲器ROM</p
19、><p> DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)</p><p> 適配各種單片機或系統(tǒng)機</p><p> 測量結(jié)果直接輸出數(shù)字溫度信號,以“一線總線”串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力</p><p> 用戶可分別設(shè)定各路溫度的上、下限<
20、/p><p> 適應(yīng)電壓范圍寬,3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電</p><p> 2.1.2 DS18B20的管腳分布</p><p> 獨特的一線接口,只需要一條口線通信 多點能力,簡化了分布式溫度傳感應(yīng)用 無需外部元件 可用數(shù)據(jù)總線供電,電壓范圍為3.0 V至5.5 V 無需備用電源 測量溫度范圍為-55℃至+125℃,華氏相當(dāng)于是-10℉至
21、+85℉范圍內(nèi)精度為±0.5℉。</p><p> 其引腳排列見圖2和表1。</p><p><b> 2 3</b></p><p> 圖2 DS18B20的管腳分布圖 表1 DS18B20的管腳分布說明</p><p> 2.1.3 DS18B20的內(nèi)部結(jié)構(gòu)和工作方式<
22、;/p><p> DS1820主要包括寄生電源、溫度傳感器、64位激光ROM單線接口、存放中間數(shù)據(jù)的高速暫存器(內(nèi)含便箋式RAM),用于存儲用戶設(shè)定的溫度上下限值的TH和TL觸發(fā)器存儲與控制邏輯、8位循環(huán)冗余校驗碼(CRC)發(fā)生器等七部分內(nèi)部,其內(nèi)部結(jié)構(gòu)框圖如圖3所示。</p><p> 圖3 DS18B20內(nèi)部結(jié)構(gòu)</p><p> 64位ROM的結(jié)構(gòu)開始8位是
23、產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼。溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。</p><p> DS18B20溫度傳感器與單片機的接口電路DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源供電方式,單片機端口接單線總線,為保證在有效的DS18B20時鐘周期內(nèi)提
24、供足夠的電流,可用一個MOSFET管來完成對總線的上拉。本實驗采用第一種。</p><p> DS18B20的測溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器2的脈沖輸入。器件中還有一個計數(shù)門,當(dāng)計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進(jìn)行計數(shù)進(jìn)而完成溫度測
25、量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55℃所對應(yīng)的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此
26、時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)器門仍關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致等于被測溫度值。</p><p> 由于DS18B20的單線通訊功能是分時完成的,它有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作按協(xié)議進(jìn)行,操作協(xié)議為:初始化DS18B20發(fā)復(fù)位脈沖寫ROM功能指令發(fā)存儲器操作命令處理數(shù)據(jù)。DS18B20有六條控制命令如表2所示:&
27、lt;/p><p> 表2 DS18B20的控制指令</p><p> 2.2飛思卡爾單片機</p><p> 本次課程設(shè)計的飛思卡爾系列的8位單片機MC9S08QG8,它是飛思卡爾新一代8位單片機,主要針對少管腳、低電壓及低功耗應(yīng)用。MC9S08QG體積雖小,但具有極高的集成度,它改寫了低端器件的定義。其引腳圖如下所示:</p><p>
28、 圖4 MC9S08QG8引腳圖</p><p> 飛思卡爾的HCS08內(nèi)核低引腳數(shù),小型封裝,8位微控制器。設(shè)備與芯片上的電路低電壓閃存可編程電壓低至1.8V,并負(fù)擔(dān)所有HCS08系列的標(biāo)準(zhǔn)功能微控制器,包括等待模式和多個站模式。該功能完成強大的模擬功能,一套完整的串行模塊,溫度傳感器和強大的內(nèi)存選項。</p><p><b> 其主要有以下特點:</b>&
29、lt;/p><p> 高達(dá)20 MHz的HCS08系列CPU(10 MHz總線頻率) 100 ns最小指令執(zhí)行時間 </p><p> 提供高性能,即使在低電壓也能電池供電的應(yīng)用水平 </p><p> HC08指令增加了BGND指令設(shè)置 </p><p> 向后對象代碼的兼容性與68HC08,68HC05使現(xiàn)有的代碼庫仍然可以使用 &
30、lt;/p><p> 允許高效,緊湊的模塊編碼 </p><p> 支持多達(dá)32個中斷/復(fù)位源 </p><p> 允許軟件的靈活性和優(yōu)化 </p><p> 低功耗振蕩器模塊(XOSC)軟件 </p><p> 可選擇晶體或陶瓷諧振器,31.25kHz至38.4 kHz或1MHz至16 MHz的,并支持高達(dá)20
31、 MHz的外部時鐘源輸入32kHz振蕩器,提供低功耗選項 系統(tǒng)要求計時功能(即時間和日期)而在低功耗模式12個雙向輸入/輸出(I/O的)線</p><p> 只有一個輸入和一個輸出只有一行 輸出10毫安每包為60 mA最大電流I/O允許直接驅(qū)動LED的其他電路幾乎完全消除了外部驅(qū)動器并降低系統(tǒng)成本 。</p><p> 2.3 1602型LCD</p><p>
32、 本溫度計的讀數(shù)的顯示是通過1602型LCD實現(xiàn)的,其具有微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的特點,常用在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中。</p><p> 2.3.1 1602型LCD的特性</p><p> 1602型LCD歸納起來有以下6大特點:</p><p> +5V電壓,對比度可調(diào)</p><p><b>
33、內(nèi)含復(fù)位電路</b></p><p> 提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能</p><p> 有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM</p><p> 內(nèi)建有192個5X7點陣的字型的字符發(fā)生器CGROM</p><p> 8個可由用戶自定義的5X7的字符發(fā)生器CGRAM</p>
34、<p> 2.3.2 1602型LCD的操作控制</p><p> 1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。</p&
35、gt;<p> 因為1602識別的是ASCII碼,試驗可以用ASCII碼直接賦值,在單片機編程中還可以用字符型常量或變量賦值,如'A'。以下是1602的16進(jìn)制ASCII碼表地址:讀的時候,先讀左邊那列,再讀上面那行,如:感嘆號'!'的ASCII為0x21,字母B的ASCII為0x42。</p><p><b> 3 詳細(xì)設(shè)計</b><
36、/p><p> 3.1 溫度采集模塊 </p><p> 溫度采集模塊的核心即是溫度傳感器DS18B20,其接線方法和引腳排列已在上文詳述。因此可以設(shè)計出圖5所示溫度采集模塊電路圖。</p><p><b> 圖5 溫度采集模塊</b></p><p> 本次設(shè)計所采用的溫度傳感器為Dallas半導(dǎo)體公司的數(shù)字化溫度
37、傳感器,它是世界上第一片支持“一線總線”接口的溫度傳感器?!耙痪€器件”體積更小、適用電壓更寬、更經(jīng)濟。并且分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。</p><p> DSl8B20數(shù)字溫度計提供9位(二進(jìn)制)溫度讀數(shù),指示器件的溫度信息經(jīng)過單線接口送入DSl8B20或從DSl8B20送出,因此從主機CPU到DSl8B20僅需一條線,當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換
38、。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴展的二進(jìn)制補碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機可以通過單線接口讀出該數(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時,表示測得的溫度值為負(fù)值,要先將補碼變成原碼,再計算十進(jìn)制數(shù)值。</p><p>
39、 3.2 單片機控制系統(tǒng)</p><p> 根據(jù)飛思卡爾系列的8位單片機MC9S08QG8的特點和接線圖,可得單片機控制系統(tǒng)的電路圖如圖6所示,這樣便實現(xiàn)了對DS18B20的信息采集、反饋以及對LCD的控制。</p><p> 圖6 單片機控制模塊</p><p> 3.3 溫度和時間顯示模塊</p><p> 溫度顯示和時間顯示都主
40、要是通過1602型LCD實現(xiàn),1602型LCD采用標(biāo)準(zhǔn)的16腳接口,其中: </p><p> 第1腳:VSS為電源地 </p><p> 第2腳:VDD接5V電源正極 </p><p> 第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會 產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。 </p
41、><p> 第4腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。 </p><p> 第5腳:RW為讀寫信號線,高電平(1)時進(jìn)行讀操作,低電平(0)時進(jìn)行寫操作。 </p><p> 第6腳:E(或EN)端為使能(enable)端。 </p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。 </p&
42、gt;<p> 第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。</p><p> 顯示電路是使用的LCD1602液晶顯示,這種顯示最大的優(yōu)點就是使用字符型顯示,可以顯示兩行,第一行顯示日期與當(dāng)前時間,第二行顯示當(dāng)前溫度,當(dāng)DS18B20出現(xiàn)顯示錯誤時第二行溫度不顯示會出現(xiàn)錯誤提示,此款液晶功耗低,操作方便,顯示相當(dāng)清晰。</p><p><b>
43、; 從而得到圖7</b></p><p> 圖7 顯示模塊電路圖</p><p><b> 3.4 軟件設(shè)計</b></p><p> 本章從設(shè)計思路、軟件系統(tǒng)框圖出發(fā),先介紹整體的思路后,再逐一分析各模塊程序算法的實現(xiàn),最終編寫出滿足任務(wù)需求的程序。</p><p> 3.4.1 DS18B20的
44、溫度采集程序</p><p> DS18B20器件要求采用嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。該協(xié)議定義了幾種信號類型:復(fù)位脈沖,應(yīng)答脈沖時隙;寫0,寫1時隙;讀0,讀1時隙。與DS18B20的通信,是通過操作時隙完成單總線上的數(shù)據(jù)傳輸。發(fā)送所有的命令和數(shù)據(jù)時,都是字節(jié)的低位在前,高位在后。</p><p> 該模塊的系統(tǒng)流程圖為</p><p> 圖8 溫度
45、采集模塊的系統(tǒng)流程圖</p><p> DS18B20的初始化</p><p> 1.先將數(shù)據(jù)線置高電平“1”。</p><p> 2.延時(該時間要求的不是很嚴(yán)格,但是盡可能的短一點)</p><p> 3.數(shù)據(jù)線拉到低電平“0”。</p><p> 4.延時750微秒(該時間的時間范圍可以從480到960
46、微秒)。</p><p> 5.數(shù)據(jù)線拉到高電平“1”。</p><p> 6.延時等待(如果初始化成功則在15到60毫秒時間之內(nèi)產(chǎn)生一個由DS18B20所返回的低電平“0”。據(jù)該狀態(tài)可以來確定它的存在,但是應(yīng)注意不能無限的進(jìn)行等待,不然會使程序進(jìn)入死循環(huán),所以要進(jìn)行超時控制)。</p><p> 7.若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時
47、的時間從發(fā)出的高電平算起(第5步的時間算起)最少要480微秒。</p><p> 8.將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。</p><p> DS18B20初始化程序為:</p><p> void Init_DS18B20(void)</p><p><b> {</b></p><p&g
48、t; unsigned char x=0;</p><p> DQ = 1; //DQ復(fù)位</p><p> Delay_DS18B20(8); //稍做延時</p><p> DQ = 0; //單片機將DQ拉低</p><p> Delay_DS18B20(80); //精確延時,大于4
49、80us</p><p> DQ = 1; //拉高總線</p><p> Delay_DS18B20(14);</p><p> x = DQ; //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗</p><p> Delay_DS18B20(20);</p><p&g
50、t; DS18B20的寫操作</p><p> 1.數(shù)據(jù)線先置低電平“0”。</p><p> 2.延時確定的時間為15微秒。</p><p> 3.按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位)。</p><p> 4.延時時間為45微秒。</p><p> 5.將數(shù)據(jù)線拉到高電平。</p>
51、<p> 6.重復(fù)上1到6的操作直到所有的字節(jié)全部發(fā)送完為止。</p><p> 7.最后將數(shù)據(jù)線拉高。</p><p> DS18B20的寫程序為</p><p> void WriteOneChar(unsigned char dat)</p><p><b> {</b></p>
52、<p> unsigned char i=0;</p><p> for (i=8; i>0; i--)</p><p><b> {</b></p><p><b> DQ = 0;</b></p><p> DQ = dat&0x01;</p>
53、<p> Delay_DS18B20(5);</p><p><b> DQ = 1;</b></p><p><b> dat>>=1;</b></p><p><b> }</b></p><p><b> }</b>&
54、lt;/p><p> DS18B20的讀操作</p><p> 1.將數(shù)據(jù)線拉高“1”。</p><p><b> 2.延時2微秒。</b></p><p> 3.將數(shù)據(jù)線拉低“0”。</p><p><b> 4.延時15微秒。</b></p><
55、p> 5.將數(shù)據(jù)線拉高“1”。</p><p><b> 6.延時15微秒。</b></p><p> 7.讀數(shù)據(jù)線的狀態(tài)得到1個狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。</p><p><b> 8.延時30微秒。</b></p><p> DS18B20的讀程序為</p><
56、p> unsigned char ReadOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat = 0;</p><p> for (i=8;i>0;i--)</p>
57、<p><b> {</b></p><p> DQ = 0; // 給脈沖信號</p><p><b> dat>>=1;</b></p><p> DQ = 1; // 給脈沖信號</p><p><b> if(DQ)</b&
58、gt;</p><p> dat|=0x80;</p><p> Delay_DS18B20(4);</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p>
59、3.4.2 系統(tǒng)主程序</p><p> 首先要根據(jù)系統(tǒng)的總體功能和鍵盤設(shè)置選擇一種最合適的監(jiān)控程序結(jié)構(gòu),然后根據(jù)實時性的要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調(diào)度關(guān)系。</p><p> 采用C語言編寫代碼, 鑒于篇幅限制及DS18B20 的應(yīng)用已經(jīng)規(guī)范和成熟, 本文僅就主程序流程圖和顯示子程序流程圖及其代碼進(jìn)行說明。主程序流程圖主程序通過調(diào)用溫度采集子程序完成溫度數(shù)據(jù)采集, 然
60、后調(diào)用溫度轉(zhuǎn)換子程序轉(zhuǎn)換讀取溫度數(shù)據(jù),調(diào)用顯示子程序進(jìn)行溫度顯示和判斷溫度數(shù)據(jù)。下面給出流程圖</p><p><b> 圖9 系統(tǒng)流程圖</b></p><p> 主程序調(diào)用四個子程序,分別是溫度采集程序、溫度顯示程序、溫度處理程序和數(shù)據(jù)存儲程序。溫度采集程序:對溫度芯片送過來的數(shù)據(jù)進(jìn)行處理,進(jìn)行判斷和顯示。顯示程序:向LCD的顯示送數(shù),控制系統(tǒng)的顯示部分。系統(tǒng)
61、詳細(xì)程序見附錄二。</p><p> 根據(jù)上述硬件設(shè)計和軟件設(shè)計,制作出成果,如圖所示:</p><p><b> 圖10 實物圖</b></p><p><b> 4 設(shè)計結(jié)果及分析</b></p><p> 4.1 測試環(huán)境及工具</p><p> 測試溫度:
62、20-100攝氏度。(模擬不同溫度值環(huán)境)</p><p> 測試儀器及軟件:數(shù)字萬用表,標(biāo)準(zhǔn)溫度計20-100攝氏度。</p><p> 4.2 測試方法和測試結(jié)果</p><p> 使系統(tǒng)運行,觀察系統(tǒng)硬件檢測是否正常(包括單片機控制系統(tǒng),鍵盤電路,顯示電路,溫度測試電路等)。系統(tǒng)自帶測試表格數(shù)據(jù),觀察顯示數(shù)據(jù)是否相符合即可。</p><
63、;p> 采用溫度傳感器和溫度計同時測量水溫變化情況,目測顯示電路是否正常。并記錄溫度值,與實際溫度值比較,得出系統(tǒng)的溫度指標(biāo)。得到下表結(jié)果</p><p><b> 表3 溫度測試結(jié)果</b></p><p> 由此可知該數(shù)字溫度計的誤差在1%左右。因此可標(biāo)注-55~+1251.3℃,并且高溫沒有使誤差明顯變大</p><p>&l
64、t;b> 5 總結(jié)</b></p><p> 維持兩周的課程設(shè)計已結(jié)束,設(shè)計制作的多功能溫度計也已完成,挺有收獲的。首先要弄懂如何使用飛思卡爾單片機和DS18B20溫度傳感器,然后設(shè)計了硬件的電路,最后寫程序?qū)崿F(xiàn)了軟件的設(shè)計。在調(diào)試過程中也發(fā)現(xiàn)和解決了好些問題。</p><p> 經(jīng)過此次課程設(shè)計,我真正體會到要理論聯(lián)系實際,把我們所學(xué)的理論知識用到實際當(dāng)中,通過多
65、動手去提高自己的技能,光靠理論不動手是提高不了的。還有,程序一定要多看多模仿著寫才有提高??傊?,此次課程設(shè)計不僅鞏固了單片機方面的理論知識,同時也提高的自己的動手能力、分析問題和解決問題的能力。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]張琳娜,劉武發(fā).傳感檢測技術(shù)及應(yīng)用.中國計量出版社,1999</p><p>
66、 [2]馬忠梅 籍順心 張凱 馬 巖. 單片機的C語言應(yīng)用程序設(shè)計-修訂版.北京航空航天大學(xué)出版社,1998.10</p><p> [3]胡漢才.單片機原理及接口技術(shù).清華大學(xué)出版社,1996</p><p> [4]李志全等.智能儀表設(shè)計原理及應(yīng)用.國防工業(yè)出版社,1998.6</p><p> [5]李朝青.單片機原理及接口技術(shù).北京航空航天大學(xué)出版社
67、,1998.10.15</p><p> [6]李廣弟.單片機基礎(chǔ).北京航空航天大學(xué)出版社,1998.</p><p> [7]閻石.數(shù)字電子技術(shù)基礎(chǔ).北京航空航天大學(xué)出版社,2006.</p><p> [8]李建忠.單片機原理及應(yīng)用.國防工業(yè)出版社,2002</p><p> [9]黃河.基于DS18B20的單總線數(shù)字溫度計.國防
68、工業(yè)出版社,2002</p><p> [10] 程志明. 信號采集系統(tǒng)的設(shè)計與實現(xiàn)[D]. 北京:北京工業(yè)大學(xué),2001. </p><p> [11] 俞謝瓊. 多點溫度測量系統(tǒng)及其在建筑方面的應(yīng)用[J]. 森林工程 . 2007</p><p> [12] 彭泓. 汪玉鳳. 糧倉溫濕度智能控制系統(tǒng)[J]. 中國科技信息 , 2006 </p>
69、<p> [13] 曹會國. 設(shè)施栽培環(huán)境檢測與控制的研究[J]. 安徽農(nóng)業(yè)科學(xué) , 2006 </p><p> [14] 曾為民, 亓協(xié)民. DS18B20在通用多點溫度測控系統(tǒng)中的應(yīng)用[J]. 農(nóng)機化研究 , 2004</p><p> [15]童詩白,華程英.模擬電子技術(shù)基礎(chǔ)(第四版)[M].北京:高等教育出版社,2009.</p><p&g
70、t; [16]吳輝,鄧亞峰,張緒鵬等.電磁諧振式無線供電技術(shù)的性能研究[J].機電信息,2011,24:141-142.</p><p> 附錄一 系統(tǒng)總電路圖</p><p> 圖附一 系統(tǒng)總電路圖</p><p> 附錄二 系統(tǒng)源代碼</p><p> #include <hidef.h> /* for Enab
71、leInterrupts macro */</p><p> #include "derivative.h" /* include peripheral declarations */</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p&
72、gt;<p> #define RS PTAD_PTAD0</p><p> #define RW PTAD_PTAD1</p><p> #define E PTAD_PTAD2</p><p> #define DQ PTAD_PTAD3</p><p> uint miao,fen,xiaoshi;&l
73、t;/p><p> uint time,flag,tltemp,count;</p><p> uchar tab[]= "12-6-19 00:00:00";</p><p> uchar table1[]={"0123456789-"};</p><p> uchar error[]={&q
74、uot;DS18B20 ERROR"};</p><p> uchar table2[]={"WENDU:"};</p><p> uchar User[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};</p><p> void MCU_INIT(void) // 單片機初始化<
75、;/p><p><b> {</b></p><p> ICSC1=0x04;</p><p> ICSC2=0x40;</p><p> ICSTRM=0xa8;</p><p> SOPT1=0x42;</p><p> SOPT2=0x00;</p>
76、;<p><b> }</b></p><p> void delayms(uint x) //延時函數(shù)</p><p><b> { </b></p><p><b> uint i,j;</b></p><p> __RESET_WATC
77、HDOG(); </p><p> for(i=x;i>0;i--)</p><p> for(j=110;j>0;j--);</p><p><b> }</b></p><p> void write_com(uchar com)</p><p><b>
78、{</b></p><p><b> RS=0;</b></p><p><b> RW=0;</b></p><p> delayms(5);</p><p><b> PTBD=com;</b></p><p> delayms
79、(10);</p><p><b> E=1;</b></p><p> delayms(10);</p><p><b> E=0;</b></p><p><b> }</b></p><p> void write_date(uchar
80、date)</p><p><b> {</b></p><p><b> RS=1;</b></p><p><b> RW=0;</b></p><p><b> E=0;</b></p><p> PTBD=date
81、;</p><p> delayms(10);</p><p><b> E=1;</b></p><p> delayms(10);</p><p><b> E=0;</b></p><p><b> }</b></p>&l
82、t;p> /*******************初始化函數(shù)****************************************/</p><p> void TIMER_INI(void)</p><p><b> {</b></p><p> ICSC2_BDIV = 0;</p><p>
83、 MTIMCLK_PS = 8; //時鐘頻率/256</p><p> MTIMCLK_CLKS = 0; //定時器時鐘為總線時鐘</p><p> MTIMMOD = 252; //設(shè)置模數(shù)</p><p> MTIMSC = 0x60; //使能定時器中斷</p><p><b> } </b>&l
84、t;/p><p> void init()</p><p><b> {</b></p><p> uchar num;</p><p><b> E=0;</b></p><p> write_com(0x38);</p><p> writ
85、e_com(0x0c);</p><p> write_com(0x06);</p><p> write_com(0x01);</p><p> for(num=0;num<16;num++)</p><p><b> {</b></p><p> write_date(tab[
86、num]);</p><p> delayms(2);</p><p><b> }</b></p><p><b> }</b></p><p> void write_sfm(uint add,uint date)</p><p><b> {<
87、;/b></p><p> uint shi,ge;</p><p> shi=date/10;</p><p> ge=date%10;</p><p> write_com(0x80+0x08+add);</p><p> write_date(0x30+shi);</p><p
88、> write_date(0x30+ge);</p><p><b> } </b></p><p> uchar INIT_DS18B20()</p><p><b> {</b></p><p> uchar flg;</p><p> PTADD=0x
89、0f;</p><p><b> DQ=1;</b></p><p> for(time=0;time<8;time++);</p><p><b> DQ=0;</b></p><p> for(time=0;time<800;time++);</p><p
90、><b> DQ=1;</b></p><p> for(time=0;time<40;time++);</p><p> PTADD=0x07;</p><p><b> flg=DQ;</b></p><p> for(time=0;time<800;time++);
91、</p><p> return(flg);</p><p><b> }</b></p><p> uchar Readchar(void)</p><p><b> {</b></p><p><b> uchar i;</b></p
92、><p> uchar dat;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> PTADD=0xff;</p><p><b> DQ=1;</b></p><p> asm(
93、"NOP");</p><p> asm("NOP");</p><p> asm("NOP");</p><p> asm("NOP");</p><p><b> DQ=0;</b></p><p> a
94、sm("NOP");</p><p> asm("NOP");</p><p> asm("NOP");</p><p> asm("NOP");</p><p><b> DQ=1;</b></p><p>
95、 for(time=0;time<8;time++);</p><p><b> dat>>=1;</b></p><p> PTADD=0x07;</p><p><b> if(DQ==1)</b></p><p> dat|=0x80;</p><
96、;p><b> else</b></p><p> dat|=0x00;</p><p> for(time=0;time<32;time++);</p><p><b> }</b></p><p> return(dat);</p><p><
97、b> }</b></p><p> void Writechar(uchar dat)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p&g
98、t;<b> {</b></p><p> PTADD=0xff;</p><p><b> DQ=1;</b></p><p> asm("NOP");</p><p> asm("NOP");</p><p> asm(
99、"NOP");</p><p> asm("NOP");</p><p><b> DQ=0;</b></p><p> DQ=dat&0x01;</p><p> for(time=0;time<40;time++);</p><p>
100、;<b> DQ=1;</b></p><p> for(time=0;time<4;time++);</p><p><b> dat>>=1;</b></p><p><b> }</b></p><p> for(time=0;time<
101、16;time++);</p><p><b> }</b></p><p> void display_error(void)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> wri
102、te_com(0x80+0x40);</p><p><b> i=0;</b></p><p> while(error[i]!='\0')</p><p><b> {</b></p><p> write_date(error[i]);</p><p
103、><b> i++;</b></p><p> delayms(40);</p><p><b> }</b></p><p><b> }</b></p><p> void Readyread(void)</p><p><b&
104、gt; {</b></p><p> INIT_DS18B20();</p><p> Writechar(0xcc);</p><p> Writechar(0x44);</p><p> delayms(800);</p><p> INIT_DS18B20();</p>&l
105、t;p> Writechar(0xcc);</p><p> Writechar(0xbe);</p><p><b> } </b></p><p> void display_wendu(void)</p><p><b> {</b></p><p>
106、 uchar i=0;</p><p> write_com(0x80+0x40);</p><p> while(table2[i]!='\0')</p><p><b> {</b></p><p> write_date(table2[i]);</p><p><
107、;b> i++;</b></p><p> delayms(40);</p><p><b> }</b></p><p><b> }</b></p><p> void display_dot(void)</p><p><b>
108、{</b></p><p> write_com(0x80+0x49);</p><p> write_date('.');</p><p> delayms(50);</p><p><b> }</b></p><p> void display_cent
109、(void)</p><p><b> {</b></p><p><b> uchar j;</b></p><p> write_com(0x40);</p><p> delayms(5);</p><p> for(j=0;j<8;j++)</p
110、><p><b> {</b></p><p> write_date(User[j]);</p><p><b> }</b></p><p> write_com(0x80+0x40+11);</p><p> delayms(5);</p><
111、p> write_date(0x00);</p><p><b> }</b></p><p> void display_tempz(uint x)</p><p><b> {</b></p><p> uint bai,shi,ge;</p><p>
112、 bai=x/100;</p><p> shi=(x%100)/10;</p><p><b> ge=x%10;</b></p><p> write_com(0x80+0x46);</p><p> if(flag==0x01)</p><p><b> {</b&
113、gt;</p><p> write_date(table1[10]);</p><p><b> }</b></p><p><b> else</b></p><p> write_date(table1[bai]);</p><p> write_date(
114、table1[shi]);</p><p> write_date(table1[ge]);</p><p> delayms(40);</p><p><b> }</b></p><p> void display_tempx(uint y)</p><p><b> {&
115、lt;/b></p><p> write_com(0x80+0x40+10);</p><p> write_date(table1[y]);</p><p> delayms(40);</p><p><b> } </b></p><p> void main(void)
116、</p><p><b> {</b></p><p> uint TL,TH,TN,TD; </p><p> PTBDD=0xff;</p><p> PTADD=0x0f;</p><p> MCU_INIT();</p><p> TIMER_INI()
117、;</p><p><b> init();</b></p><p> delayms(5);</p><p> if(INIT_DS18B20()==0x01)</p><p> display_error();</p><p> display_wendu();</p>
118、<p> display_dot();</p><p> display_cent(); </p><p> EnableInterrupts; /* enable interrupts */</p><p><b> for(;;) </b></p>&l
119、t;p><b> {</b></p><p><b> flag=0;</b></p><p> Readyread();</p><p> TL=Readchar();</p><p> TH=Readchar();</p><p> if((TH&
120、;0xf8)!=0x00)</p><p><b> {</b></p><p><b> flag=1;</b></p><p><b> TL=~TL;</b></p><p><b> TH=~TH;</b></p><p
121、> tltemp=TL+1;</p><p> TL=tltemp;</p><p> if(tltemp>255)</p><p><b> TH++;</b></p><p> TN=TH*16+TL/16;</p><p> TD=(TL%16)*10/16;<
122、/p><p><b> }</b></p><p> TN=TH*16+TL/16;</p><p> TD=(TL%16)*10/16;</p><p> display_tempz(TN);</p><p> display_tempx(TD);</p><p>
123、 delayms(10);</p><p><b> }</b></p><p><b> }</b></p><p> /* loop forever */</p><p> /* please make sure that you never leave main */</p&g
124、t;<p> interrupt 12 void MTIM_ISR(void) </p><p><b> {</b></p><p><b> count++;</b></p><p> MTIMSC_TOF=0; // clear TOF </p><p>
125、if(count==120) </p><p><b> {</b></p><p><b> count=0;</b></p><p><b> miao++;</b></p><p> if(miao==60)</p><p><b&g
126、t; {</b></p><p><b> miao=0;</b></p><p><b> fen++;</b></p><p> if(fen==60)</p><p><b> {</b></p><p><b>
127、 fen=0;</b></p><p> xiaoshi++;</p><p> if(xiaoshi==24)</p><p> xiaoshi=0;</p><p> write_sfm(0,xiaoshi);</p><p><b> }</b></p>
128、<p> write_sfm(3,fen);</p><p><b> }</b></p><p> write_sfm(6,miao); </p><p><b> } </b></p><p><b> } </b></p><
129、p> g an employment tribunal claim</p><p> Employment tribunals sort out disagreements between employers and employees.</p><p> You may need to make a claim to an employment tribunal if:<
130、;/p><p> you don't agree with the disciplinary action your employer has taken against you</p><p> your employer dismisses you and you think that you have been dismissed unfairly.</p>&
131、lt;p> For more information about dismissal and unfair dismissal, see Dismissal.</p><p> You can make a claim to an employment tribunal, even if you haven't appealed against the discip
132、linary action your employer has taken against you. However, if you win your case, the tribunal may reduce any compensation awarded to you as a result of your failure to appeal.</p><p> Remember that in most
133、 cases you must make an application to an employment tribunal within three months of the date when the event you are complaining about happened. If your application is received after this time limit, the tribunal will no
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計-單片機溫度計人工智能時鐘溫度計
- 溫度計課程設(shè)計---基于51單片機數(shù)字溫度計設(shè)計
- 單片機溫度計課程設(shè)計
- 數(shù)字溫度計課程設(shè)計---基于51單片機數(shù)字溫度計設(shè)計
- 數(shù)字溫度計課程設(shè)計---基于51單片機數(shù)字溫度計設(shè)計
- 單片機課程設(shè)計--數(shù)字溫度計
- 單片機課程設(shè)計--數(shù)字溫度計
- 單片機課程設(shè)計-數(shù)字溫度計
- 單片機課程設(shè)計—數(shù)字溫度計
- 單片機數(shù)字溫度計課程設(shè)計
- 單片機課程設(shè)計---數(shù)字溫度計
- 單片機課程設(shè)計-數(shù)字溫度計
- 單片機課程設(shè)計—數(shù)字溫度計
- 單片機課程設(shè)計——數(shù)字溫度計
- 單片機課程設(shè)計—數(shù)字溫度計
- 基于單片機溫度計課程設(shè)計
- 單片機課程設(shè)計-數(shù)字溫度計
- 基于單片機溫度計課程設(shè)計
- 數(shù)字溫度計--單片機課程設(shè)計
- 單片機課程設(shè)計--數(shù)字溫度計設(shè)計
評論
0/150
提交評論