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

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  1.引言1</b></p><p><b>  1.1緒論1</b></p><p>  1.2課程設(shè)計(jì)任務(wù)書1</p><p><b>  2.設(shè)計(jì)方案4</b></p

2、><p>  3.硬件設(shè)計(jì)方案4</p><p>  3.1最小系統(tǒng)的設(shè)計(jì)4</p><p>  3.2 LED發(fā)光報(bào)警電路6</p><p>  3.3 DS18B20的簡介及在本次設(shè)計(jì)中的應(yīng)用6</p><p>  3.3.1 DS18B20的外部結(jié)構(gòu)及管腳排列6</p><p>  

3、3.3.2 DS18B20的工作原理7</p><p>  3.3.3 DS18B20的主要特性8</p><p>  3.3.4 DS18B20的測溫流程9</p><p>  3.3.5 DS18B20與單片機(jī)的連接9</p><p>  3.4 報(bào)警溫度的設(shè)置9</p><p>  3.5 數(shù)碼管顯示

4、10</p><p>  3.5.1數(shù)碼管工作原理10</p><p>  3.5.2數(shù)碼管顯示電路12</p><p>  3.6 硬件電路總體設(shè)計(jì)12</p><p>  4.軟件設(shè)計(jì)方案13</p><p>  4.1主程序介紹13</p><p>  4.1.1主程序流程圖1

5、3</p><p>  4.1.2主流程的C語言程序14</p><p>  4.2部分子程序18</p><p>  4.2.1 DS18B20復(fù)位子程序18</p><p>  4.2.2 寫DS18B20命令子程序19</p><p>  4.2.3讀溫度子程序21</p><p&g

6、t;  4.2.4計(jì)算溫度子程序23</p><p>  4.2.5顯示掃描過程子程序24</p><p>  5.基于DS18B20的溫度采集顯示系統(tǒng)的調(diào)試26</p><p>  6.收獲和體會(huì)28</p><p><b>  7.參考文獻(xiàn)29</b></p><p><b&g

7、t;  1.引言</b></p><p><b>  1.1緒論</b></p><p>  隨著科學(xué)技術(shù)的發(fā)展,溫度的實(shí)時(shí)顯示系統(tǒng)應(yīng)用越來越廣泛,比如空調(diào)遙控器上當(dāng)前室溫的顯示,熱水器溫度的顯示等等,同時(shí)溫度的控制在各個(gè)領(lǐng)域也都有積極的意義。采用單片機(jī)對(duì)溫度進(jìn)行控制不僅具有控制方便、簡單、靈活性大等特點(diǎn),而且還可以大幅度提高被控溫度的技術(shù)指標(biāo)。</

8、p><p>  本文介紹了基于DS18B20的溫度實(shí)時(shí)采集與顯示系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。設(shè)計(jì)中選取單片機(jī)AT89C51作為系統(tǒng)控制中心,數(shù)字溫度傳感器DS18B20作為單片機(jī)外部信號(hào)源,實(shí)現(xiàn)溫度的實(shí)時(shí)采集。并且用精度較好的數(shù)碼管作為溫度的實(shí)時(shí)顯示模塊。利用單片機(jī)程序來完成對(duì)DS18B20與AT89C51的控制,最終實(shí)現(xiàn)溫度的實(shí)時(shí)采集與顯示。采用單片機(jī)對(duì)溫度進(jìn)行控制不僅具有控制方便、簡單、靈活性大等特點(diǎn),而且還可以大幅度提高

9、被控溫度的技術(shù)指標(biāo)。</p><p>  1.2課程設(shè)計(jì)任務(wù)書</p><p>  《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)任務(wù)書(二)</p><p>  題目:基于DS18B20的溫度采集顯示系統(tǒng)的設(shè)計(jì)</p><p><b>  一、課程設(shè)計(jì)任務(wù)</b></p><p>  傳統(tǒng)的溫度傳感器,如熱電偶

10、溫度傳感器,具有精度高,測量范圍大,響應(yīng)快等優(yōu)點(diǎn)。但由于其輸出的是模擬量,而現(xiàn)在的智能儀表需要使用數(shù)字量,有些時(shí)候還要將測量結(jié)果以數(shù)字量輸入計(jì)算機(jī),由于要將模擬量轉(zhuǎn)換為數(shù)字量,其實(shí)現(xiàn)環(huán)節(jié)就變得非常復(fù)雜。硬件上需要模擬開關(guān)、恒流源、D/A轉(zhuǎn)換器,放大器等,結(jié)構(gòu)龐大,安裝困難,造價(jià)昂貴。新興的IC溫度傳感器如DS18B20,由于可以直接輸出溫度轉(zhuǎn)換后的數(shù)字量,可以在保證測量精度的情況下,大大簡化系統(tǒng)軟硬件設(shè)計(jì)。這種傳感器的測溫范圍有一定限制

11、(大多在-50℃~120℃),多適用于環(huán)境溫度的測量。DS18B20可以在一根數(shù)據(jù)線上掛接多個(gè)傳感器,只需要三根線就可以實(shí)現(xiàn)遠(yuǎn)距離多點(diǎn)溫度測量。</p><p>  本課題要求設(shè)計(jì)一基于DS18B20的溫度采集顯示系統(tǒng),該系統(tǒng)要求包含溫度采集模塊、溫度顯示模塊(可用數(shù)碼管或液晶顯示)和鍵盤輸入模塊及報(bào)警模塊。所設(shè)計(jì)的系統(tǒng)可以從鍵盤輸入設(shè)定溫度值,當(dāng)所采集的溫度高于設(shè)定溫度時(shí),進(jìn)行報(bào)警,同時(shí)能實(shí)時(shí)顯示溫度值。<

12、;/p><p><b>  二、課程設(shè)計(jì)目的</b></p><p>  通過本次課程設(shè)計(jì)使學(xué)生掌握:1)單總線溫度傳感器DS18B20與單片機(jī)的接口及DS18B20的編程;2)矩陣式鍵盤的設(shè)計(jì)與編程;3)經(jīng)單片機(jī)為核心的系統(tǒng)的實(shí)際調(diào)試技巧。從而提高學(xué)生對(duì)微機(jī)實(shí)時(shí)控制系統(tǒng)的設(shè)計(jì)和調(diào)試能力。</p><p><b>  三、課程設(shè)計(jì)要求&l

13、t;/b></p><p>  1、要求可以從鍵盤上接收溫度設(shè)定值,當(dāng)所采集的溫度高于設(shè)定值時(shí),進(jìn)行報(bào)警(可以是聲音報(bào)警,也可是光報(bào)警)</p><p>  2、能實(shí)時(shí)顯示溫度值,要求保留一位小數(shù);</p><p><b>  四、課程設(shè)計(jì)內(nèi)容</b></p><p>  1、人機(jī)“界面”設(shè)計(jì);</p>

14、<p>  2、單片機(jī)端口及外設(shè)的設(shè)計(jì);</p><p>  3、硬件電路原理圖、軟件清單。</p><p>  五、課程設(shè)計(jì)報(bào)告要求</p><p>  報(bào)告中提供如下內(nèi)容:</p><p><b>  1、目錄</b></p><p><b>  2、正文</b&

15、gt;</p><p> ?。?)課程設(shè)計(jì)任務(wù)書;</p><p><b> ?。?)總體設(shè)計(jì)方案</b></p><p>  (3)針對(duì)人機(jī)對(duì)話“界面”要有操作使用說明,以便用戶能夠正確使用本產(chǎn)品;</p><p>  (4)硬件原理圖,以便廠家生成產(chǎn)(可手畫也可用protel軟件);</p><p

16、> ?。?)程序流程圖及清單(子程序不提供清單,但應(yīng)列表反映每一個(gè)子程序的名稱及其功能);</p><p> ?。?)調(diào)試、運(yùn)行及其結(jié)果;</p><p><b>  3、收獲、體會(huì)</b></p><p><b>  4、參考文獻(xiàn)</b></p><p>  六、課程設(shè)計(jì)進(jìn)度安排</p

17、><p>  七、課程設(shè)計(jì)考核辦法</p><p>  本課程設(shè)計(jì)滿分為100分,從課程設(shè)計(jì)平時(shí)表現(xiàn)、課程設(shè)計(jì)報(bào)告及課程設(shè)計(jì)答辯三個(gè)方面進(jìn)行評(píng)分,其所占比例分別為20%、40%、40%。</p><p><b>  2.設(shè)計(jì)方案</b></p><p>  本次的課題設(shè)計(jì)要求是基于DS18B20的溫度采集顯示系統(tǒng),該系統(tǒng)要求

18、包含溫度采集模塊、溫度顯示模塊和鍵盤輸入模塊及報(bào)警模塊。其中溫度采集模塊所選用的是DS18B20數(shù)字溫度傳感器進(jìn)行溫度采集,溫度顯示模塊用的四位八段共陰極數(shù)碼管進(jìn)行溫度的實(shí)時(shí)顯示,鍵盤輸入模塊采用的是按鈕進(jìn)行溫度的設(shè)置,報(bào)警模塊用的是LED燈光報(bào)警。具體方案見圖2-1。</p><p>  圖2-1 總體設(shè)計(jì)方案</p><p><b>  3.硬件設(shè)計(jì)方案</b>&

19、lt;/p><p>  3.1最小系統(tǒng)的設(shè)計(jì)</p><p>  本次設(shè)計(jì)單片機(jī)采用的是AT89C51系列的,它由一個(gè)8位中央處理器(CPU),4k 字節(jié)Flash 閃速存儲(chǔ)器,128字節(jié)內(nèi)部RAM,32 個(gè)I/O 口線,兩個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)串行I/O口及中斷系統(tǒng)等部分組成。其結(jié)構(gòu)如圖3-1所示:</p><p>  圖3-1 AT89C51

20、系列單片機(jī)引腳排列</p><p>  圖3-2 單片機(jī)最小系統(tǒng)接線圖</p><p>  圖3-2為單片機(jī)最小系統(tǒng)的接線圖,其中C1、C2均選用20PF的,晶振X1用的是11.0592MHZ的。晶振電路中外接電容C1,C2的作用是對(duì)振蕩器進(jìn)行頻率微調(diào),使振蕩信號(hào)頻率與晶振頻率一致,同時(shí)起到穩(wěn)定頻率的作用,一般選用10~30pF的瓷片電容。并且電容離晶振越近越好,晶振離單片機(jī)越近越好。晶振

21、的取值范圍一般為0~24MHz,常用的晶振頻率有6MHz、12 MHz、11.0592 MHz、24 MHz等。晶振的振蕩頻率直接影響單片機(jī)的處理速度,頻率越大處理速度越快。</p><p>  圖3-2中C3,R1及按鍵構(gòu)成了最小系統(tǒng)中的復(fù)位電路,本次設(shè)計(jì)選擇的是手動(dòng)按鈕復(fù)位,手動(dòng)按鈕復(fù)位需要人為在復(fù)位輸入端RST上加入高電平。一般采用的辦法是在RST端和正電源Vcc之間接一個(gè)按鈕。當(dāng)人為按下按鈕時(shí),則Vcc的

22、+5V電平就會(huì)直接加到RST端。由于人的動(dòng)作再快也會(huì)使按鈕保持接通達(dá)數(shù)十毫秒,所以,完全能夠滿足復(fù)位的時(shí)間要求。</p><p>  在單片機(jī)最小系統(tǒng)中還要將EA的非接高電平,如圖3-2也有體現(xiàn)出來。</p><p>  3.2 LED發(fā)光報(bào)警電路</p><p>  圖3-3 LED發(fā)光報(bào)警電路</p><p>  圖3-3為LED報(bào)警電路

23、的接法,其中一根線接單片機(jī)的8號(hào)P1.7口,另外一根接地。當(dāng)溫度超過預(yù)設(shè)溫度值時(shí)LED燈被接通發(fā)光報(bào)警。</p><p>  3.3 DS18B20的簡介及在本次設(shè)計(jì)中的應(yīng)用</p><p>  3.3.1 DS18B20的外部結(jié)構(gòu)及管腳排列</p><p>  DS18B20的管腳排列如圖3-4所示:</p><p>  DS18B20引腳

24、定義:</p><p>  (1)DQ為數(shù)字信號(hào)輸入/輸出端;</p><p>  (2)GND為電源地;</p><p>  (3)VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)</p><p>  圖3-4 DS18B20的引腳排列及封裝</p><p>  3.3.2 DS18B20的工作原理</p

25、><p>  DS18B20的讀寫時(shí)序和測溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測溫原理如圖3-5所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1

26、對(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ù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測溫度。圖中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。</p><p>  圖3-5 DS18B20測溫原理圖<

27、/p><p>  3.3.3 DS18B20的主要特性</p><p>  (1)適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電;</p><p>  (2)獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊;</p><p> ?。?)DS18B20支持多點(diǎn)

28、組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫;</p><p> ?。?)DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi);</p><p> ?。?)溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃;</p><p> ?。?)可編程的分辨率為9~12位,對(duì)應(yīng)的可分辨

29、溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測溫;</p><p>  (7)在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快;</p><p>  (8)測量結(jié)果直接輸出數(shù)字溫度信號(hào),以"一線總線"串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力;<

30、/p><p>  (9)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。</p><p>  3.3.4 DS18B20的測溫流程</p><p>  圖3-6 DS18B20的測溫流程圖</p><p>  3.3.5 DS18B20與單片機(jī)的連接</p><p>  圖3-7 DS18B20與單片機(jī)的連

31、接電路圖</p><p>  如上圖為DS18B20溫度傳感器與單片機(jī)之間的接法,其中2號(hào)接單片機(jī)的17號(hào)P3.7接口。DS18B20通過P3.7口將采集到的溫度實(shí)時(shí)送入單片機(jī)中。</p><p>  3.4 報(bào)警溫度的設(shè)置</p><p>  圖3-8 報(bào)警溫度的設(shè)置電路</p><p>  圖3-8為報(bào)警溫度的設(shè)置電路,其中K1,K2,K

32、3分別接到單片機(jī)的P2.5,P2.6,P2.7口。其中K1用于報(bào)警溫度設(shè)定開關(guān),K2用于報(bào)警溫度的設(shè)置時(shí)候的加溫度(每次加一),K3用于報(bào)警溫度的設(shè)置時(shí)的減溫度(每次減一)。實(shí)現(xiàn)了報(bào)警溫度的手動(dòng)設(shè)置。</p><p><b>  3.5 數(shù)碼管顯示</b></p><p>  3.5.1數(shù)碼管工作原理</p><p>  圖3-9 數(shù)碼管的引腳

33、排列及結(jié)構(gòu)</p><p>  圖3-9為數(shù)碼管的外形及引腳排列和兩種接法(共陰極和共陽極)的結(jié)構(gòu)圖。共陽極數(shù)碼管的8個(gè)發(fā)光二極管的陽極(二極管正端)連接在一起。通常,公共陽極接高電平(一般接電源),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為低電平時(shí),則該端所連接的字段導(dǎo)通并點(diǎn)亮。根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來

34、確定相應(yīng)的限流電阻。</p><p>  共陰極數(shù)碼管的8個(gè)發(fā)光二極管的陰極(二極管負(fù)端)連接在一起。通常,公共陰極接低電平(一般接地),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為高電平時(shí),則該端所連接的字段導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能提供額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻。</p><p>

35、  要使數(shù)碼管顯示出相應(yīng)的數(shù)字或字符,必須使段數(shù)據(jù)口輸出相應(yīng)的字形編碼。字型碼各位定義為:數(shù)據(jù)線D0與a字段對(duì)應(yīng),D1與b字段對(duì)應(yīng)……,依此類推。如使用共陽極數(shù)碼管,數(shù)據(jù)為0表示對(duì)應(yīng)字段亮,數(shù)據(jù)為1表示對(duì)應(yīng)字段暗;如使用共陰極數(shù)碼管,數(shù)據(jù)為0表示對(duì)應(yīng)字段暗,數(shù)據(jù)為1表示對(duì)應(yīng)字段亮。如要顯示“0”,共陽極數(shù)碼管的字型編碼應(yīng)為:11000000B(即C0H);共陰極數(shù)碼管的字型編碼應(yīng)為:00111111B(即3FH)。依此類推,可求得數(shù)碼管

36、字形編碼如表3-5所示。</p><p>  表3-5數(shù)碼管字符表</p><p>  顯示的具體實(shí)施是通過編程將需要顯示的字型碼存放在程序存儲(chǔ)器的固定區(qū)域中,構(gòu)成顯示字型碼表。當(dāng)要顯示某字符時(shí),通過查表指令獲取該字符所對(duì)應(yīng)的字型碼。</p><p>  3.5.2數(shù)碼管顯示電路</p><p>  圖3-10 四位八段數(shù)碼管動(dòng)態(tài)顯示電路&l

37、t;/p><p>  圖3-10為本次設(shè)計(jì)所用到的四位八段數(shù)碼管動(dòng)態(tài)顯示,其中段選接到單片機(jī)的P0口,位選接到單片機(jī)的P2口的低四位。其中P0口也接的有上拉電阻,圖中未標(biāo)示出來,會(huì)在下面的總體電路中標(biāo)示出來。采用的是動(dòng)態(tài)顯示方式。</p><p>  3.6 硬件電路總體設(shè)計(jì)</p><p>  圖3-11為本次設(shè)計(jì)的硬件總體設(shè)計(jì)圖,其中利用K1,K2,K3處進(jìn)行報(bào)警溫

38、度的設(shè)置,然后有DS18B20進(jìn)行實(shí)時(shí)溫度采集,并在數(shù)碼管上同步顯示,若采集到的溫度達(dá)到或者超過預(yù)設(shè)的報(bào)警溫度,則LED燈會(huì)發(fā)光報(bào)警,若低于該報(bào)警溫度,則不會(huì)報(bào)警。</p><p>  圖3-11 硬件電路總體設(shè)計(jì)圖</p><p><b>  4.軟件設(shè)計(jì)方案</b></p><p><b>  4.1主程序介紹</b>

39、</p><p>  4.1.1主程序流程圖</p><p>  本次設(shè)計(jì)首先對(duì)程序進(jìn)行初始化,然后打開報(bào)警溫度設(shè)定開關(guān),對(duì)報(bào)警溫度進(jìn)行設(shè)定,確認(rèn)設(shè)定值后,DS18B20溫度傳感器進(jìn)行溫度采集并送入單片機(jī)中,單片機(jī)將傳感器所檢測到的溫度同步顯示在數(shù)碼管上,并且與設(shè)置的報(bào)警溫度進(jìn)行比較,若達(dá)到或者超過報(bào)警溫度時(shí),LED燈發(fā)光報(bào)警,如果沒有達(dá)到,則繼續(xù)進(jìn)行溫度采集。</p>&l

40、t;p>  圖4-1主程序流程圖</p><p>  4.1.2主流程的C語言程序</p><p><b>  main () </b></p><p><b>  { </b></p><p><b>  ALERT=0;</b></p><p>

41、;<b>  LED=0;</b></p><p><b>  flag=0;</b></p><p>  sheding=30;</p><p>  disdata=0xff;// 初始化端口</p><p>  discan=0xff;</p><p>  for(h=0

42、;h<4;h++) //開機(jī)顯示“8888”scan();</p><p>  {display[h]=8;}</p><p>  ow_reset(); //開機(jī)先轉(zhuǎn)換一次</p><p>  write_byte(0xcc);//skip ROM </p><p>  write_byte(0x44);//發(fā)轉(zhuǎn)換命令<

43、;/p><p>  for(h=0;h<500;h++)//開機(jī)顯示“8888”兩秒 </p><p>  {scan();} </p><p>  display[0]=0;display[1]=0;display[2]=0;display[3]=0;</p><p><b>  flag2=0;</b></p

44、><p><b>  while(1) </b></p><p><b>  { </b></p><p>  if(flag==0 && flag2>1) //溫度顯示界面</p><p><b>  {</b></p><p

45、><b>  LED1=0;</b></p><p>  if(display[1]+display[2]*10>=sheding) //比較</p><p><b>  {</b></p><p>  ALERT=1;//報(bào)警</p><p><b>  }</b&

46、gt;</p><p><b>  else</b></p><p><b>  {</b></p><p><b>  ALERT=0;</b></p><p><b>  }</b></p><p><b>  }&l

47、t;/b></p><p>  if(flag==0 && flag2>1)</p><p><b>  {</b></p><p>  read_temp(); //讀出溫度數(shù)據(jù)</p><p>  work_temp(); //處理溫度數(shù)據(jù)</p><p>  

48、ge= display[3];</p><p>  shi= display[2];</p><p><b>  }</b></p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p>  flag2+

49、+; //flag2=0時(shí)為初始界面 flag2=1時(shí)為設(shè)定 </p><p>  if(flag2>1)</p><p><b>  flag2=2;</b></p><p>  if(flag==0) //flag=0 時(shí) 溫度顯示 flag=1 設(shè)定顯示</p><p><b>  fl

50、ag=1;</b></p><p>  else if(flag==1)</p><p><b>  flag=0;</b></p><p><b>  LED=~LED;</b></p><p>  key_delay(20);</p><p>  if(fla

51、g==1)</p><p><b>  {</b></p><p>  sheding=30;</p><p><b>  ge=0;</b></p><p><b>  shi=3;</b></p><p>  //display[0]= ge;

52、 // 個(gè)位設(shè)定好的溫度用于顯示</p><p>  //display[2] =shi; //十位</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(flag==1)</p><p><b>  

53、{</b></p><p><b>  LED1=1;</b></p><p>  if(K2==0) //++</p><p><b>  { </b></p><p><b>  ge++;</b></p><p><b>

54、  if(ge>9)</b></p><p><b>  {</b></p><p><b>  ge=0;</b></p><p><b>  shi++;</b></p><p><b>  if(shi>9)</b></

55、p><p><b>  shi=0;</b></p><p><b>  }</b></p><p>  sheding=ge+shi*10; </p><p>  key_delay(20);</p><p><b>  }</b></p>

56、<p>  if(K3==0) //--</p><p><b>  {</b></p><p><b>  ge--;</b></p><p><b>  if(ge<0)</b></p><p><b>  {</b></p

57、><p><b>  ge=9;</b></p><p><b>  shi--;</b></p><p><b>  if(shi<0)</b></p><p><b>  shi=9;</b></p><p><b>

58、;  }</b></p><p>  sheding=ge+shi*10; </p><p>  key_delay(20);</p><p><b>  }</b></p><p>  display[1]= ge; // 個(gè)位設(shè)定好的溫度用于顯示</p><p>  d

59、isplay[2] =shi; //十位</p><p><b>  }</b></p><p>  for(h=0;h<500;h++) //顯示溫度兩秒</p><p><b>  {</b></p><p><b>  scan();</b></p&g

60、t;<p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  4.2部分子程序</b></p><p>  4.2.1 DS18B20復(fù)位子程序</p

61、><p>  流程圖如圖4-2所示:</p><p>  圖4-2 DS18B20復(fù)位子程序</p><p>  DS18B20復(fù)位子的C語言程序如下:</p><p>  ow_reset(void) </p><p><b>  { </b></p><p>  char

62、presence=1; </p><p>  while(presence) </p><p><b>  { </b></p><p>  while(presence) </p><p><b>  { </b></p><p>  DQ=1;_nop_();_nop_(

63、); </p><p><b>  DQ=0; </b></p><p>  delay(50); //延時(shí)550毫秒</p><p><b>  DQ=1; </b></p><p>  delay(6); </p><p>  presence=DQ; </p&g

64、t;<p><b>  } </b></p><p>  delay(45); </p><p>  presence=~DQ; </p><p><b>  } </b></p><p><b>  DQ=1; </b></p><p>

65、<b>  } </b></p><p>  4.2.2 寫DS18B20命令子程序</p><p>  流程圖如圖4-3所示:</p><p>  圖4-3 寫DS18B20命令子程序</p><p>  寫DS18B20命令的C語言程序如下:</p><p>  void write_byt

66、e(uchar val) //向1-WIRE總線上寫一字節(jié)</p><p><b>  { </b></p><p><b>  uchar i;</b></p><p>  for(i=8;i>0;i--) </p><p><b>  { </b></p>

67、;<p>  DQ=1;_nop_();_nop_(); </p><p>  DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_(); </p><p>  DQ=val&0x01; //最低位移出</p><p>  delay(6); </p><p>  val=val/2;

68、//右移1位</p><p><b>  } </b></p><p><b>  DQ=1; </b></p><p>  delay(1); </p><p><b>  }</b></p><p>  4.2.3讀溫度子程序</p>

69、<p>  讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC校驗(yàn),驗(yàn)有錯(cuò)時(shí),不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖4-4所示</p><p>  DS18B20的各個(gè)命令對(duì)時(shí)序的要求特別嚴(yán)格,所以必須按照所要求的時(shí)序才能達(dá)到預(yù)期的目的,同時(shí),要注意讀進(jìn)來的是高位在后低位在前, 共有12位數(shù),小數(shù)4位,整數(shù)7位,還有一位符號(hào)位。</p><p>  圖4-4

70、讀溫度子程序</p><p>  讀溫度的C語言程序如下:</p><p>  read_temp() </p><p><b>  { </b></p><p>  ow_reset(); </p><p>  write_byte(0xcc); </p><p>  w

71、rite_byte(0xbe);</p><p>  temp_data[0]=read_byte(); </p><p>  temp_data[1]=read_byte(); </p><p>  ow_reset(); </p><p>  write_byte(0xcc); </p><p>  write_b

72、yte(0x44); </p><p><b>  }</b></p><p>  4.2.4計(jì)算溫度子程序</p><p>  流程圖如圖4-5所示:</p><p>  圖4-5 計(jì)算溫度子程序</p><p>  計(jì)算溫度的C語言程序如下:</p><p>  wor

73、k_temp() </p><p><b>  { </b></p><p>  uchar n=0; </p><p>  if(temp_data[1]>127) </p><p><b>  {</b></p><p>  temp_data[1]=(255-te

74、mp_data[1]);</p><p>  temp_data[0]=(255-temp_data[0]);</p><p><b>  n=1;</b></p><p>  } //負(fù)溫度求補(bǔ)碼</p><p>  display[4]=temp_data[0]&0x0f;display[0]=ditab[d

75、isplay[4]]; </p><p>  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ; </p><p>  display[3]=display[4]/100; </p><p>  display[1]=display[4]%100; &l

76、t;/p><p>  display[2]=display[1]/10; </p><p>  display[1]=display[1]%10; </p><p>  if(!display[3]){display[3]=0x0a; </p><p>  if(!display[2]){display[2]=0x0a;}} //最高位為0時(shí)不顯

77、示</p><p>  if(n){display[3]=0x0b;} //負(fù)溫度是最高為顯示“-”</p><p><b>  }</b></p><p>  4.2.5顯示掃描過程子程序</p><p>  流程圖如圖4-6所示:</p><p>  圖4-6 顯示掃描過程子程序<

78、;/p><p>  顯示掃描的C語言程序如下:</p><p><b>  scan() </b></p><p><b>  { </b></p><p><b>  char k; </b></p><p>  for(k=0;k<4;k++)

79、//4位LED掃描控制</p><p><b>  { </b></p><p>  disdata=dis_7[display[k]]; </p><p>  if(k==1){DIN=0;} //當(dāng)K=1時(shí),P0^7為低電平顯示小數(shù)點(diǎn)</p><p>  discan=scan_con[k]; //

80、列掃描</p><p>  delay(30);</p><p>  discan=0xFF; </p><p><b>  } </b></p><p><b>  }</b></p><p>  5.基于DS18B20的溫度采集顯示系統(tǒng)的調(diào)試</p><

81、;p>  運(yùn)行后,按下K1鍵,開始進(jìn)入報(bào)警溫度設(shè)置過程,按下K2則溫度增加一度,按下K3則溫度減少一度,剛開始調(diào)試時(shí),由于接的LED報(bào)警燈是高電平點(diǎn)亮,程序一運(yùn)行時(shí),AT89C51給各個(gè)引腳都是高電平,所以LED燈一運(yùn)行就會(huì)發(fā)光,違背了超過報(bào)警溫度才發(fā)光的要求,所以在子程序中加上了一條開始時(shí)將LED所連引腳置0的程序。之后運(yùn)行過程中又發(fā)現(xiàn)按下報(bào)警溫度的設(shè)置鍵K1,K2,K3都不是很靈敏,有時(shí)按下的時(shí)間太短甚至?xí)]有反應(yīng),經(jīng)過與小組

82、成員討論,發(fā)現(xiàn)是由于按鍵沒有進(jìn)行消抖,在顯示掃描子程序中加入了延時(shí)函數(shù)進(jìn)行按鍵的消抖,這一問題也得到了解決。</p><p>  圖5-1溫度實(shí)時(shí)顯示且未超過報(bào)警溫度25攝氏度時(shí)LED沒有發(fā)光報(bào)警</p><p>  圖5-2溫度實(shí)時(shí)顯示且超過實(shí)時(shí)報(bào)警溫度25攝氏度LED發(fā)光報(bào)警</p><p>  圖5-3 實(shí)時(shí)顯示負(fù)溫度</p><p>

83、<b>  6.收獲和體會(huì)</b></p><p>  在這一次的課程設(shè)計(jì)過程,我收獲了很多,無論是在理論知識(shí)方面,還是理論聯(lián)系實(shí)際的操作方面。因?yàn)橐呀?jīng)一個(gè)學(xué)期沒有學(xué)習(xí)單片機(jī)這門課程,很多知識(shí)不太清楚,加上以前的基礎(chǔ)知識(shí)也不是很牢固,對(duì)于Proteus和Keil軟件的使用也生疏了,所以剛開始拿到課題時(shí)感到很有難度,不禁對(duì)此次的課程設(shè)計(jì)感到非常緊張。剛開始做這一課題的時(shí)候感到難度很大,許多知識(shí)

84、都要重新學(xué)習(xí),包括課本上的理論知識(shí),以及編程和仿真軟件的使用都要多加練習(xí)才能掌握。在這一過程中,我不斷的上網(wǎng)查找相關(guān)資料,翻閱相關(guān)書籍,也一步步了解了設(shè)計(jì)中各個(gè)模塊所要實(shí)現(xiàn)的功能,對(duì)這次的設(shè)計(jì)方案有了具象的認(rèn)識(shí)。</p><p>  通過此次課程設(shè)計(jì),我對(duì)C語言和單片機(jī)有了新的認(rèn)識(shí)和理解,并且溫習(xí)了Proteus和Keil軟件的使用,也了解了它的許多以前不知道的功能。掌握了從設(shè)計(jì)方案的要求來進(jìn)行主程序流程圖的設(shè)計(jì)

85、,然后落實(shí)到每一個(gè)子程序,依次實(shí)現(xiàn)每一個(gè)功能要求。然后用仿真軟件進(jìn)行仿真調(diào)試,一步步的找出哪里的設(shè)計(jì)不符合要求并進(jìn)行改正,幾乎沒有一次就能調(diào)試通過的程序,所以說程序不是寫出來的,而是不斷的調(diào)試出來的。這這個(gè)過程中也積累了硬件設(shè)計(jì)的經(jīng)驗(yàn)。同時(shí)也加深了我對(duì)電路原理、器件資料、電路板設(shè)計(jì)和電路的硬件調(diào)試認(rèn)識(shí)和理解。</p><p>  此次課程設(shè)計(jì)用到了DS18B20這一數(shù)字溫度傳感器,這是我們之前沒有遇到過的一種新型

86、的器件,所以通過上網(wǎng)和查閱相關(guān)書籍來查找這一器件的資料,從它的基本結(jié)構(gòu),到元件特性及工作原理之類的等等。在這個(gè)過程中我發(fā)現(xiàn)即使是一個(gè)小小的元件,也有很復(fù)雜的構(gòu)成及多種特性,而且實(shí)際到許多方面。在學(xué)習(xí)的過程中我也多DS18B20有了一個(gè)系統(tǒng)的了解。我也認(rèn)識(shí)到想要真正的全面了解一個(gè)元件,一定要花一定的時(shí)間和精力。</p><p>  這次的課程設(shè)計(jì)讓我學(xué)到了許多書本上沒有的知識(shí),學(xué)會(huì)了更加全面的思考問題,而不是片面的

87、只看眼前,同時(shí)也學(xué)到了自我學(xué)習(xí)的方法,在查找資料自我分析及跟同學(xué)的討論,與老師的指導(dǎo)這些過程都讓我受益匪淺。同時(shí)我也認(rèn)識(shí)到了自身存在的很多不足之處,理論知識(shí)不夠扎實(shí),操作能力也欠缺, 我會(huì)在以后的學(xué)習(xí)中更加努力以提高自身的能力。</p><p><b>  7.參考文獻(xiàn)</b></p><p>  [1].陳躍東.DS18B20集成溫度傳感器原理與應(yīng)用[J].安徽機(jī)電

溫馨提示

  • 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)論