基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)</p><p>  姓 名:XXX</p><p>  學(xué) 號(hào):XXX</p><p>  專 業(yè):電器自動(dòng)化</p><p><b>  指導(dǎo)教師:XXX</b></p><p>  完成時(shí)間:2013.XX.XX<

2、/p><p><b>  摘要</b></p><p>  本文提出了基于MCS-51系列單片機(jī)的數(shù)字溫度計(jì)的制作電路和編程思想。該數(shù)字溫度計(jì)以ATMEL公司的AT89S52 單片機(jī)為主控,配以達(dá)拉斯公司的DS18B20數(shù)字溫度傳感器,采用1602雙行英文字符液晶作顯示。實(shí)現(xiàn)了對(duì)溫度的測(cè)量,顯示,和報(bào)警等功能。</p><p>  關(guān)鍵詞: AT

3、89S52單片機(jī);數(shù)字傳感器DS18B20;顯示器1602LCD;</p><p><b>  目 錄</b></p><p><b>  摘要I</b></p><p>  ABSTRACT錯(cuò)誤!未定義書(shū)簽。</p><p><b>  1 緒論3</b></p

4、><p>  1.1 選題的背景3</p><p>  1.2 數(shù)字溫度計(jì)簡(jiǎn)介3</p><p>  1.2.1 數(shù)字溫度計(jì)的特征3</p><p>  1.2.2 設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)4</p><p>  2 數(shù)字溫度計(jì)的方案設(shè)計(jì)5</p><p>  2.1 設(shè)計(jì)方案論證與比較5<

5、/p><p>  2.1.1 顯示電路方案5</p><p>  2.1.2 測(cè)溫電路方案5</p><p>  2.2 系統(tǒng)總體方案5</p><p>  3 數(shù)字溫度計(jì)的硬件電路設(shè)計(jì)6</p><p>  3.1 控制電路6</p><p>  3.1.1 MCU簡(jiǎn)介6</p&

6、gt;<p>  3.2.2 最小系統(tǒng)模塊12</p><p>  3.3 溫度傳感器設(shè)計(jì)13</p><p>  3.3.1 DS18B20簡(jiǎn)介13</p><p>  3.3.2 溫度傳感器與單片機(jī)的連接15</p><p>  3.3.3 復(fù)位信號(hào)及外部復(fù)位電路16</p><p>  3

7、.4 單片機(jī)與報(bào)警電路17</p><p>  3.5 顯示電路17</p><p><b>  4 軟件設(shè)計(jì)19</b></p><p>  4.1 DS18b20的讀操作19</p><p>  4.2 DS18b20的溫度數(shù)據(jù)處理20</p><p>  4.3 1602顯示部分

8、21</p><p><b>  5 運(yùn)行測(cè)試23</b></p><p>  5.1溫度測(cè)試 27</p><p>  5.2報(bào)警設(shè)置

9、 27</p><p>  5.3 報(bào)警測(cè)試 27</p><p><b>  參考文獻(xiàn)30</b></p><p>  附錄1 程序源代碼錯(cuò)誤!未定義書(shū)簽。</p><p><b> 

10、 1 緒論</b></p><p><b>  1.1 選題的背景</b></p><p>  隨著現(xiàn)代信息技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實(shí)現(xiàn).能夠獨(dú)立工作的溫度檢測(cè)和顯示系統(tǒng)應(yīng)用于諸多領(lǐng)域。傳統(tǒng)的溫度檢測(cè)以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續(xù)信號(hào)處理電路,而且可靠性相對(duì)較差,測(cè)溫準(zhǔn)確度低,檢測(cè)系統(tǒng)也有一定的誤差。與傳統(tǒng)的溫度計(jì)相比,這里

11、設(shè)計(jì)的數(shù)字溫度計(jì)具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫精確,數(shù)字顯示,適用范圍寬等特點(diǎn)。選用AT89S52單片機(jī)作為主控制器件,DSl8B20作為測(cè)溫傳感器通過(guò)LCD1602并行傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示。通過(guò)DSl8B20直接讀取被測(cè)溫度值,進(jìn)行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學(xué)性能穩(wěn)定,線性度較好,在-55℃~125℃最大線性偏差小于0.1℃。該器件可直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。另外,該溫度計(jì)還能直接采用測(cè)溫器件測(cè)量溫度,從而簡(jiǎn)化數(shù)

12、據(jù)傳輸與處理過(guò)程。</p><p>  1.2 數(shù)字溫度計(jì)簡(jiǎn)介</p><p>  1.2.1 數(shù)字溫度計(jì)的特征</p><p>  溫度是我們?nèi)粘Ia(chǎn)和生活中實(shí)時(shí)在接觸到的物理量,但是它是看不到的,僅憑感覺(jué)只能感覺(jué)到大概的溫度值,傳統(tǒng)的指針式的溫度計(jì)雖然能指示溫度,但是精度低,使用不夠方便,顯示不夠直觀,數(shù)字溫度計(jì)的出現(xiàn)可以讓人們直觀的了解自己想知道的溫度到底是多

13、少度。</p><p>  數(shù)字溫度計(jì)采用進(jìn)口芯片組裝精度高、高穩(wěn)定性,誤差≤0.5%, 內(nèi)電源、微功耗、不銹鋼外殼,防護(hù)堅(jiān)固,美觀精致。數(shù)字溫度計(jì)采用進(jìn)口高精度、低溫漂、超低功耗集成電路和寬溫型液晶顯示器,內(nèi)置高能量電池連續(xù)工作≥5年無(wú)需敷設(shè)供電電纜,是一種精度高、穩(wěn)定性好、適用性極強(qiáng)的新型現(xiàn)場(chǎng)溫度顯示儀。是傳統(tǒng)現(xiàn)場(chǎng)指針雙金屬溫度計(jì)的理想替代產(chǎn)品,廣泛應(yīng)用于各類工礦企業(yè),大專院校,科研院所。</p>

14、<p>  數(shù)字溫度計(jì)采用溫度敏感元件也就是溫度傳感器(如鉑電阻,熱電偶,半導(dǎo)體,熱敏電阻等),將溫度的變化轉(zhuǎn)換成電信號(hào)的變化,如電壓和電流的變化,溫度變化和電信號(hào)的變化有一定的關(guān)系,如線性關(guān)系,一定的曲線關(guān)系等,這個(gè)電信號(hào)可以使用模數(shù)轉(zhuǎn)換的電路即AD轉(zhuǎn)換電路將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),數(shù)字信號(hào)再送給處理單元,如單片機(jī)或者PC機(jī)等,處理單元經(jīng)過(guò)內(nèi)部的軟件計(jì)算將這個(gè)數(shù)字信號(hào)和溫度聯(lián)系起來(lái),成為可以顯示出來(lái)的溫度數(shù)值,如25.0

15、攝氏度,然后通過(guò)顯示單元,如LED,LCD或者電腦屏幕等顯示出來(lái)給人觀察。這樣就完成了數(shù)字溫度計(jì)的基本測(cè)溫功能。數(shù)字溫度計(jì)根據(jù)使用的傳感器的不同,AD轉(zhuǎn)換電路,及處理單元的不同,它的精度,穩(wěn)定性,測(cè)溫范圍等都有區(qū)別,這就要根據(jù)實(shí)際情況選擇符合規(guī)格的數(shù)字溫度計(jì)。</p><p>  1.2.2 設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)</p><p>  采集測(cè)溫范圍為-55~+120 ℃.</p>&

16、lt;p>  溫度精度在0.1 ℃;誤差±0.2℃以內(nèi).</p><p>  顯示模塊,采用1602液晶顯示.</p><p>  按鍵3個(gè),設(shè)置、加、減.</p><p>  報(bào)警設(shè)置10-90度.低于下限報(bào)警,高于上限報(bào)警。</p><p>  2 數(shù)字溫度計(jì)的方案設(shè)計(jì)</p><p>  2.1

17、設(shè)計(jì)方案論證與比較</p><p>  2.1.1 顯示電路方案</p><p>  方案一:采用數(shù)碼管動(dòng)態(tài)顯示</p><p>  使用七段LED數(shù)碼管,采用動(dòng)態(tài)顯示的方法來(lái)顯示各項(xiàng)指標(biāo),此方法雖然價(jià)格成本低,但是顯示單一,且功耗較大。</p><p>  方案二:采用LCD液晶顯示</p><p>  采用1602

18、 LCD液晶顯示,此方案顯示內(nèi)容相對(duì)豐富,且價(jià)格不高。</p><p>  綜合上述原因,采用方案二,使用LCD液晶作顯示電路。</p><p>  2.1.2 測(cè)溫電路方案</p><p>  方案一:采用模擬溫度傳感器測(cè)溫</p><p>  由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采

19、集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p>  方案二:采用數(shù)字溫度傳感器</p><p>  進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)

20、換,就可以滿足設(shè)計(jì)要求。</p><p>  綜合考慮,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。</p><p>  2.2 系統(tǒng)總體方案</p><p>  根據(jù)上述方案比較,結(jié)合題目要可以將系統(tǒng)分為主控模塊,顯示模塊,溫度采集模塊和報(bào)警模塊,其框圖如下:</p><p>  圖2-1 系統(tǒng)總體設(shè)計(jì)框圖&

21、lt;/p><p>  3 數(shù)字溫度計(jì)的硬件電路設(shè)計(jì)</p><p><b>  3.1 控制電路</b></p><p>  3.1.1 MCU簡(jiǎn)介</p><p>  CPU是整個(gè)控制部分的核心。在考慮經(jīng)濟(jì)性和滿足需求的前提下,本系統(tǒng)選用ATMEL公司生產(chǎn)的8位AT89S52單片機(jī)作為整個(gè)系統(tǒng)的控制中心。</p&g

22、t;<p>  AT89S52是ATMEL公司生產(chǎn)的低功耗,高性能CMOS8位單片機(jī),片內(nèi)含4k bytes的可系統(tǒng)編程的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳,它集Flash存儲(chǔ)器既可在線編輯(ISP)也可用傳統(tǒng)方法進(jìn)行編輯及通用8位微處理器于單片芯片中,功能強(qiáng)大AT89S52單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合。器管腳圖如圖3-2:</p&

23、gt;<p>  圖3-1 AT89S52管腳圖</p><p>  在本系統(tǒng)中,AT89S52單片機(jī)內(nèi)部的功能單元已經(jīng)能夠滿足系統(tǒng)設(shè)計(jì)需要,不需要系統(tǒng)擴(kuò)展。</p><p>  AT89S52具有以下的特點(diǎn):</p><p>  ● 8031 CPU與MCS-51 兼容</p><p>  ● 壽命:1000寫(xiě)/擦循環(huán)<

24、;/p><p>  ● 4K字節(jié)可編程FLASH存儲(chǔ)器</p><p>  ● 全靜態(tài)工作:0--24MHz</p><p>  ● 三級(jí)程序存儲(chǔ)器保密鎖定</p><p>  ● 128*8位內(nèi)部RAM</p><p>  ● 32條可編程I/O線</p><p>  ● 兩個(gè)16位定時(shí)器/計(jì)數(shù)器

25、</p><p><b>  ● 6個(gè)中斷源</b></p><p><b>  ● 可編程串行通道</b></p><p>  ● 低功耗的閑置和掉電模式</p><p>  ● 片內(nèi)振蕩器和時(shí)鐘</p><p>  AT89S52 是一種低功耗、高性能CMOS8位微控制器

26、,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非 易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng) 可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。</p><p>  AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash

27、,256字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路。</p><p>  此外, AT89S52 可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止

28、,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p>  3、AT89S52引腳功能</p><p>  AT89S52 單片機(jī)為40 引腳芯片見(jiàn)圖3.2.1-2。</p><p>  圖3.2.1-2 AT89S52引腳圖</p

29、><p> ?。?)口線:P0、P1、P2、P3 共四個(gè)八位口。</p><p>  P0 口:P0口是一個(gè)8位漏極開(kāi)路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。 </p><p>  對(duì)P0端口寫(xiě)“1”時(shí),引腳用作高阻抗輸入。 </p><p>  當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,

30、P0不具有內(nèi)部上拉電阻。 </p><p>  在flash編程時(shí),P0口也用來(lái)接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。 </p><p>  P1口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P1 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于

31、內(nèi)部電阻的原因,將輸出電流(IIL)。 </p><p>  此外,P1.0和P1.1分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和定時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。 </p><p>  在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。 </p><p><b>  引腳號(hào)第二功能: </b>&l

32、t;/p><p>  P1.0 T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出 </p><p>  P1.1 T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制) </p><p>  P1.5 MOSI(在系統(tǒng)編程用) </p><p>  P1.6 MISO(在系統(tǒng)編程用) </p><p>  P1.7

33、 SCK(在系統(tǒng)編程用)</p><p>  P2口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P2 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 </p><p>  在訪問(wèn)外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOV

34、X @DPTR) 時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。</p><p>  在使用8位地址(如MOVX @RI)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。 </p><p>  在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。 </p><p>  P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙

35、向I/O 口,p3 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P3 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 </p><p>  P3口亦作為AT89S52特殊功能(第二功能)使用。   </p><p>  在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。 </p>&l

36、t;p>  此外,P3口還接收一些用于FLASH閃存編程和程序校驗(yàn)的控制信號(hào)。 </p><p> ?。?)其他引腳說(shuō)明:</p><p>  RST:復(fù)位輸入。晶振工作時(shí),RST腳持續(xù)2 個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位??撮T狗計(jì)時(shí)完成后,RST 腳輸出96 個(gè)晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無(wú)效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效

37、。 </p><p>  ALE/PROG——當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。 </p><p>  對(duì)FLASH存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。 <

38、;/p><p>  如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無(wú)效。 </p><p>  PSEN——程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89S52由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器

39、周期兩次PSEN有效,即輸出兩個(gè)脈沖,在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次PSEN信號(hào)。 </p><p>  EA/VPP——外部訪問(wèn)允許,欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。 </p><p>  如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器的指

40、令。 </p><p>  FLASH存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 </p><p>  XTAL2:來(lái)自反向振蕩器的輸出。 </p><p>  XTAL1,XTAL2接石英晶體振蕩器。如圖

41、3.2.1-3所示外接晶體引腳圖。</p><p>  C2 XTAL2</p><p>  懸空 XTAL2</p><p>  C1 XTAL1 外部振蕩信號(hào) XTAL1</p><p>  GND

42、 GND</p><p>  接地 接地</p><p>  a.內(nèi)部方式 b.外部方式</p><p>  圖3.2.1-3晶振外接結(jié)構(gòu)引腳圖</p&

43、gt;<p>  XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時(shí),外部振蕩信號(hào)應(yīng)直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇,在本設(shè)計(jì)電路中選用了12MHz。電容取20PF左右。機(jī)器周期=12×時(shí)間周期,如12MHz的機(jī)器周期為1微秒。</p>&l

44、t;p> ?。?)控制或復(fù)位引腳</p><p>  RESET 此腳為高電平時(shí)(約2個(gè)機(jī)器周期)可將單片機(jī)復(fù)位。</p><p>  RST/VPD——當(dāng)出現(xiàn)兩個(gè)機(jī)器周期高電平時(shí),單片機(jī)復(fù)位。復(fù)位后,P0~P3輸出高電平;SP寄存器為07H;其它寄存器全部清0;不影響RAM狀態(tài)。如圖3.2.1-4所示。 </p><p>  圖3.2.1-4 按鍵電平復(fù)位&

45、lt;/p><p>  AT89SXX系列單片機(jī)實(shí)現(xiàn)了ISP下載功能,故而取代了89CXX系列的下載方式,也是因?yàn)檫@樣,ATMEL公司已經(jīng)停止生產(chǎn)89CXX系列的單片機(jī),現(xiàn)在市面上的AT89CXX多是停產(chǎn)前的庫(kù)存產(chǎn)品。 </p><p>  4、AT89S52的編程方法 </p><p>  編程前,須按編程模式表設(shè)置好地

46、址、數(shù)據(jù)及控制信號(hào);順序如下:</p><p>  ① 在地址線上加上要編程單元的地址信號(hào)。</p><p> ?、?在數(shù)據(jù)線上加上要寫(xiě)入的數(shù)據(jù)字節(jié)。</p><p>  ③ 激活相應(yīng)的控制信號(hào)。</p><p> ?、?將EA/Vpp端加上+12V編程電壓。</p><p> ?、?每對(duì)Flash存儲(chǔ)陣列寫(xiě)入一個(gè)字節(jié)

47、或每寫(xiě)入一個(gè)程序機(jī)密位,加上一個(gè)ALE/PROG編程脈沖。每個(gè)字節(jié)寫(xiě)入周期是自身定時(shí)的,大多數(shù)約為50us。改變編程單元的地址和寫(xiě)入的數(shù)據(jù),重復(fù)①—⑤步驟,直到全部文件編程結(jié)束。</p><p>  單片機(jī)的現(xiàn)狀及發(fā)展方向:</p><p>  單片機(jī)是為了工業(yè)控制需要滿足而誕生的,是自動(dòng)控制系統(tǒng)的核心部件,因而也主要用于工業(yè)控制、智能化儀器儀表、家用電器中。它具有體積小,功能多、價(jià)格低、

48、使用方便、系統(tǒng)設(shè)計(jì)靈活等優(yōu)點(diǎn),應(yīng)用領(lǐng)域不斷擴(kuò)大,除了工業(yè)控制,智能化儀表,通訊,家用電器外,在智能化高檔電子玩具產(chǎn)品中也大量采用單片機(jī)芯片作為核心控制部件。</p><p>  由于單片機(jī)主要面向工業(yè)控制,工作環(huán)境比較惡劣,入高溫,強(qiáng)電磁干擾,甚至含有腐蝕性氣體,在太空中工作的單片機(jī)控制系統(tǒng),還必須具有抗輻射能力,這決定了單片機(jī)CPU于通用微機(jī)CPU具有不同的技術(shù)特征和發(fā)展方向:</p><p

49、><b>  (1) 可靠性高;</b></p><p>  (2) 控制功能往往很強(qiáng),數(shù)值計(jì)算交叉;</p><p>  (3) 指令系統(tǒng)比通用微處理器慢的多;</p><p>  (4) X系列芯片取代;</p><p>  (5) 抗干擾性強(qiáng),工作溫度范圍寬。</p><p>  3.

50、2.2 最小系統(tǒng)模塊</p><p>  本次設(shè)計(jì)中,選用ATMEL公司的51系列單片機(jī)AT89S52芯片作為電子密碼電源開(kāi)關(guān)的數(shù)據(jù)處理及操作控制芯片。只有單片機(jī)芯片無(wú)法完成數(shù)據(jù)處理及控制功能,必須有附加的電路,使單片機(jī)芯片組成一個(gè)可運(yùn)行的系統(tǒng)才能實(shí)現(xiàn)其功能。本次設(shè)計(jì)中,由AT89S52芯片連同附加電路構(gòu)成的單片機(jī)最小系統(tǒng)作為數(shù)據(jù)處理及控制模塊,其中,使用P1口作為1602液晶的數(shù)據(jù)傳輸口,P3口作1602的命令

51、數(shù)據(jù)控制、時(shí)鐘、讀寫(xiě)控制、和使能控制接口,P2口作按鍵掃描接口,P2.3作DS18B20的總線接口。P2.5,P2.7作報(bào)警控制接口。其電路連接圖3-3如下:</p><p>  圖3-2 數(shù)據(jù)處理及控制模塊</p><p>  3.3 溫度傳感器設(shè)計(jì)</p><p>  3.3.1 DS18B20簡(jiǎn)介</p><p>  DS18B20可以

52、程序設(shè)定9~12位的分辨率,精度為±0.5°C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EPROM中,掉電后依然保存。</p><p>  溫度傳感器DS18B20引腳如圖3-4所示。</p><p>  圖3-3 DS18B20TO-92封裝溫度傳感器</p><p><b>  引腳功能說(shuō)明:

53、</b></p><p>  VDD :可選電源腳,電源電壓范圍3~5.5V。當(dāng)工作于寄生電源時(shí),此引腳必須接地。</p><p>  DQ :數(shù)據(jù)輸入/輸出腳。漏極開(kāi)路,常態(tài)下高電平。</p><p><b>  GND :為電源地</b></p><p>  圖3-4 DS18B20內(nèi)部結(jié)構(gòu)圖</

54、p><p>  DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。</p><p>  光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開(kāi)始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8

55、+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。 </p><p>  DS18B20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。 </p><p>  這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比

56、特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。 </p><p>  DS18B20溫度傳感器

57、的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。 </p><p>  暫存存儲(chǔ)器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測(cè)得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是TH、TL的易失性拷貝,第五個(gè)字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個(gè)字節(jié)的內(nèi)容在每一次上電復(fù)位時(shí)被刷新。第六、七、八個(gè)字節(jié)用于內(nèi)部計(jì)算

58、。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。 </p><p>  該字節(jié)各位的意義如下:</p><p>  TM R1 R0 1 1 1 1 1</p><p>  低五位一直都是1 ,TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來(lái)設(shè)置分辨率,如表1所示:(DS18B20出廠時(shí)被設(shè)置為12位

59、)</p><p>  表3-3 DS18B20溫度轉(zhuǎn)換時(shí)間表</p><p>  根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫(xiě)之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待16~60微

60、秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。</p><p>  3.3.2 溫度傳感器與單片機(jī)的連接</p><p>  溫度傳感器的單總線(1-Wire)與單片機(jī)的P2.0連接,P2.0是單片機(jī)的高位地址線A8。P2端口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,其輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)該端口寫(xiě)“1”,可通過(guò)內(nèi)部上拉電阻將其

61、端口拉至高電平,此時(shí)可作為輸入口使用,這是因?yàn)閮?nèi)部存在上拉電阻,某一引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。在訪問(wèn)外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí)。如執(zhí)行MOVX DPTR指令,則表示P2端口送出高8位的地址數(shù)據(jù)。在訪問(wèn)8位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),可執(zhí)行MOVX RI指令,P2端口內(nèi)容即為特殊功能寄存器(SFR)區(qū)中R2寄存器內(nèi)容,整個(gè)訪問(wèn)期間不改變。在Flash編程和程序校驗(yàn)時(shí),P2端口也接收高位地址和其他控制信號(hào)。圖3-5為

62、DSl8820內(nèi)部結(jié)構(gòu)。圖3-6為DSl8820與單片機(jī)的接口電路。</p><p>  圖3-5 DS18B20和單片機(jī)的接口連接</p><p>  3.3.3 復(fù)位信號(hào)及外部復(fù)位電路</p><p>  該復(fù)位信號(hào)高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩脈沖周期即兩個(gè)機(jī)器周期以上。若使用頻率為12 MHz的晶體振蕩器,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過(guò)2μs才完成復(fù)位操

63、作。</p><p>  圖3-6 復(fù)位電路</p><p>  3.4 單片機(jī)與報(bào)警電路</p><p>  系統(tǒng)中的報(bào)警電路是由發(fā)光二極管和限流電阻組成,并與單片機(jī)的P2.6端口連接。</p><p><b>  3.5 顯示電路</b></p><p><b>  1、應(yīng)用簡(jiǎn)介&

64、lt;/b></p><p>  模塊內(nèi)部自帶字符發(fā)生存儲(chǔ)器(CGROM),字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是(41H),顯示時(shí)模塊把代碼41H發(fā)給液晶模塊,我們就能在液晶上看到字母“A”。</p><p>  1602液晶模塊內(nèi)部的控制器共有11條控制指令,豐富的指令可以完成液晶的時(shí)序控制、

65、工作方式式設(shè)置和數(shù)據(jù)顯示等。</p><p>  采用的LCD1602液晶模塊是標(biāo)準(zhǔn)16針插座,接口電路如圖3.2.3所示:關(guān)于LCD1602的詳細(xì)資料見(jiàn)表3.2.3-1和表3.2.3-2。</p><p>  圖3.2.3 顯示電路的連接圖</p><p><b>  4 軟件設(shè)計(jì)</b></p><p>  4.1

66、 DS18b20的讀操作</p><p>  DSl8B20的主要數(shù)據(jù)元件有:64位激光Lasered ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSl8B20可以從單總線獲取電源,當(dāng)信號(hào)線為高電平時(shí),將能量貯存在內(nèi)部電容器中;當(dāng)單信號(hào)線為低電平時(shí),將該電源斷開(kāi),直到信號(hào)線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。此外,還可外接5 V電源,給DSl8B20供電。DSl8B20的供電方式靈活,利用外接電

67、源還可增加系統(tǒng)的穩(wěn)定性和可靠性。DS18B20讀寫(xiě)時(shí)序如圖4-1~4-3:</p><p>  圖4-1 DS18B20的復(fù)位時(shí)序圖</p><p>  圖4-2 DS18B20的寫(xiě)數(shù)據(jù)時(shí)序圖</p><p>  圖4-3 DS18B20的讀數(shù)據(jù)時(shí)序圖</p><p>  由時(shí)序圖可知,DS18B20在復(fù)位時(shí)需要480us的低電平,等待

68、15us后MCU將總線拉高,等待DS18B20的響應(yīng)信號(hào);DS18B20在寫(xiě)數(shù)據(jù)時(shí)分為寫(xiě)“0”和寫(xiě)“1”操作,寫(xiě)“0”操作時(shí),DS18B20需要至少60us的總線被拉低,然后在60us內(nèi)將“0”寫(xiě)入DS18B20中,持續(xù)時(shí)間至少1us,寫(xiě)“1”操作是只需將寫(xiě)入的“0”改為“1”即可;DS18B20讀操作也分為讀“0”和讀“1”操作,讀“0”操作時(shí),總線需要15us被拉低,再拉高45us,然后再15us內(nèi)將數(shù)據(jù)讀走,讀“1”操作同讀“0”

69、操作。程序流程圖如圖4-4:</p><p>  圖4-4 DS18B20讀取溫度的流程圖</p><p>  4.2 DS18b20的溫度數(shù)據(jù)處理</p><p>  讀出溫度數(shù)據(jù)后,LOW的低四位為溫度的小數(shù)部分,可以精確到0.0625℃,LOW的高四位和HIGH的低四位為溫度的整數(shù)部分,HIGH的高四位全部為1表示負(fù)數(shù),全為0表示正數(shù)。所以先將數(shù)據(jù)提取出來(lái),

70、分為三個(gè)部分:小數(shù)部分、整數(shù)部分和符號(hào)部分。小數(shù)部分進(jìn)行四舍五入處理:大于0.5℃的話,向個(gè)位進(jìn)1;小于0.5℃的時(shí)候,舍去不要。當(dāng)數(shù)據(jù)是個(gè)負(fù)數(shù)的時(shí)候,顯示之前要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將其整數(shù)部分取反加一。還因?yàn)镈S18B20最低溫度只能為-55℃,所以可以將整數(shù)部分的最高位換成一個(gè)“-”,表示為負(fù)數(shù)。圖4-2為溫度數(shù)據(jù)處理程序的流程圖。</p><p>  圖4-5 溫度數(shù)據(jù)處理流程圖</p><

71、p>  4.3 1602顯示部分</p><p>  1602的讀寫(xiě)時(shí)序圖如下:</p><p>  圖4-6 1602液晶的讀時(shí)序圖</p><p>  圖4-7 1602的寫(xiě)時(shí)序圖</p><p>  根據(jù)以上時(shí)序圖可以得出讀寫(xiě)程序流程圖如下:</p><p><b>  5 運(yùn)行測(cè)試</

72、b></p><p>  5.1.開(kāi)機(jī)溫度測(cè)試</p><p>  5.2.設(shè)置溫度測(cè)試</p><p><b>  5.3報(bào)警測(cè)試</b></p><p><b>  6 結(jié)語(yǔ)</b></p><p>  本文重點(diǎn)介紹了單片機(jī)和數(shù)字傳感器DS18B20的原理和功能,并

73、用DS18B20與AT89S52單片機(jī)、LCD1602組成數(shù)字溫度計(jì),有超溫報(bào)警功能。</p><p>  在本次設(shè)計(jì)的過(guò)程中,我發(fā)現(xiàn)很多的問(wèn)題,雖然以前還做過(guò)這樣的設(shè)計(jì)但這次設(shè)計(jì)真的讓我長(zhǎng)進(jìn)了很多,單片機(jī)課程設(shè)計(jì)重點(diǎn)就在于軟件算法的設(shè)計(jì),需要有很巧妙的程序算法,雖然以前寫(xiě)過(guò)幾次程序,但我覺(jué)的寫(xiě)好一個(gè)程序并不是一件簡(jiǎn)單的事,舉個(gè)例子,以前寫(xiě)的那幾次,數(shù)據(jù)加減時(shí),我用的都是BCD碼,這一次,我全部用的都是16進(jìn)制的

74、數(shù)直接加減,顯示處理時(shí)在用除法去刪分,感覺(jué)效果比較好,有好多的東西,只有我們?nèi)ピ囍隽耍拍苷嬲恼莆?,只學(xué)習(xí)理論有些東西是很難理解的,更談不上掌握。</p><p><b>  參考文獻(xiàn)</b></p><p><b>  【1】作著:姜濤</b></p><p>  【2】書(shū)名:基于單片機(jī)的數(shù)字式溫度計(jì)設(shè)計(jì)</p

75、><p>  【3】出版社:西北電力學(xué)校</p><p>  【4】出版年月:2012.3.19</p><p><b>  【5】頁(yè)碼:27頁(yè)</b></p><p><b>  附錄一:仿真電路圖</b></p><p>  附錄二:系統(tǒng)程序清單</p><

76、;p>  #include<reg52.h></p><p>  #include<intrins.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  //------------------

77、-----</p><p>  sbit S1=P2^0; //設(shè)置 上下限</p><p>  sbit S2=P2^1; //加</p><p>  sbit S3=P2^2; //減</p><p>  //--------LCD1602-------------------</p><p&

78、gt;  //P0-7==== D0-7</p><p>  #define LCDDATA P1</p><p>  sbit rs=P3^0;</p><p>  sbit wela=P3^1;</p><p>  sbit lcden=P3^2;</p><p>  //---------------------

79、-------------</p><p>  sbit DQ1=P2^3; //傳感器1</p><p>  sbit LED1=P2^6; //報(bào)警顯示燈</p><p>  sbit BUZ=P2^7; //蜂鳴器</p><p>  uchar DQ1_SET[2]; //DQ1上下限設(shè)置

80、 DQ1_SET[0] 下限 DQ1_SET[1] 上限;</p><p>  uchar Temp; //溫度報(bào)警</p><p>  uchar count; //蜂鳴器定時(shí)用</p><p>  uchar mode; //mode=1正常顯示 mode=2 設(shè)置下限模式 mode=3設(shè)置上限 </p><

81、;p>  uchar code table[]="Temper ";</p><p>  //////////////////////////////DS18B20////////////////////////////////////////////////</p><p>  uchar ng; //負(fù)號(hào)標(biāo)志</p><p

82、>  uchar code df_Table[]= </p><p><b>  {</b></p><p>  0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9</p><p>  }; //溫度小數(shù)位對(duì)照表</p><p>  uchar CurrentT = 0; /

83、/當(dāng)前讀取的溫度整數(shù)部分</p><p>  uchar Temp_Value[]={0x00,0x00}; //從DS18B20讀取的溫度值</p><p>  uchar Display_Digit[]={0,0,0,0,0,0,0,0};//待顯示的各溫度數(shù)位</p><p>  bit DS18B20_IS_OK = 1; //傳感器正常&

84、lt;/p><p>  ////////////////////////////////DS18B20///////////////////////////////////////////////</p><p><b>  //延時(shí)</b></p><p>  //*****************************************

85、*******************************/</p><p>  // 函數(shù): LCD_Delay()</p><p>  // 描述: 延時(shí)t ms函數(shù)</p><p><b>  // 參數(shù): t </b></p><p><b>  // 返回: 無(wú)</b></p&g

86、t;<p>  // 備注: 12MHZ t=1延時(shí)時(shí)間約1ms</p><p>  // 版本: 2011/01/01 First version</p><p>  //************************************************************************/</p><p

87、>  void Delay_ms(unsigned int t)</p><p><b>  {</b></p><p>  unsigned int i,j;</p><p>  for(i=0;i<t;i++)</p><p>  for(j=0;j<120;j++)</p><

88、p><b>  ;</b></p><p><b>  }</b></p><p>  void Delay(uint x)</p><p><b>  {</b></p><p>  while(--x);</p><p><b>  

89、}</b></p><p>  //---------------1602--------------------------------------</p><p>  void delayms(uint z) //延時(shí)N ms</p><p><b>  {</b></p><p><b&g

90、t;  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=120;y>0;y--);</p><p><b>  }</b></p><p>  void write_com(uchar com) //1602液晶寫(xiě)指令<

91、/p><p><b>  {</b></p><p><b>  rs=0;</b></p><p><b>  lcden=0;</b></p><p>  LCDDATA=com;</p><p>  delayms(1);</p><

92、;p><b>  lcden=1;</b></p><p>  delayms(2);</p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  void write_date(uchar date) //1602

93、液晶寫(xiě)數(shù)據(jù)</p><p><b>  { </b></p><p><b>  rs=1;</b></p><p><b>  lcden=0;</b></p><p>  LCDDATA=date;</p><p>  delayms(1);&l

94、t;/p><p><b>  lcden=1;</b></p><p>  delayms(2);</p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  void init_lcd(void)

95、 //初始化液晶,及畫(huà)面初始化</p><p><b>  {</b></p><p>  uchar num;</p><p><b>  wela=0;</b></p><p><b>  lcden=0;</b></p><p>

96、  write_com(0x38);</p><p>  write_com(0x0c);</p><p>  write_com(0x06);</p><p>  write_com(0x01);</p><p>  write_com(0x80);</p><p>  for(num=0;num<13;num

97、++) // " temper: ";</p><p><b>  {</b></p><p>  write_date(table[num]);</p><p>  Delay(10);</p><p><b>  } </b></p>&l

98、t;p><b>  }</b></p><p>  //-------------1602----------------------------------------</p><p>  //初始化DS18B20</p><p>  uchar Init_DS18B20()</p><p><b> 

99、 {</b></p><p>  uchar status;</p><p><b>  DQ1 = 1;</b></p><p>  Delay(8); //延時(shí)</p><p><b>  DQ1 = 0;</b></p><p>  Delay(90);/

100、/延時(shí)</p><p><b>  DQ1 = 1;</b></p><p><b>  Delay(8);</b></p><p>  status = DQ1;</p><p>  Delay(100);</p><p><b>  DQ1 = 1;</b

101、></p><p>  return status;</p><p><b>  }</b></p><p><b>  //讀一個(gè)字節(jié)</b></p><p>  uchar ReadOneByte()</p><p><b>  {</b>&l

102、t;/p><p>  uchar i,dat=0;</p><p><b>  DQ1 = 1;</b></p><p><b>  _nop_();</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b>

103、</p><p><b>  DQ1 = 0;</b></p><p>  dat >>= 1;</p><p><b>  DQ1 = 1;</b></p><p><b>  _nop_();</b></p><p><b> 

104、 _nop_();</b></p><p><b>  if(DQ1)</b></p><p>  dat |= 0X80;</p><p>  Delay(30);</p><p><b>  DQ1 = 1;</b></p><p><b>  }&

105、lt;/b></p><p>  return (dat); </p><p><b>  }</b></p><p><b>  //寫(xiě)一個(gè)字節(jié)</b></p><p>  void WriteOneByte(uchar dat)</p><p><b> 

106、 {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<8;i++)</p><p>  { DQ1 = 0;</p><p>  DQ1 = dat& 0x01;</p><p><b>  Delay(5

107、);</b></p><p><b>  DQ1 = 1;</b></p><p>  dat >>= 1;</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  

108、//讀溫度值</b></p><p>  void Read_Temperature()</p><p><b>  { EA=0;</b></p><p>  if(Init_DS18B20()==1)</p><p>  DS18B20_IS_OK=0;</p><p><

109、;b>  else</b></p><p><b>  { </b></p><p>  WriteOneByte(0xcc); //跳過(guò)序列號(hào)</p><p>  WriteOneByte(0x44); //啟動(dòng)溫度轉(zhuǎn)換</p><p>  Init_DS18B20();</p>

110、<p>  WriteOneByte(0xcc);//跳過(guò)序列號(hào)</p><p>  WriteOneByte(0xbe);//讀取溫度寄存器</p><p>  Temp_Value[0] = ReadOneByte(); //溫度低8位</p><p>  Temp_Value[1] = ReadOneByte();//溫度高8位</p>

111、<p>  DS18B20_IS_OK=1;</p><p><b>  }</b></p><p><b>  EA=1;</b></p><p><b>  }</b></p><p><b>  //處理溫度值</b></p>

112、;<p>  void Display_Temperature()</p><p><b>  {</b></p><p>  // uchar i;</p><p>  uchar t = 150;//,延時(shí)</p><p>  ng = 0; //與負(fù)值標(biāo)志</p><p> 

113、 if((Temp_Value[1]&0xf8)==0xf8)</p><p><b>  {</b></p><p>  Temp_Value[1] = ~Temp_Value[1];</p><p>  Temp_Value[0] = ~Temp_Value[0]+1;</p><p>  if(Temp_V

114、alue[0]==0x00)</p><p>  Temp_Value[1]++;</p><p><b>  ng = 1;</b></p><p><b>  }</b></p><p>  else{ng = 0;}</p><p>  Display_Digit[0

115、] = df_Table[Temp_Value[0]&0x0f]; //查表得溫度小數(shù)部分</p><p>  CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4); //溫度整數(shù)部分</p><p>  Display_Digit[3] = CurrentT/100

116、; //百</p><p>  Display_Digit[2] = CurrentT%100/10; //十</p><p>  Display_Digit[1] = CurrentT%10; //個(gè)</p><p>  Temp=CurrentT ; //報(bào)警溫度</p><p>  if(ng == 1){Temp=0

117、;}//當(dāng)溫度為負(fù)時(shí),報(bào)警判斷溫度寄存器為0</p><p><b>  }</b></p><p>  void DIS_1602(void)//在LED上顯示數(shù)據(jù)</p><p><b>  {</b></p><p>  write_com(0x80+8); /

118、/恒溫溫度</p><p><b>  if(ng==0)</b></p><p>  {write_date(0x30+Display_Digit[3]);}else{write_date('-');}; </p><p>  write_date(0x30+Display_Digit[2]);</p><

119、p>  write_date(0x30+Display_Digit[1]);</p><p>  write_date('.');</p><p>  write_date(0x30+Display_Digit[0]);</p><p>  write_date('C');</p><p>  write

120、_com(0x80+0X40+0); //恒溫溫度</p><p>  write_date(' ');</p><p>  write_date(' ');</p><p>  write_date(' '); </p><p>  write_date(

121、9; ');</p><p>  write_date(' ');</p><p>  write_date(' ');</p><p>  write_date(' ');</p><p>  write_date(' ');</p><p> 

122、 write_date(' ');</p><p>  write_date(' ');</p><p>  write_date(' ');</p><p>  write_date(' ');</p><p>  write_date(' ');</p&

123、gt;<p><b>  }</b></p><p>  void DIS_SET_SEG(void)//在LED上顯示數(shù)據(jù)</p><p><b>  {</b></p><p>  Display_Digit[7]=DQ1_SET[0]%100/10; //處理顯示溫度//下限設(shè)置顯示</p>

124、;<p>  Display_Digit[6]=DQ1_SET[0]%10; </p><p>  Display_Digit[5]=DQ1_SET[1]%100/10; //處理顯示溫度/上限設(shè)置顯示</p><p>  Display_Digit[4]=DQ1_SET[1]%10; </p><p>  write_com(

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論