單片機(jī)課程設(shè)計(jì)---數(shù)字溫度計(jì)的設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(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><b>  數(shù)字溫度計(jì)的設(shè)計(jì)</b></p><p><b>  摘要</b></p><p>  本設(shè)計(jì)采用新型單片機(jī)對(duì)溫度進(jìn)行控制,以其測(cè)量精度高,操作簡(jiǎn)單??蛇\(yùn)行性強(qiáng),價(jià)格低廉等優(yōu)點(diǎn),特別適用于我們?nèi)粘I詈凸I(yè)生產(chǎn)等方面的溫度測(cè)量及控制。此次設(shè)計(jì),我們重點(diǎn)致力于對(duì)普通室溫的測(cè)量。溫度控制系統(tǒng)采用STC89C52八位機(jī)作為

2、微處理單元進(jìn)行控制,傳感器采用數(shù)字溫度傳感器18B20進(jìn)行檢測(cè)。通過(guò)軟件編程把設(shè)定溫度的最高值和最低值存入單片機(jī)的數(shù)據(jù)存儲(chǔ)器,另外,溫度傳感器完成溫度檢測(cè)并且顯示其溫度值及其對(duì)應(yīng)指標(biāo),指標(biāo)分別為:Hot、Cold、Comfort三個(gè)指標(biāo)。指標(biāo)是由采集到的溫度值與單片機(jī)里的預(yù)設(shè)值相比較來(lái)決定,當(dāng)溫度值小于18攝氏度時(shí),指標(biāo)顯示為偏冷。當(dāng)溫度值大于32攝氏度時(shí),指標(biāo)顯示為偏熱。介于兩者之間為舒適,預(yù)設(shè)值是根據(jù)人對(duì)溫度的感覺(jué)設(shè)定的。</

3、p><p>  關(guān)鍵字:?jiǎn)纹瑱C(jī)、溫度檢測(cè)、18B20</p><p><b>  一、系統(tǒng)的總體設(shè)計(jì)</b></p><p>  1.1 設(shè)計(jì)背景 </p><p>  隨著人們對(duì)生活品質(zhì)要求的提高,溫度的觀測(cè)已經(jīng)不僅僅局限于室外溫度,人們對(duì)室內(nèi)溫度的檢測(cè)也有很高的要求。因此,設(shè)計(jì)一

4、個(gè)良好的室溫檢測(cè)系統(tǒng)已經(jīng)尤為迫切。如果對(duì)此系統(tǒng)在進(jìn)行研究與改進(jìn),也可用于工業(yè)生產(chǎn)過(guò)程,在實(shí)際生產(chǎn)操作過(guò)程中,由于工作環(huán)境溫度不合理而引發(fā)的事故時(shí)有發(fā)生。對(duì)工業(yè)生產(chǎn)可靠進(jìn)行造成影響,甚至操作人員的安全。為了避免這些缺點(diǎn),需要在某些特定的環(huán)境里安裝數(shù)字溫度測(cè)量及控制設(shè)備。本設(shè)計(jì)由于采用了新型單片機(jī)對(duì)溫度進(jìn)行控制,以其測(cè)量精度高,操作簡(jiǎn)單??蛇\(yùn)行性強(qiáng),價(jià)格低廉等優(yōu)點(diǎn),特別適用于我們?nèi)粘I詈凸I(yè)生產(chǎn)等方面的溫度測(cè)量及控制。此次設(shè)計(jì),我們重點(diǎn)致

5、力于對(duì)房間溫度的測(cè)量。</p><p>  本設(shè)計(jì)是一個(gè)數(shù)字溫度測(cè)量及提示系統(tǒng),能精確檢測(cè)房間內(nèi)的溫度以及顯示實(shí)時(shí)溫度,并能在超出設(shè)定值的情況下以指標(biāo)提示舒適度,一起到提示使用者的目的。</p><p>  1.2 電路的總體工作原理</p><p>  溫度控制系統(tǒng)采用STC89C52八位機(jī)作為微處理單元進(jìn)行控制。采用軟件編程把設(shè)定溫度的最高值和最低值存入單片機(jī)的

6、數(shù)據(jù)存儲(chǔ)器,還可以通過(guò)溫度傳感器完成溫度檢測(cè)并且顯示其對(duì)應(yīng)指標(biāo),指標(biāo)分別為:Hot、Cold、Comfort三個(gè)指標(biāo)。指標(biāo)是由采集到的溫度值與單片機(jī)里的預(yù)設(shè)值相比較來(lái)決定,當(dāng)溫度值小于18攝氏度時(shí),指標(biāo)顯示為偏冷。當(dāng)溫度值大于32攝氏度時(shí),指標(biāo)顯示為偏熱。介于兩者之間為舒適,預(yù)設(shè)值是根據(jù)人對(duì)溫度的感覺(jué)設(shè)定的。</p><p>  根據(jù)系統(tǒng)的設(shè)計(jì)要求,選擇DS18B20作為本系統(tǒng)的溫度傳感器,選擇單片機(jī)STC89C

7、52為測(cè)控系統(tǒng)的核心來(lái)完成數(shù)據(jù)采集、處理、顯示等功能。選用數(shù)字溫度傳感器DS18B20,省卻了采樣/保持電路、運(yùn)放、數(shù)/模轉(zhuǎn)換電路以及進(jìn)行長(zhǎng)距離傳輸時(shí)的串/并轉(zhuǎn)換電路,簡(jiǎn)化了電路,縮短了系統(tǒng)的工作時(shí)間,降低了系統(tǒng)的硬件成本。</p><p>  該系統(tǒng)的總體設(shè)計(jì)思路如下:溫度傳感器DS18B20把所測(cè)得的溫度值發(fā)送到STC89C52單片機(jī)中,經(jīng)過(guò)單片機(jī)處理,將溫度顯示在LCD液晶上,本系統(tǒng)顯示器為點(diǎn)陣字符LCD1

8、602液晶模塊。本系統(tǒng)除了顯示溫度以外還可以設(shè)置各個(gè)溫度段所對(duì)應(yīng)的Index指標(biāo),對(duì)所測(cè)溫度進(jìn)行監(jiān)控,當(dāng)溫度高于或低于設(shè)定定溫度時(shí), LCD上顯示指標(biāo)Index(Hot、Cold、Confort其一)。</p><p><b>  二、系統(tǒng)的硬件設(shè)計(jì)</b></p><p>  2.1 STC89C52單片機(jī)</p><p>  STC89C5

9、2是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門(mén)狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口。另

10、外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。</p><p>  圖2.1 單片機(jī)實(shí)物圖</p><p>  2.1.1 單片機(jī)最小系統(tǒng)

11、的設(shè)計(jì)</p><p>  目前的單片機(jī)開(kāi)發(fā)系統(tǒng)只能夠仿真單片機(jī),卻沒(méi)有給用戶提供一個(gè)通用的最小系統(tǒng)。由設(shè)計(jì)的要求,只要做很小集成度的最小系統(tǒng)應(yīng)用在一些小的控制單元。其應(yīng)用特點(diǎn)是:</p><p>  (1)全部I/O口線均可供用戶使用。 </p><p>  (2)內(nèi)部存儲(chǔ)器容量有限(只有4KB地址空間)。 </p><p>  (3)應(yīng)用

12、系統(tǒng)開(kāi)發(fā)具有特殊性</p><p>  圖 2.1.1 最小系統(tǒng)圖</p><p>  單片機(jī)最小系統(tǒng)如圖2.1.1所示,其中有4個(gè)雙向的8位并行I/O端口,分別記作P0、P1、P2、P3,都可以用于數(shù)據(jù)的輸出和輸入,P3口具有第二功能為系統(tǒng)提供一些控制信號(hào)。時(shí)鐘電路用于產(chǎn)生STC89C52單片機(jī)工作所必須的時(shí)鐘控制信號(hào),內(nèi)部電路在時(shí)鐘信號(hào)的控制下,嚴(yán)格地按時(shí)序指令工作。STC89C5

13、2內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反向放大器,該高增益反向放大器的輸入端為芯片的引腳XTAL1,輸出端為XTAL2。這兩個(gè)引腳跨接石英晶體振蕩器和微調(diào)電容,就構(gòu)成了一個(gè)穩(wěn)定的自激振蕩器。電路中的微調(diào)電容通常選擇為30pF左右,該電容的大小會(huì)影響到振蕩器頻率的高低、振蕩器的穩(wěn)定性和起振的快速性。晶體的振蕩頻率為11.059MHz。</p><p>  把EA腳接高電平,單片機(jī)訪問(wèn)片內(nèi)程序存儲(chǔ)器,但在PC值超過(guò)0FF

14、FH(4Kbyte地址范圍)時(shí),將自動(dòng)轉(zhuǎn)向執(zhí)行外部程序存儲(chǔ)器內(nèi)的程序。</p><p>  STC89C52的復(fù)位是由外部的復(fù)位電路來(lái)實(shí)現(xiàn)。采用最簡(jiǎn)單的外部按鍵復(fù)位電路。按鍵自動(dòng)復(fù)位是通過(guò)外部復(fù)位電路的來(lái)實(shí)現(xiàn)的.我們選用時(shí)鐘頻率為11.059MHz,C1取47μf。</p><p>  2.2 溫度傳感電路設(shè)計(jì)</p><p>  DS18B20數(shù)字溫度傳感器接線方

15、便,封裝成后可應(yīng)用于多種場(chǎng)合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號(hào)多種多樣,有LTM8877,LTM8874等等。主要根據(jù)應(yīng)用場(chǎng)合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測(cè)溫,高爐水循環(huán)測(cè)溫,鍋爐測(cè)溫,機(jī)房測(cè)溫,農(nóng)業(yè)大棚測(cè)溫,潔凈室測(cè)溫,彈藥庫(kù)測(cè)溫等各種非極限溫度場(chǎng)合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。本設(shè)計(jì)所使用的溫度傳感器DS18B20引腳圖:</p&

16、gt;<p>  圖 2.2.1 DS18B20引腳圖</p><p>  DS18B20的性能特點(diǎn):</p><p> ?、?、獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。 </p><p> ?、凇y(cè)溫范圍 -55℃~+125℃,固有測(cè)溫分辨率0.5℃。 </p>&

17、lt;p> ?、?、支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,最多只能并聯(lián)8個(gè),實(shí)現(xiàn)多點(diǎn)測(cè)溫,如果數(shù)量過(guò)多,會(huì)使供電電源電壓過(guò)低,從而造成信號(hào)傳輸?shù)牟环€(wěn)定。 </p><p> ?、?、工作電源: 3~5V/DC </p><p> ?、荨⒃谑褂弥胁恍枰魏瓮鈬?</p><p> ?、?、測(cè)量結(jié)果以9~12位數(shù)字量方式串行傳送 </p&

18、gt;<p> ?、?、不銹鋼保護(hù)管直徑 Φ6 </p><p>  ⑧、適用于DN15~25, DN40~DN250各種介質(zhì)工業(yè)管道和狹小空間設(shè)備測(cè)溫 </p><p>  ⑨、標(biāo)準(zhǔn)安裝螺紋 M10X1, M12X1.5, G1/2”任選 </p><p> ?、?、PVC電纜直接出線或德式球型接線盒出線,便于與其它電器設(shè)備連接。</p>

19、<p>  在硬件上,DS18B20與單片機(jī)的連接有兩種方法,一種是VCC接外部電源,GND接地,I/O與單片機(jī)的I/O線相連;另一種是用寄生電源供電,此時(shí)UDD、GND接地,I/O接單片機(jī)I/O。無(wú)論是內(nèi)部寄生電源還是外部供電,I/O口線要接5KΩ左右的上拉電阻.我們采用的是第一種連接方法,如圖3.3所示:把DS18B20的數(shù)據(jù)線與單片機(jī)的13管腳連接,再加上上拉電阻。</p><p>  圖 2.2

20、.2 溫度傳感電路圖</p><p>  DS18B20有六條控制命令,如表所示:</p><p>  CPU對(duì)DS18B20的訪問(wèn)流程是:先對(duì)DS18B20初始化,再進(jìn)行ROM操作命令,最后才能對(duì)存儲(chǔ)器操作,數(shù)據(jù)操作。DS18B20每一步操作都要遵循嚴(yán)格的工作時(shí)序和通信協(xié)議。如主機(jī)控制DS18B20完成溫度轉(zhuǎn)換這一過(guò)程,根據(jù)DS18B20的通訊協(xié)議,須經(jīng)三個(gè)步驟:每一次讀寫(xiě)之前都要對(duì)

21、DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。</p><p>  2.3 顯示電路的設(shè)計(jì)</p><p>  液晶顯示器是一種將液晶顯示器件,連接器件,集成電路,PCB線路板,背光源,結(jié)構(gòu)器件裝配在一起的組件。根據(jù)顯示內(nèi)容和方式的不同可以分為,數(shù)顯LCD,點(diǎn)陣字符LCD,點(diǎn)陣圖形LCD在此設(shè)計(jì)中我們采用點(diǎn)陣字符LCD,這

22、里采用常用的2行16個(gè)字的1602液晶模塊。下圖為L(zhǎng)CD1602引腳圖:</p><p>  1602采用標(biāo)準(zhǔn)的14腳接口,其中:</p><p>  第1腳:VSS為地電源第2腳:VDD接5V正電源</p><p>  第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整

23、對(duì)比度 第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。 第5腳:RW為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。當(dāng)RS和RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。 第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。</p><p>  第7~14腳

24、:D0~D7為8位雙向數(shù)據(jù)線。 </p><p>  第15~16腳:空腳。</p><p>  與單片機(jī)的連接如圖2.5所示</p><p>  圖 2.5 液晶顯示電路圖</p><p>  三、 系統(tǒng)的軟件設(shè)計(jì)</p><p>  3.1 系統(tǒng)的主程序設(shè)計(jì)</p><p>  主程序是系

25、統(tǒng)的監(jiān)控程序,在程序運(yùn)行的過(guò)程中必須先經(jīng)過(guò)初始化,包括鍵盤(pán)程序,中斷程序,以及各個(gè)控制端口的初始化工作。流程圖如3.1 所示。系統(tǒng)在初始化完成后就進(jìn)入溫度測(cè)量程序,實(shí)時(shí)的測(cè)量當(dāng)前的溫度并通過(guò)顯示電路在LCD上顯示。程序中以中斷的方式來(lái)重新設(shè)定溫度的上下限。根據(jù)硬件設(shè)計(jì)完成對(duì)溫度的控制。系統(tǒng)軟件設(shè)計(jì)的總體流程圖</p><p>  圖 3.1 系統(tǒng)總體程序設(shè)計(jì)流程圖</p><p>  3

26、.2 溫度檢測(cè)模塊流程圖</p><p>  DS18B20在單片機(jī)控制下分三個(gè)階段:</p><p> ?、?8B20 初始化:初始化流程圖見(jiàn)</p><p>  ②讀18B20時(shí)序:讀DS18B20流程見(jiàn)圖 3.2.1</p><p> ?、蹖?xiě)18B20時(shí)序:寫(xiě)18B20 流程見(jiàn)圖3.2.2</p><p>  圖

27、 3.2.1讀DS18B20流程圖 圖 3.2.2寫(xiě)DS18B20流程圖</p><p><b>  四、全文總結(jié)</b></p><p>  本設(shè)計(jì)利用89S51 芯片控制溫度傳感器DS18B20,再輔之以部分外圍電路實(shí)現(xiàn)對(duì)環(huán)境溫度的測(cè)控,性能穩(wěn)定,精度教高,而且擴(kuò)展性能很強(qiáng)大。由于DS18B20 支持單總線協(xié)議,我們可以將

28、多個(gè)DS18B20 可以并聯(lián)到3 根或2 根線上,CPU 只需一根端口線就能與諸多DS18B20 通信,占用較少的微處理器的端口就可以實(shí)現(xiàn)多點(diǎn)測(cè)溫監(jiān)控系統(tǒng)。可以加入1302 時(shí)鐘芯片實(shí)現(xiàn)對(duì)時(shí)間進(jìn)行顯示,加之AT24C16 存儲(chǔ)芯片來(lái)實(shí)現(xiàn)對(duì)時(shí)間和溫度數(shù)據(jù)的記錄,利用MAX232芯片和計(jì)算機(jī)實(shí)現(xiàn)串口通訊,這樣就可以方便的統(tǒng)計(jì)出特定時(shí)間內(nèi)的需要的時(shí)間和溫度數(shù)據(jù)。由于DS18B20的測(cè)量精度只有±0.5 度,往往很多場(chǎng)合需要更加精確的

29、溫度,在所測(cè)溫度精度不變的基礎(chǔ)上必須對(duì)數(shù)據(jù)進(jìn)行校正。由于DS18B20 是基于帶隙結(jié)構(gòu)的數(shù)字式溫度傳感器,PN 結(jié)增量電壓正比于IC 絕對(duì)溫度(PTAT),它的測(cè)溫精度較高,但存在著一定的誤差.不過(guò),其誤差在時(shí)間和外部環(huán)境變化的條件下,保持相當(dāng)高的穩(wěn)定性。針對(duì)這一特性,基于線性插補(bǔ)的數(shù)學(xué)思想,利用DSP技術(shù),對(duì)其進(jìn)行誤差校正補(bǔ)償.這種誤差校正的補(bǔ)償方法,不需增加硬件電路,計(jì)算方法簡(jiǎn)單</p><p><b&

30、gt;  參考文獻(xiàn)</b></p><p>  [1] 沙占友. 集成溫度傳感器原理與應(yīng)用. 北京:機(jī)械工業(yè)出版社,2002, 84~95.</p><p>  [2] 劉君華. 智能傳感器系統(tǒng). 西安:西安電子科技大學(xué)出版社,1999,83~105.</p><p>  [3] 沙占友. 智能化傳感器原理與應(yīng)用. 北京:電子工業(yè)出版社,2004,99~

31、108.</p><p>  [4] 趙負(fù)圖. 傳感器集成電路手冊(cè). 北京:化學(xué)工業(yè)出版社,2002,692~703.</p><p>  [5] 張毅剛. MCS-51單片機(jī)原理及應(yīng)用. 哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2004,81~94</p><p>  [6] 林伸茂. 8051單片機(jī)徹底研究經(jīng)驗(yàn)篇. 北京:人民郵電出版社,2004,7~14.</p&

32、gt;<p>  [7] 沙占友. 單片機(jī)外圍電路設(shè)計(jì). 北京:電子工業(yè)出版社,2003,37~48.</p><p>  [8] 何希才. 傳感器及其應(yīng)用電路. 北京:電子工業(yè)出版社,2001,36~47.</p><p>  [9] Intel:MCS-51 Family of Single Chip Mirocomputers User’s Manual,1990

33、,3~9.</p><p><b>  總電路圖</b></p><p><b>  附錄1 實(shí)物圖</b></p><p><b>  附錄2 程序</b></p><p>  #include"reg51.h"</p><p&g

34、t;  #include"intrins.h"</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit DQ=P2^1;</p><p>  void Init18B20(void); //初始化&l

35、t;/p><p>  void Write18B20(uchar ch);//寫(xiě)數(shù)據(jù)</p><p>  unsigned char Read18B20(void);//讀數(shù)據(jù) </p><p>  void Delay15(uchar n); </p><p>  void Delay10ms(uint delay_num);</p&

36、gt;<p>  void Display(void);</p><p>  ///////////////////////////////////// </p><p>  code uchar decimalH[]={00,06,12,18,25,31,37,43,50,56,62,68,75,81,87,93};</p><p>  code

37、uchar decimalL[]={00,25,50,75,00,25,50,75,00,25,50,75,00,25,50,75};</p><p>  uint ResultTemperatureH ,ResultTemperatureLH,ResultTemperatureLL;//整數(shù),小數(shù)高位,小數(shù)低位</p><p>  uint ResultSignal;//符號(hào)位<

38、/p><p>  sbit RS=P2^5;</p><p>  sbit EN=P2^7;</p><p>  sbit RW=P2^6;</p><p>  /********************************************************************/</p><p>&

39、lt;b>  //延時(shí)函數(shù)</b></p><p>  void delay_1us(void) //1us延時(shí)函數(shù)</p><p><b>  {</b></p><p><b>  _nop_();</b></p><p><b>  

40、}</b></p><p>  void delay_nus(unsigned int n)//N us延時(shí)函數(shù)</p><p><b>  {</b></p><p>  unsigned int i=0;</p><p>  for(i=0;i<n;i++)</p><p&g

41、t;  delay_1us();</p><p><b>  }</b></p><p>  void delay_1ms(void) //1ms延時(shí)函數(shù)</p><p><b>  {</b></p><p>  unsigned int i;</p><p> 

42、 for(i=0;i<1140;i++);</p><p><b>  }</b></p><p>  void delay_nms(unsigned int n)</p><p><b>  {</b></p><p>  unsigned int i=0;</p><p

43、>  for(i=0;i<n;i++)</p><p>  delay_1ms();</p><p><b>  }</b></p><p>  /********************************************************************/</p><p><

44、;b>  //寫(xiě)指令函數(shù)</b></p><p>  void write_command(unsigned char com)</p><p><b>  {</b></p><p>  delay_nus(10); //delay</p><p><b&g

45、t;  RS=0;</b></p><p><b>  EN=1;</b></p><p>  P0&=0x00;</p><p>  P0=com;</p><p><b>  EN=0;</b></p><p><b&g

46、t;  }</b></p><p><b>  //寫(xiě)數(shù)據(jù)函數(shù)</b></p><p>  void write_data(unsigned char datas)</p><p><b>  {</b></p><p>  delay_nus(10);</p><p

47、><b>  RS=1;</b></p><p><b>  EN=1;</b></p><p>  P0&=0x00; </p><p>  P0=datas; </p><p><b>

48、  EN=0;</b></p><p><b>  }</b></p><p>  //初始化LCD1602函數(shù)</p><p>  void LCD_init(void)</p><p><b>  {</b></p><p>  P0=0xff;

49、//設(shè)為輸出</p><p>  write_command(0x38);//8位顯示--對(duì)應(yīng)功能設(shè)置指令</p><p>  write_command(0x0c);//顯示開(kāi)--對(duì)應(yīng)開(kāi)關(guān)顯示控制指令</p><p>  write_command(0x01);//清屏--對(duì)應(yīng)清屏指令</p><p>  delay

50、_nms(2); //delay</p><p><b>  }</b></p><p>  void LCD_set_addr(unsigned char x,unsigned char y) //x:0~15,y:0~1</p><p><b>  {</b></p&g

51、t;<p><b>  if(y)</b></p><p>  write_command(0xc0+x); //第二行顯示</p><p><b>  else</b></p><p>  write_command(0x80+x); //第一行顯示</p>

52、;<p><b>  }</b></p><p><b>  //寫(xiě)字符函數(shù)</b></p><p>  void LCD_write_char(unsigned char X,unsigned char Y,</p><p>  unsigned char datas) //列x=0~15,行y=0,1&l

53、t;/p><p><b>  {</b></p><p>  LCD_set_addr(X,Y); //寫(xiě)地址</p><p>  write_data(datas);</p><p><b>  }</b></p><p><b>  /

54、/寫(xiě)字符串函數(shù)</b></p><p>  void LCD_write_string(unsigned char X,unsigned char Y,</p><p>  unsigned char *s) //列0~15,行y=0,1</p><p><b>  {</b></p><p>  LCD_

55、set_addr(X,Y); //寫(xiě)地址</p><p><b>  while(*s)</b></p><p><b>  {</b></p><p>  write_data(*s);</p><p><b>  s++;</b></p&

56、gt;<p><b>  }</b></p><p><b>  }</b></p><p><b>  main()</b></p><p>  { uint TemH,TemL,delay,k=0;</p><p><b>  RW=0;</

57、b></p><p>  LCD_init();</p><p><b>  for(; ; )</b></p><p><b>  {</b></p><p>  Init18B20();</p><p>  Write18B20(0xCC);//跳過(guò)ROM</

58、p><p><b>  _nop_();</b></p><p>  Write18B20(0x7f);//12 bits溫度分辨率</p><p>  Init18B20();</p><p>  Write18B20(0xCC);//跳過(guò)ROM</p><p><b>  _nop_()

59、;</b></p><p>  Write18B20(0x44);//發(fā)送溫度轉(zhuǎn)換指令</p><p>  Delay10ms(100);//等待1s轉(zhuǎn)換</p><p>  Init18B20();</p><p>  Write18B20(0xCC);//跳過(guò)ROM</p><p>  Write18B

60、20(0xBE);//讀暫存存儲(chǔ)器</p><p>  TemL=Read18B20(); //讀低位溫度值</p><p>  TemH=Read18B20(); //讀高位溫度值 </p><p>  Delay10ms(2);</p>

61、<p>  TemH=(TemH<<4)|(TemL>>4);</p><p>  TemL=TemL&0x0f; //取低4位</p><p>  ResultTemperatureLH=decimalH[TemL];</p><p>  ResultTemperatureLL=decimalL[TemL];<

62、;/p><p>  ResultTemperatureH=TemH;</p><p>  Display();</p><p>  for(delay=0;delay<30000;delay++);</p><p>  for(delay=0;delay<30000;delay++);</p><p><

63、b>  } </b></p><p><b>  }</b></p><p>  void Display(void)</p><p>  { uint i,j,q,tep;</p><p>  LCD_init();</p><p>  write_command(0x

64、01);</p><p>  write_command(0x01);</p><p>  delay_nms(2);</p><p>  q=ResultTemperatureH/100;</p><p>  i=(ResultTemperatureH%100)/10;</p><p>  j=ResultTempe

65、ratureH-(i*10+q*100);</p><p>  LCD_write_string(0,0,"index:");</p><p>  LCD_write_string(0,1,"Temp: . ");</p><p>  LCD_write_char(0x05,1,i|0x30);</p><

66、;p>  LCD_write_char(0x06,1,j|0x30);</p><p>  LCD_write_char(0x08,1,(ResultTemperatureLH/10)|0x30);</p><p>  tep=i*10+j;</p><p>  if(tep>=32)</p><p>  LCD_write_st

67、ring(0x07,0,"Hot");</p><p>  else if(tep<=18)</p><p>  LCD_write_string(0x07,0,"Cold");</p><p><b>  else</b></p><p>  LCD_write_strin

68、g(0x07,0,"Comfort");</p><p><b>  }</b></p><p>  unsigned char Read18B20(void)</p><p>  { unsigned char ch;</p><p>  unsigned char q ;</p>&

69、lt;p>  for(q=0;q<8;q++)</p><p>  {ch=ch>>1;</p><p><b>  DQ=0;</b></p><p><b>  _nop_();</b></p><p><b>  DQ=1;</b></p&g

70、t;<p>  _nop_();_nop_();_nop_();_nop_();</p><p>  if(DQ==1) </p><p>  {ch=ch|0x80;}</p><p>  else {ch=ch&0x7f;}</p><p>  Delay15(3);</p><p>

71、;<b>  DQ=1;</b></p><p><b>  } </b></p><p>  return (ch);</p><p><b>  }</b></p><p>  void Write18B20(uchar ch)</p><p> 

72、 { uchar i;</p><p>  for(i=0;i<8;i++)</p><p><b>  { DQ=0;</b></p><p>  Delay15(1);</p><p>  DQ=ch&0x01;</p><p>  Delay15(3);</p>

73、<p><b>  DQ=1;</b></p><p><b>  ch=ch>>1;</b></p><p><b>  _nop_();</b></p><p><b>  }</b></p><p><b>  }&l

74、t;/b></p><p>  void Init18B20(void)</p><p><b>  { DQ=0;</b></p><p>  Delay15(33);//至少延時(shí)480us</p><p><b>  DQ=1;</b></p><p>  Dela

75、y15(10);//至少延時(shí)100us</p><p><b>  }</b></p><p>  void Delay15(uchar n)</p><p>  { do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();</p><p>  _nop_(); _nop_();

76、 _nop_(); _nop_(); _nop_();</p><p>  _nop_(); _nop_(); _nop_();</p><p><b>  n--;</b></p><p>  }while(n);</p><p><b>  } </b></p><p>

77、  void Delay10ms(uint delay_num)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while(delay_num--)</p><p><b>  { </b></p>

溫馨提示

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