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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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è)計任務(wù)書1</p><p><b>  2.設(shè)計方案4</b></p

2、><p>  3.硬件設(shè)計方案4</p><p>  3.1最小系統(tǒng)的設(shè)計4</p><p>  3.2 LED發(fā)光報警電路6</p><p>  3.3 DS18B20的簡介及在本次設(shè)計中的應(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與單片機的連接9</p><p>  3.4 報警溫度的設(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è)計12</p><p>  4.軟件設(shè)計方案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計算溫度子程序23</p><p>  4.2.5顯示掃描過程子程序24</p><p>  5.基于DS18B20的溫度采集顯示系統(tǒng)的調(diào)試26</p><p>  6.收獲和體會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ā)展,溫度的實時顯示系統(tǒng)應(yīng)用越來越廣泛,比如空調(diào)遙控器上當(dāng)前室溫的顯示,熱水器溫度的顯示等等,同時溫度的控制在各個領(lǐng)域也都有積極的意義。采用單片機對溫度進(jìn)行控制不僅具有控制方便、簡單、靈活性大等特點,而且還可以大幅度提高被控溫度的技術(shù)指標(biāo)。</

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23、的接法,其中一根線接單片機的8號P1.7口,另外一根接地。當(dāng)溫度超過預(yù)設(shè)溫度值時LED燈被接通發(fā)光報警。</p><p>  3.3 DS18B20的簡介及在本次設(shè)計中的應(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ù)字信號輸入/輸出端;</p><p>  (2)GND為電源地;</p><p>  (3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)</p><p>  圖3-4 DS18B20的引腳排列及封裝</p><p>  3.3.2 DS18B20的工作原理</p

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

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

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

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

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

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

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

32、3分別接到單片機的P2.5,P2.6,P2.7口。其中K1用于報警溫度設(shè)定開關(guān),K2用于報警溫度的設(shè)置時候的加溫度(每次加一),K3用于報警溫度的設(shè)置時的減溫度(每次減一)。實現(xiàn)了報警溫度的手動設(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個發(fā)光二極管的陽極(二極管正端)連接在一起。通常,公共陽極接高電平(一般接電源),其它管腳接段驅(qū)動電路輸出端。當(dāng)某段驅(qū)動電路的輸出端為低電平時,則該端所連接的字段導(dǎo)通并點亮。根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時,要求段驅(qū)動電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來

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

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

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

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

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

39、</p><p>  4.1.1主程序流程圖</p><p>  本次設(shè)計首先對程序進(jìn)行初始化,然后打開報警溫度設(shè)定開關(guān),對報警溫度進(jìn)行設(shè)定,確認(rèn)設(shè)定值后,DS18B20溫度傳感器進(jìn)行溫度采集并送入單片機中,單片機將傳感器所檢測到的溫度同步顯示在數(shù)碼管上,并且與設(shè)置的報警溫度進(jìn)行比較,若達(dá)到或者超過報警溫度時,LED燈發(fā)光報警,如果沒有達(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++) //開機顯示“8888”scan();</p><p>  {display[h]=8;}</p><p>  ow_reset(); //開機先轉(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++)//開機顯示“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;//報警</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時為初始界面 flag2=1時為設(shè)定 </p><p>  if(flag2>1)</p><p><b>  flag2=2;</b></p><p>  if(flag==0) //flag=0 時 溫度顯示 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、 // 個位設(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; // 個位設(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); //延時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é),在讀出時需進(jìn)行CRC校驗,驗有錯時,不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖4-4所示</p><p>  DS18B20的各個命令對時序的要求特別嚴(yán)格,所以必須按照所要求的時序才能達(dá)到預(yù)期的目的,同時,要注意讀進(jìn)來的是高位在后低位在前, 共有12位數(shù),小數(shù)4位,整數(shù)7位,還有一位符號位。</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計算溫度子程序</p><p>  流程圖如圖4-5所示:</p><p>  圖4-5 計算溫度子程序</p><p>  計算溫度的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ù)溫度求補碼</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時不顯

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

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

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

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

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

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

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

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論