2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  XXXXX大學(xué)物電學(xué)院</p><p><b>  單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p>  課 程 名 稱: 單片機(jī)課程實(shí)訓(xùn) </p><p>  題 目: 人工智能時(shí)鐘溫度計(jì) </p><p>  專 業(yè) 班 級(jí):

2、 </p><p>  學(xué) 生 姓 名: </p><p>  學(xué) 生 學(xué) 號(hào): </p><p>  日 期: </p><p&

3、gt;  指 導(dǎo) 教 師:   </p><p><b>  教務(wù)部印制</b></p><p>  指導(dǎo)教師簽字: </p><p>  年 月 日</p><p><b>  目 錄</b><

4、;/p><p><b>  摘 要III</b></p><p>  AbstractIII</p><p><b>  1 課題背景1</b></p><p>  1.1 系統(tǒng)設(shè)計(jì)1</p><p>  1.2 總體方框圖1</p><p>

5、  1.3 基本要求1</p><p>  2 設(shè)計(jì)方案簡(jiǎn)述2</p><p>  2.1 DS18B20數(shù)字溫度傳感器2</p><p>  2.1.1 DS18B20的性能特點(diǎn)2</p><p>  2.1.2 DS18B20的管腳分布2</p><p>  2.1.3 DS18B20的內(nèi)部結(jié)構(gòu)和工作方式

6、3</p><p>  2.2飛思卡爾單片機(jī)5</p><p>  2.3 1602型LCD6</p><p>  2.3.1 1602型LCD的特性6</p><p>  2.3.2 1602型LCD的操作控制6</p><p><b>  3 詳細(xì)設(shè)計(jì)7</b></p>

7、<p>  3.1 溫度采集模塊7</p><p>  3.2 單片機(jī)控制系統(tǒng)7</p><p>  3.3 溫度和時(shí)間顯示模塊8</p><p>  3.4 軟件設(shè)計(jì)8</p><p>  3.4.1 DS18B20的溫度采集程序9</p><p>  3.4.2 系統(tǒng)主程序13</p

8、><p>  4 設(shè)計(jì)結(jié)果及分析15</p><p>  4.1 測(cè)試環(huán)境及工具15</p><p>  4.2 測(cè)試方法和測(cè)試結(jié)果15</p><p><b>  5 總結(jié)16</b></p><p><b>  參考文獻(xiàn)17</b></p><p

9、>  附錄一 系統(tǒng)總電路圖18</p><p>  附錄二 系統(tǒng)源代碼18</p><p><b>  摘 要</b></p><p>  傳統(tǒng)溫度計(jì)通常利用熱脹冷縮現(xiàn)象為設(shè)計(jì)的依據(jù),因此這種方法無論從設(shè)計(jì)原理還是視覺讀數(shù)都有很大的誤差。本次課程設(shè)計(jì)以DS18B20作為數(shù)字溫度傳感器,其具有線性優(yōu)良、讀取方便、性能穩(wěn)定、靈敏度高

10、、抗干擾能力強(qiáng)、使用方便等優(yōu)點(diǎn),可以大大提高測(cè)量溫度的精度,使用飛思卡爾MC9S08QG8單片機(jī)控制,布線緊湊,能夠滿足各項(xiàng)測(cè)溫需求。在測(cè)量溫度的同時(shí),還能顯示時(shí)間,為溫度的數(shù)字化存儲(chǔ)、監(jiān)測(cè)、傳輸、處理奠定了很好的基礎(chǔ)。設(shè)計(jì)小巧,攜帶方便,并可以應(yīng)用于冰箱、空調(diào)器等日常生活中溫度的測(cè)量和控制。</p><p>  關(guān)鍵詞:溫度計(jì);DS18B20;MC9S08QG8</p><p><

11、b>  Abstract</b></p><p>  Traditional thermometer usual use expand with heat and contract with cold phenomenon for design basis, therefore this method regardless of all has the very big error from t

12、he principle of design or the visible reading. This curriculum designs by DS18B20 took the digital temperature sensor, it has the linearity finely, the read convenient, the performance stable, the high sensitivity, a mer

13、its and so on easy to operate, may enhance the survey temperature greatly the precision, the use Freescale M</p><p>  Keywords: Thermometer; DS18B20; MC9S08QG8</p><p><b>  1 課題背景</b>

14、</p><p><b>  1.1 系統(tǒng)設(shè)計(jì)</b></p><p>  本課程設(shè)計(jì)的任務(wù)是設(shè)計(jì)和制作一個(gè)人工智能數(shù)字溫度計(jì)。由于在生產(chǎn)生活中都有很多領(lǐng)域需要測(cè)量溫度,所以溫度計(jì)的好壞即測(cè)量靈敏度,測(cè)溫范圍,穩(wěn)定度以及實(shí)用性和適用性就顯得尤為重要。傳統(tǒng)溫度計(jì)通常利用固體、液體、氣體受溫度的影響而熱脹冷縮等的現(xiàn)象為設(shè)計(jì)的依據(jù),因此這種方法無論從設(shè)計(jì)原理還是視覺讀數(shù)都有

15、很大的誤差。本次課程設(shè)計(jì)以DS18B20作為數(shù)字溫度傳感器,其具有線性優(yōu)良、性能穩(wěn)定、靈敏度高、抗干擾能力強(qiáng)、使用方便等優(yōu)點(diǎn),可以大大提高測(cè)量溫度的精度,并可以廣泛應(yīng)用于冰箱、空調(diào)器、糧倉等日常生活中溫度的測(cè)量和控制。</p><p><b>  1.2 總體方框圖</b></p><p>  現(xiàn)將系統(tǒng)模塊總體設(shè)計(jì)框圖列于下圖1中:</p><p&

16、gt;  圖1 總體設(shè)計(jì)方框圖</p><p><b>  1.3 基本要求</b></p><p>  1. 使用飛思卡爾單片機(jī)設(shè)計(jì),使用DS18B20作為數(shù)字溫度傳感器;</p><p>  2. 能夠較準(zhǔn)確的測(cè)量溫度并核算誤差;</p><p>  3. 能夠顯示時(shí)間,系統(tǒng)錯(cuò)誤代碼等信息;</p>&

17、lt;p><b>  2 設(shè)計(jì)方案簡(jiǎn)述</b></p><p>  2.1 DS18B20數(shù)字溫度傳感器</p><p>  DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司生產(chǎn)的DS18B20型單線智能溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)

18、字值讀數(shù)方式。可廣泛用于工業(yè)、民用、軍事等領(lǐng)域的溫度測(cè)量及控制儀器、測(cè)控系統(tǒng)和大型設(shè)備中。它具有體積小,接口方便,傳輸距離遠(yuǎn)等特點(diǎn)。 </p><p>  2.1.1 DS18B20的性能特點(diǎn)</p><p>  DS18B20從功能和技術(shù)的角度來說有以下性能特點(diǎn):</p><p>  采用單總線專用技術(shù),既可通過串行口線,也可通過其它I/O口線與微機(jī)接口,無須經(jīng)過

19、其它變換電路,直接輸出被測(cè)溫度值(9位二進(jìn)制數(shù),含符號(hào)位)</p><p>  測(cè)溫范圍為-55℃至+125℃,測(cè)量分辨率最小為0.0625℃</p><p>  內(nèi)含64位經(jīng)過激光修正的只讀存儲(chǔ)器ROM</p><p>  DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)</p><p>  

20、適配各種單片機(jī)或系統(tǒng)機(jī)</p><p>  測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線總線”串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力</p><p>  用戶可分別設(shè)定各路溫度的上、下限</p><p>  適應(yīng)電壓范圍寬,3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電</p><p>  2.1.2 DS18B20的

21、管腳分布</p><p>  獨(dú)特的一線接口,只需要一條口線通信 多點(diǎn)能力,簡(jiǎn)化了分布式溫度傳感應(yīng)用 無需外部元件 可用數(shù)據(jù)總線供電,電壓范圍為3.0 V至5.5 V 無需備用電源 測(cè)量溫度范圍為-55℃至+125℃,華氏相當(dāng)于是-10℉至+85℉范圍內(nèi)精度為±0.5℉。</p><p>  其引腳排列見圖2和表1。</p><p><b>  

22、2 3</b></p><p>  圖2 DS18B20的管腳分布圖 表1 DS18B20的管腳分布說明</p><p>  2.1.3 DS18B20的內(nèi)部結(jié)構(gòu)和工作方式</p><p>  DS1820主要包括寄生電源、溫度傳感器、64位激光ROM單線接口、存放中間數(shù)據(jù)的高速暫存器(內(nèi)含便箋式RAM),用于存儲(chǔ)用戶設(shè)定的溫度

23、上下限值的TH和TL觸發(fā)器存儲(chǔ)與控制邏輯、8位循環(huán)冗余校驗(yà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位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼。溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入戶報(bào)警上下限。</p><

24、;p>  DS18B20溫度傳感器與單片機(jī)的接口電路DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線,3腳接電源。另一種是寄生電源供電方式,單片機(jī)端口接單線總線,為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管來完成對(duì)總線的上拉。本實(shí)驗(yàn)采用第一種。</p><p>  DS18B20的測(cè)溫原理是這這樣的,器件中低溫度系數(shù)晶振

25、的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個(gè)計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測(cè)量前,首先將-55℃所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)

26、值。減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時(shí),停止溫度寄存器的累加,此時(shí)溫度寄存器中的數(shù)值就是所測(cè)溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致等于被測(cè)溫度值。</p><p&

27、gt;  由于DS18B20的單線通訊功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對(duì)DS18B20的各種操作按協(xié)議進(jìn)行,操作協(xié)議為:初始化DS18B20發(fā)復(fù)位脈沖寫ROM功能指令發(fā)存儲(chǔ)器操作命令處理數(shù)據(jù)。DS18B20有六條控制命令如表2所示:</p><p>  表2 DS18B20的控制指令</p><p>  2.2飛思卡爾單片機(jī)</p><p&

28、gt;  本次課程設(shè)計(jì)的飛思卡爾系列的8位單片機(jī)MC9S08QG8,它是飛思卡爾新一代8位單片機(jī),主要針對(duì)少管腳、低電壓及低功耗應(yīng)用。MC9S08QG體積雖小,但具有極高的集成度,它改寫了低端器件的定義。其引腳圖如下所示:</p><p>  圖4 MC9S08QG8引腳圖</p><p>  飛思卡爾的HCS08內(nèi)核低引腳數(shù),小型封裝,8位微控制器。設(shè)備與芯片上的電路低電壓閃存可編程電

29、壓低至1.8V,并負(fù)擔(dān)所有HCS08系列的標(biāo)準(zhǔn)功能微控制器,包括等待模式和多個(gè)站模式。該功能完成強(qiáng)大的模擬功能,一套完整的串行模塊,溫度傳感器和強(qiáng)大的內(nèi)存選項(xiàng)。</p><p><b>  其主要有以下特點(diǎn):</b></p><p>  高達(dá)20 MHz的HCS08系列CPU(10 MHz總線頻率) 100 ns最小指令執(zhí)行時(shí)間 </p><p&

30、gt;  提供高性能,即使在低電壓也能電池供電的應(yīng)用水平 </p><p>  HC08指令增加了BGND指令設(shè)置 </p><p>  向后對(duì)象代碼的兼容性與68HC08,68HC05使現(xiàn)有的代碼庫仍然可以使用 </p><p>  允許高效,緊湊的模塊編碼 </p><p>  支持多達(dá)32個(gè)中斷/復(fù)位源 </p><

31、p>  允許軟件的靈活性和優(yōu)化 </p><p>  低功耗振蕩器模塊(XOSC)軟件 </p><p>  可選擇晶體或陶瓷諧振器,31.25kHz至38.4 kHz或1MHz至16 MHz的,并支持高達(dá)20 MHz的外部時(shí)鐘源輸入32kHz振蕩器,提供低功耗選項(xiàng) 系統(tǒng)要求計(jì)時(shí)功能(即時(shí)間和日期)而在低功耗模式12個(gè)雙向輸入/輸出(I/O的)線</p><p&g

32、t;  只有一個(gè)輸入和一個(gè)輸出只有一行 輸出10毫安每包為60 mA最大電流I/O允許直接驅(qū)動(dòng)LED的其他電路幾乎完全消除了外部驅(qū)動(dòng)器并降低系統(tǒng)成本 。</p><p>  2.3 1602型LCD</p><p>  本溫度計(jì)的讀數(shù)的顯示是通過1602型LCD實(shí)現(xiàn)的,其具有微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的特點(diǎn),常用在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中。</p><p

33、>  2.3.1 1602型LCD的特性</p><p>  1602型LCD歸納起來有以下6大特點(diǎn):</p><p>  +5V電壓,對(duì)比度可調(diào)</p><p><b>  內(nèi)含復(fù)位電路</b></p><p>  提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能</p><

34、p>  有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAM</p><p>  內(nèi)建有192個(gè)5X7點(diǎn)陣的字型的字符發(fā)生器CGROM</p><p>  8個(gè)可由用戶自定義的5X7的字符發(fā)生器CGRAM</p><p>  2.3.2 1602型LCD的操作控制</p><p>  1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不

35、同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。</p><p>  因?yàn)?602識(shí)別的是ASCII碼,試驗(yàn)可以用ASCII碼直接賦值,在單片機(jī)編程中還可以用字符型常量或變量賦值,如'A'。以下是1

36、602的16進(jìn)制ASCII碼表地址:讀的時(shí)候,先讀左邊那列,再讀上面那行,如:感嘆號(hào)'!'的ASCII為0x21,字母B的ASCII為0x42。</p><p><b>  3 詳細(xì)設(shè)計(jì)</b></p><p>  3.1 溫度采集模塊 </p><p>  溫度采集模塊的核心即是溫度傳感器DS18B20,其接線方法和引腳排列已

37、在上文詳述。因此可以設(shè)計(jì)出圖5所示溫度采集模塊電路圖。</p><p><b>  圖5 溫度采集模塊</b></p><p>  本次設(shè)計(jì)所采用的溫度傳感器為Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器,它是世界上第一片支持“一線總線”接口的溫度傳感器?!耙痪€器件”體積更小、適用電壓更寬、更經(jīng)濟(jì)。并且分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM中,掉電后依然保存。

38、</p><p>  DSl8B20數(shù)字溫度計(jì)提供9位(二進(jìn)制)溫度讀數(shù),指示器件的溫度信息經(jīng)過單線接口送入DSl8B20或從DSl8B20送出,因此從主機(jī)CPU到DSl8B20僅需一條線,當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高速暫存存儲(chǔ)器的第1、2字節(jié)。單片機(jī)可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625

39、℃/LSB形式表示。</p><p>  當(dāng)符號(hào)位S=0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位S=1時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。</p><p>  3.2 單片機(jī)控制系統(tǒng)</p><p>  根據(jù)飛思卡爾系列的8位單片機(jī)MC9S08QG8的特點(diǎn)和接線圖,可得單片機(jī)控制系統(tǒng)的電路圖如圖6所示,這樣便

40、實(shí)現(xiàn)了對(duì)DS18B20的信息采集、反饋以及對(duì)LCD的控制。</p><p>  圖6 單片機(jī)控制模塊</p><p>  3.3 溫度和時(shí)間顯示模塊</p><p>  溫度顯示和時(shí)間顯示都主要是通過1602型LCD實(shí)現(xiàn),1602型LCD采用標(biāo)準(zhǔn)的16腳接口,其中: </p><p>  第1腳:VSS為電源地 </p><

41、;p>  第2腳:VDD接5V電源正極 </p><p>  第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過高時(shí)會(huì) 產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度)。 </p><p>  第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。 </p><p>  第5腳:RW為讀

42、寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。 </p><p>  第6腳:E(或EN)端為使能(enable)端。 </p><p>  第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。 </p><p>  第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。</p><p>  顯示電路是使用的LCD1602液晶

43、顯示,這種顯示最大的優(yōu)點(diǎn)就是使用字符型顯示,可以顯示兩行,第一行顯示日期與當(dāng)前時(shí)間,第二行顯示當(dāng)前溫度,當(dāng)DS18B20出現(xiàn)顯示錯(cuò)誤時(shí)第二行溫度不顯示會(huì)出現(xiàn)錯(cuò)誤提示,此款液晶功耗低,操作方便,顯示相當(dāng)清晰。</p><p><b>  從而得到圖7</b></p><p>  圖7 顯示模塊電路圖</p><p><b>  3.4

44、軟件設(shè)計(jì)</b></p><p>  本章從設(shè)計(jì)思路、軟件系統(tǒng)框圖出發(fā),先介紹整體的思路后,再逐一分析各模塊程序算法的實(shí)現(xiàn),最終編寫出滿足任務(wù)需求的程序。</p><p>  3.4.1 DS18B20的溫度采集程序</p><p>  DS18B20器件要求采用嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。該協(xié)議定義了幾種信號(hào)類型:復(fù)位脈沖,應(yīng)答脈沖時(shí)隙;寫0,

45、寫1時(shí)隙;讀0,讀1時(shí)隙。與DS18B20的通信,是通過操作時(shí)隙完成單總線上的數(shù)據(jù)傳輸。發(fā)送所有的命令和數(shù)據(jù)時(shí),都是字節(jié)的低位在前,高位在后。</p><p>  該模塊的系統(tǒng)流程圖為</p><p>  圖8 溫度采集模塊的系統(tǒng)流程圖</p><p>  DS18B20的初始化</p><p>  1.先將數(shù)據(jù)線置高電平“1”。</p

46、><p>  2.延時(shí)(該時(shí)間要求的不是很嚴(yán)格,但是盡可能的短一點(diǎn))</p><p>  3.數(shù)據(jù)線拉到低電平“0”。</p><p>  4.延時(shí)750微秒(該時(shí)間的時(shí)間范圍可以從480到960微秒)。</p><p>  5.數(shù)據(jù)線拉到高電平“1”。</p><p>  6.延時(shí)等待(如果初始化成功則在15到60毫秒時(shí)

47、間之內(nèi)產(chǎn)生一個(gè)由DS18B20所返回的低電平“0”。據(jù)該狀態(tài)可以來確定它的存在,但是應(yīng)注意不能無限的進(jìn)行等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要進(jìn)行超時(shí)控制)。</p><p>  7.若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時(shí),其延時(shí)的時(shí)間從發(fā)出的高電平算起(第5步的時(shí)間算起)最少要480微秒。</p><p>  8.將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。</p>&

48、lt;p>  DS18B20初始化程序?yàn)椋?lt;/p><p>  void Init_DS18B20(void)</p><p><b>  {</b></p><p>  unsigned char x=0;</p><p>  DQ = 1; //DQ復(fù)位</p><p>

49、  Delay_DS18B20(8); //稍做延時(shí)</p><p>  DQ = 0; //單片機(jī)將DQ拉低</p><p>  Delay_DS18B20(80); //精確延時(shí),大于480us</p><p>  DQ = 1; //拉高總線</p><p>  Delay_DS18B20(14

50、);</p><p>  x = DQ; //稍做延時(shí)后,如果x=0則初始化成功,x=1則初始化失敗</p><p>  Delay_DS18B20(20);</p><p>  DS18B20的寫操作</p><p>  1.數(shù)據(jù)線先置低電平“0”。</p><p>  2.延時(shí)確定的時(shí)間為15微

51、秒。</p><p>  3.按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位)。</p><p>  4.延時(shí)時(shí)間為45微秒。</p><p>  5.將數(shù)據(jù)線拉到高電平。</p><p>  6.重復(fù)上1到6的操作直到所有的字節(jié)全部發(fā)送完為止。</p><p>  7.最后將數(shù)據(jù)線拉高。</p><

52、p>  DS18B20的寫程序?yàn)?lt;/p><p>  void WriteOneChar(unsigned char dat)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p>&

53、lt;p><b>  {</b></p><p><b>  DQ = 0;</b></p><p>  DQ = dat&0x01;</p><p>  Delay_DS18B20(5);</p><p><b>  DQ = 1;</b></p>

54、<p><b>  dat>>=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  DS18B20的讀操作</p><p>  1.將數(shù)據(jù)線拉高“1”。</p><p>

55、;<b>  2.延時(shí)2微秒。</b></p><p>  3.將數(shù)據(jù)線拉低“0”。</p><p><b>  4.延時(shí)15微秒。</b></p><p>  5.將數(shù)據(jù)線拉高“1”。</p><p><b>  6.延時(shí)15微秒。</b></p><p&

56、gt;  7.讀數(shù)據(jù)線的狀態(tài)得到1個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。</p><p><b>  8.延時(shí)30微秒。</b></p><p>  DS18B20的讀程序?yàn)?lt;/p><p>  unsigned char ReadOneChar(void)</p><p><b>  {</b></p&

57、gt;<p>  unsigned char i=0;</p><p>  unsigned char dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ = 0; // 給脈沖信號(hào)</p>

58、<p><b>  dat>>=1;</b></p><p>  DQ = 1; // 給脈沖信號(hào)</p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p>  Delay_DS18B20(4);</p>

59、<p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  3.4.2 系統(tǒng)主程序</p><p>  首先要根據(jù)系統(tǒng)的總體功能和鍵盤設(shè)置選擇一種最合適的監(jiān)控程序結(jié)構(gòu),然后根據(jù)實(shí)時(shí)性的要求,合理地安排監(jiān)控軟件和各

60、執(zhí)行模塊之間地調(diào)度關(guān)系。</p><p>  采用C語言編寫代碼, 鑒于篇幅限制及DS18B20 的應(yīng)用已經(jīng)規(guī)范和成熟, 本文僅就主程序流程圖和顯示子程序流程圖及其代碼進(jìn)行說明。主程序流程圖主程序通過調(diào)用溫度采集子程序完成溫度數(shù)據(jù)采集, 然后調(diào)用溫度轉(zhuǎn)換子程序轉(zhuǎn)換讀取溫度數(shù)據(jù),調(diào)用顯示子程序進(jìn)行溫度顯示和判斷溫度數(shù)據(jù)。下面給出流程圖</p><p><b>  圖9 系統(tǒng)流程圖&

61、lt;/b></p><p>  主程序調(diào)用四個(gè)子程序,分別是溫度采集程序、溫度顯示程序、溫度處理程序和數(shù)據(jù)存儲(chǔ)程序。溫度采集程序:對(duì)溫度芯片送過來的數(shù)據(jù)進(jìn)行處理,進(jìn)行判斷和顯示。顯示程序:向LCD的顯示送數(shù),控制系統(tǒng)的顯示部分。系統(tǒng)詳細(xì)程序見附錄二。</p><p>  根據(jù)上述硬件設(shè)計(jì)和軟件設(shè)計(jì),制作出成果,如圖所示:</p><p><b> 

62、 圖10 實(shí)物圖</b></p><p><b>  4 設(shè)計(jì)結(jié)果及分析</b></p><p>  4.1 測(cè)試環(huán)境及工具</p><p>  測(cè)試溫度:20-100攝氏度。(模擬不同溫度值環(huán)境)</p><p>  測(cè)試儀器及軟件:數(shù)字萬用表,標(biāo)準(zhǔn)溫度計(jì)20-100攝氏度。</p><

63、;p>  4.2 測(cè)試方法和測(cè)試結(jié)果</p><p>  使系統(tǒng)運(yùn)行,觀察系統(tǒng)硬件檢測(cè)是否正常(包括單片機(jī)控制系統(tǒng),鍵盤電路,顯示電路,溫度測(cè)試電路等)。系統(tǒng)自帶測(cè)試表格數(shù)據(jù),觀察顯示數(shù)據(jù)是否相符合即可。</p><p>  采用溫度傳感器和溫度計(jì)同時(shí)測(cè)量水溫變化情況,目測(cè)顯示電路是否正常。并記錄溫度值,與實(shí)際溫度值比較,得出系統(tǒng)的溫度指標(biāo)。得到下表結(jié)果</p><

64、;p><b>  表3 溫度測(cè)試結(jié)果</b></p><p>  由此可知該數(shù)字溫度計(jì)的誤差在1%左右。因此可標(biāo)注-55~+1251.3℃,并且高溫沒有使誤差明顯變大</p><p><b>  5 總結(jié)</b></p><p>  維持兩周的課程設(shè)計(jì)已結(jié)束,設(shè)計(jì)制作的多功能溫度計(jì)也已完成,挺有收獲的。首先要弄懂如何

65、使用飛思卡爾單片機(jī)和DS18B20溫度傳感器,然后設(shè)計(jì)了硬件的電路,最后寫程序?qū)崿F(xiàn)了軟件的設(shè)計(jì)。在調(diào)試過程中也發(fā)現(xiàn)和解決了好些問題。</p><p>  經(jīng)過此次課程設(shè)計(jì),我真正體會(huì)到要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,通過多動(dòng)手去提高自己的技能,光靠理論不動(dòng)手是提高不了的。還有,程序一定要多看多模仿著寫才有提高。總之,此次課程設(shè)計(jì)不僅鞏固了單片機(jī)方面的理論知識(shí),同時(shí)也提高的自己的動(dòng)手能力、分析問題

66、和解決問題的能力。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]張琳娜,劉武發(fā).傳感檢測(cè)技術(shù)及應(yīng)用.中國(guó)計(jì)量出版社,1999</p><p>  [2]馬忠梅 籍順心 張凱 馬 巖. 單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)-修訂版.北京航空航天大學(xué)出版社,1998.10</p><p>  [3]胡漢才.

67、單片機(jī)原理及接口技術(shù).清華大學(xué)出版社,1996</p><p>  [4]李志全等.智能儀表設(shè)計(jì)原理及應(yīng)用.國(guó)防工業(yè)出版社,1998.6</p><p>  [5]李朝青.單片機(jī)原理及接口技術(shù).北京航空航天大學(xué)出版社,1998.10.15</p><p>  [6]李廣弟.單片機(jī)基礎(chǔ).北京航空航天大學(xué)出版社,1998.</p><p>  [

68、7]閻石.數(shù)字電子技術(shù)基礎(chǔ).北京航空航天大學(xué)出版社,2006.</p><p>  [8]李建忠.單片機(jī)原理及應(yīng)用.國(guó)防工業(yè)出版社,2002</p><p>  [9]黃河.基于DS18B20的單總線數(shù)字溫度計(jì).國(guó)防工業(yè)出版社,2002</p><p>  [10] 程志明. 信號(hào)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京工業(yè)大學(xué),2001. </p>

69、<p>  [11] 俞謝瓊. 多點(diǎn)溫度測(cè)量系統(tǒng)及其在建筑方面的應(yīng)用[J]. 森林工程 . 2007</p><p>  [12] 彭泓. 汪玉鳳. 糧倉溫濕度智能控制系統(tǒng)[J]. 中國(guó)科技信息 , 2006 </p><p>  [13] 曹會(huì)國(guó). 設(shè)施栽培環(huán)境檢測(cè)與控制的研究[J]. 安徽農(nóng)業(yè)科學(xué) , 2006 </p><p>  [14] 曾為民,

70、 亓協(xié)民. DS18B20在通用多點(diǎn)溫度測(cè)控系統(tǒng)中的應(yīng)用[J]. 農(nóng)機(jī)化研究 , 2004</p><p>  [15]童詩白,華程英.模擬電子技術(shù)基礎(chǔ)(第四版)[M].北京:高等教育出版社,2009.</p><p>  [16]吳輝,鄧亞峰,張緒鵬等.電磁諧振式無線供電技術(shù)的性能研究[J].機(jī)電信息,2011,24:141-142.</p><p>  附錄一

71、 系統(tǒng)總電路圖</p><p>  圖附一 系統(tǒng)總電路圖</p><p>  附錄二 系統(tǒng)源代碼</p><p>  #include <hidef.h> /* for EnableInterrupts macro */</p><p>  #include "derivative.h" /* include

72、 peripheral declarations */</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define RS PTAD_PTAD0</p><p>  #define RW PTAD_PTAD1</

73、p><p>  #define E PTAD_PTAD2</p><p>  #define DQ PTAD_PTAD3</p><p>  uint miao,fen,xiaoshi;</p><p>  uint time,flag,tltemp,count;</p><p>  uchar tab[]= &qu

74、ot;12-6-19 00:00:00";</p><p>  uchar table1[]={"0123456789-"};</p><p>  uchar error[]={"DS18B20 ERROR"};</p><p>  uchar table2[]={"WENDU:"};<

75、;/p><p>  uchar User[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};</p><p>  void MCU_INIT(void) // 單片機(jī)初始化</p><p><b>  {</b></p><p>  ICSC1=0x04;</p>&l

76、t;p>  ICSC2=0x40;</p><p>  ICSTRM=0xa8;</p><p>  SOPT1=0x42;</p><p>  SOPT2=0x00;</p><p><b>  }</b></p><p>  void delayms(uint x) //延時(shí)

77、函數(shù)</p><p><b>  { </b></p><p><b>  uint i,j;</b></p><p>  __RESET_WATCHDOG(); </p><p>  for(i=x;i>0;i--)</p><p>  for(j=110;j&g

78、t;0;j--);</p><p><b>  }</b></p><p>  void write_com(uchar com)</p><p><b>  {</b></p><p><b>  RS=0;</b></p><p><b>

79、  RW=0;</b></p><p>  delayms(5);</p><p><b>  PTBD=com;</b></p><p>  delayms(10);</p><p><b>  E=1;</b></p><p>  delayms(10);&l

80、t;/p><p><b>  E=0;</b></p><p><b>  }</b></p><p>  void write_date(uchar date)</p><p><b>  {</b></p><p><b>  RS=1;<

81、;/b></p><p><b>  RW=0;</b></p><p><b>  E=0;</b></p><p>  PTBD=date;</p><p>  delayms(10);</p><p><b>  E=1;</b></p

82、><p>  delayms(10);</p><p><b>  E=0;</b></p><p><b>  }</b></p><p>  /*******************初始化函數(shù)****************************************/</p>&

83、lt;p>  void TIMER_INI(void)</p><p><b>  {</b></p><p>  ICSC2_BDIV = 0;</p><p>  MTIMCLK_PS = 8; //時(shí)鐘頻率/256</p><p>  MTIMCLK_CLKS = 0; //定時(shí)器時(shí)鐘為總線時(shí)鐘</p&

84、gt;<p>  MTIMMOD = 252; //設(shè)置模數(shù)</p><p>  MTIMSC = 0x60; //使能定時(shí)器中斷</p><p><b>  } </b></p><p>  void init()</p><p><b>  {</b></p>&

85、lt;p>  uchar num;</p><p><b>  E=0;</b></p><p>  write_com(0x38);</p><p>  write_com(0x0c);</p><p>  write_com(0x06);</p><p>  write_com(0x01

86、);</p><p>  for(num=0;num<16;num++)</p><p><b>  {</b></p><p>  write_date(tab[num]);</p><p>  delayms(2);</p><p><b>  }</b></

87、p><p><b>  }</b></p><p>  void write_sfm(uint add,uint date)</p><p><b>  {</b></p><p>  uint shi,ge;</p><p>  shi=date/10;</p>

88、<p>  ge=date%10;</p><p>  write_com(0x80+0x08+add);</p><p>  write_date(0x30+shi);</p><p>  write_date(0x30+ge);</p><p><b>  } </b></p><p&

89、gt;  uchar INIT_DS18B20()</p><p><b>  {</b></p><p>  uchar flg;</p><p>  PTADD=0x0f;</p><p><b>  DQ=1;</b></p><p>  for(time=0;time

90、<8;time++);</p><p><b>  DQ=0;</b></p><p>  for(time=0;time<800;time++);</p><p><b>  DQ=1;</b></p><p>  for(time=0;time<40;time++);</

91、p><p>  PTADD=0x07;</p><p><b>  flg=DQ;</b></p><p>  for(time=0;time<800;time++);</p><p>  return(flg);</p><p><b>  }</b></p>

92、<p>  uchar Readchar(void)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  uchar dat;</p><p>  for(i=0;i<8;i++)</p><p&g

93、t;<b>  {</b></p><p>  PTADD=0xff;</p><p><b>  DQ=1;</b></p><p>  asm("NOP");</p><p>  asm("NOP");</p><p>  asm(

94、"NOP");</p><p>  asm("NOP");</p><p><b>  DQ=0;</b></p><p>  asm("NOP");</p><p>  asm("NOP");</p><p>  a

95、sm("NOP");</p><p>  asm("NOP");</p><p><b>  DQ=1;</b></p><p>  for(time=0;time<8;time++);</p><p><b>  dat>>=1;</b>&

96、lt;/p><p>  PTADD=0x07;</p><p><b>  if(DQ==1)</b></p><p>  dat|=0x80;</p><p><b>  else</b></p><p>  dat|=0x00;</p><p>  f

97、or(time=0;time<32;time++);</p><p><b>  }</b></p><p>  return(dat);</p><p><b>  }</b></p><p>  void Writechar(uchar dat)</p><p>&

98、lt;b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  PTADD=0xff;</p><p><b>

99、  DQ=1;</b></p><p>  asm("NOP");</p><p>  asm("NOP");</p><p>  asm("NOP");</p><p>  asm("NOP");</p><p><b&

100、gt;  DQ=0;</b></p><p>  DQ=dat&0x01;</p><p>  for(time=0;time<40;time++);</p><p><b>  DQ=1;</b></p><p>  for(time=0;time<4;time++);</p>

101、;<p><b>  dat>>=1;</b></p><p><b>  }</b></p><p>  for(time=0;time<16;time++);</p><p><b>  }</b></p><p>  void displa

102、y_error(void)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  write_com(0x80+0x40);</p><p><b>  i=0;</b></p><p>  w

103、hile(error[i]!='\0')</p><p><b>  {</b></p><p>  write_date(error[i]);</p><p><b>  i++;</b></p><p>  delayms(40);</p><p><

104、;b>  }</b></p><p><b>  }</b></p><p>  void Readyread(void)</p><p><b>  {</b></p><p>  INIT_DS18B20();</p><p>  Writechar(0

105、xcc);</p><p>  Writechar(0x44);</p><p>  delayms(800);</p><p>  INIT_DS18B20();</p><p>  Writechar(0xcc);</p><p>  Writechar(0xbe);</p><p><

106、;b>  } </b></p><p>  void display_wendu(void)</p><p><b>  {</b></p><p>  uchar i=0;</p><p>  write_com(0x80+0x40);</p><p>  while(tabl

107、e2[i]!='\0')</p><p><b>  {</b></p><p>  write_date(table2[i]);</p><p><b>  i++;</b></p><p>  delayms(40);</p><p><b> 

108、 }</b></p><p><b>  }</b></p><p>  void display_dot(void)</p><p><b>  {</b></p><p>  write_com(0x80+0x49);</p><p>  write_date

109、('.');</p><p>  delayms(50);</p><p><b>  }</b></p><p>  void display_cent(void)</p><p><b>  {</b></p><p><b>  uchar j

110、;</b></p><p>  write_com(0x40);</p><p>  delayms(5);</p><p>  for(j=0;j<8;j++)</p><p><b>  {</b></p><p>  write_date(User[j]);</p&g

111、t;<p><b>  }</b></p><p>  write_com(0x80+0x40+11);</p><p>  delayms(5);</p><p>  write_date(0x00);</p><p><b>  }</b></p><p>

112、  void display_tempz(uint x)</p><p><b>  {</b></p><p>  uint bai,shi,ge;</p><p>  bai=x/100;</p><p>  shi=(x%100)/10;</p><p><b>  ge=x%10

113、;</b></p><p>  write_com(0x80+0x46);</p><p>  if(flag==0x01)</p><p><b>  {</b></p><p>  write_date(table1[10]);</p><p><b>  }</b

114、></p><p><b>  else</b></p><p>  write_date(table1[bai]);</p><p>  write_date(table1[shi]);</p><p>  write_date(table1[ge]);</p><p>  delaym

115、s(40);</p><p><b>  }</b></p><p>  void display_tempx(uint y)</p><p><b>  {</b></p><p>  write_com(0x80+0x40+10);</p><p>  write_dat

116、e(table1[y]);</p><p>  delayms(40);</p><p><b>  } </b></p><p>  void main(void) </p><p><b>  {</b></p><p>  uint TL,TH,TN,TD; <

117、/p><p>  PTBDD=0xff;</p><p>  PTADD=0x0f;</p><p>  MCU_INIT();</p><p>  TIMER_INI();</p><p><b>  init();</b></p><p>  delayms(5);<

118、/p><p>  if(INIT_DS18B20()==0x01)</p><p>  display_error();</p><p>  display_wendu();</p><p>  display_dot();</p><p>  display_cent(); </p><p> 

119、 EnableInterrupts; /* enable interrupts */</p><p><b>  for(;;) </b></p><p><b>  {</b></p><p><b>  flag=0;</b></p>

120、<p>  Readyread();</p><p>  TL=Readchar();</p><p>  TH=Readchar();</p><p>  if((TH&0xf8)!=0x00)</p><p><b>  {</b></p><p><b>  

121、flag=1;</b></p><p><b>  TL=~TL;</b></p><p><b>  TH=~TH;</b></p><p>  tltemp=TL+1;</p><p>  TL=tltemp;</p><p>  if(tltemp>2

122、55)</p><p><b>  TH++;</b></p><p>  TN=TH*16+TL/16;</p><p>  TD=(TL%16)*10/16;</p><p><b>  }</b></p><p>  TN=TH*16+TL/16;</p>

123、<p>  TD=(TL%16)*10/16;</p><p>  display_tempz(TN);</p><p>  display_tempx(TD);</p><p>  delayms(10);</p><p><b>  }</b></p><p><b> 

124、 }</b></p><p>  /* loop forever */</p><p>  /* please make sure that you never leave main */</p><p>  interrupt 12 void MTIM_ISR(void) </p><p><b>  {</

125、b></p><p><b>  count++;</b></p><p>  MTIMSC_TOF=0; // clear TOF </p><p>  if(count==120) </p><p><b>  {</b></p><p><b>

126、  count=0;</b></p><p><b>  miao++;</b></p><p>  if(miao==60)</p><p><b>  {</b></p><p><b>  miao=0;</b></p><p><

127、;b>  fen++;</b></p><p>  if(fen==60)</p><p><b>  {</b></p><p><b>  fen=0;</b></p><p>  xiaoshi++;</p><p>  if(xiaoshi==24)

128、</p><p>  xiaoshi=0;</p><p>  write_sfm(0,xiaoshi);</p><p><b>  }</b></p><p>  write_sfm(3,fen);</p><p><b>  }</b></p><p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論