版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 溫度測(cè)量顯示電路設(shè)計(jì)</p><p> 目 錄</p><p> 1.引言………………………………………………………………………8</p><p> 2.系統(tǒng)方案確定……………………………………………………………9</p><p> 2.1系統(tǒng)設(shè)計(jì)方案論證與確定……………………………………………9&
2、lt;/p><p> 2.2硬件設(shè)計(jì)總體方案……………………………………………………10</p><p> 3.系統(tǒng)軟件算法分析………………………………………………………12</p><p> 3.1主程序流程圖…………………………………………………………12</p><p> 3.2讀出溫度子程序……………………………………………………
3、…12</p><p> 3.3溫度轉(zhuǎn)換命令子程序…………………………………………………13</p><p> 3.4 計(jì)算子程序溫度………………………………………………………14</p><p> 3.5顯示數(shù)據(jù)刷新子程序…………………………………………………15</p><p> 3.6掃描按鍵處理子程序…………………………………
4、………………16</p><p> 4.軟件仿真…………………………………………………………………17</p><p> 課程設(shè)計(jì)心得與體會(huì)……………………………………………………21</p><p><b> 參考文獻(xiàn)</b></p><p> 6.附錄………………………………………………………………………22
5、</p><p> 6.1 源程序代碼……………………………………………………………22</p><p> 6.2 系統(tǒng)硬件原理圖………………………………………………………28</p><p><b> 1.引言</b></p><p> 近幾年來隨著單片機(jī)在檢測(cè)和控制系統(tǒng)中得到廣泛應(yīng)用,傳統(tǒng)控制技術(shù)也已經(jīng)滿足不
6、了現(xiàn)代工業(yè)生產(chǎn)所需,各行各業(yè)對(duì)于控制和測(cè)量的需求也越來越高。而溫度則是系統(tǒng)常需要測(cè)量、控制和保持一個(gè)量,如何分析和選取就顯得尤為重要了。</p><p> 經(jīng)過對(duì)各種溫度測(cè)量方案的收集整理之后(包括傳統(tǒng)的分立式傳感器),本系統(tǒng)最終選取采用鉑電阻PT100作為溫度傳感器,恒流測(cè)溫的方法,通過單片機(jī)進(jìn)行控制,用放大器、A/D轉(zhuǎn)換器進(jìn)行溫度信號(hào)的采集</p><p> 本系統(tǒng)以四個(gè)部分為主體
7、:放大電路,A/D轉(zhuǎn)換電路,單片機(jī)電路,數(shù)碼管顯示電路。設(shè)計(jì)文氏電橋電路,得到溫度與電壓的關(guān)系,通過控制電阻值改變溫度。利用單片機(jī)將現(xiàn)在溫度與預(yù)設(shè)溫度進(jìn)行比較,將比較結(jié)果在LED數(shù)碼管上顯示,同時(shí)實(shí)現(xiàn)現(xiàn)在溫度與預(yù)設(shè)溫度之間的切換。</p><p> 2. 方案論證與確定</p><p> 2.1系統(tǒng)設(shè)計(jì)方案論證</p><p><b> 方案一<
8、;/b></p><p> 通過溫度傳感器采集溫度信號(hào),經(jīng)信號(hào)放大器放大后,送到A/D轉(zhuǎn)換芯片,將模擬量轉(zhuǎn)化為數(shù)字量,傳送給單片機(jī)控制系統(tǒng),最后經(jīng)過LED顯示溫度。 熱電阻也是最常用的一種溫度傳感器。它的主要特點(diǎn)是測(cè)量精度高,性能穩(wěn)定,使用方便。該方案采用熱電阻PT100做為溫度傳感器、AD620作為信號(hào)放大器,TLC2543作為A/D轉(zhuǎn)換部件,對(duì)于溫度信號(hào)的采集具有大范圍、高精度的特點(diǎn)并且可以通
9、過編寫程序?qū)斎胄盘?hào)進(jìn)行分段線性化處理,使得測(cè)量精度大大提高。</p><p> 這個(gè)方案在電路設(shè)計(jì)上比較麻煩,涉及到A/D轉(zhuǎn)換,溫度采集等復(fù)雜模塊,而且電阻與溫度的對(duì)應(yīng)值的計(jì)算也無形的增大了設(shè)計(jì)的工作量,故不作為優(yōu)先考慮</p><p><b> 工作方框圖如下</b></p><p><b> 方案二</b>&l
10、t;/p><p> 進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,電路簡單,精度高,軟硬件都以實(shí)現(xiàn),而且使用單片機(jī)的接口便于系統(tǒng)的再擴(kuò)展,滿足設(shè)計(jì)要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,費(fèi)用較低,可靠性高,軟件設(shè)計(jì)也比較簡單,故采用了方案二。</p>
11、<p> 2.2硬件設(shè)計(jì)總體方案</p><p> 2.2.1單片機(jī)最小模塊</p><p> AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)
12、器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。AT89C51單片機(jī)引腳結(jié)構(gòu)圖如圖2-3所示。</p><
13、p> AT89C51的主要特性如下:</p><p> ·與MCS-51 兼容</p><p> ·4K字節(jié)可編程閃爍存儲(chǔ)器壽命:1000寫/擦循環(huán),數(shù)據(jù)保留時(shí)間:10年</p><p> ·全靜態(tài)工作:0Hz-24Hz</p><p> ·三級(jí)程序存儲(chǔ)器鎖定</p>&l
14、t;p> ·128*8位內(nèi)部RAM</p><p> ·32可編程I/O線</p><p> ·兩個(gè)16位定時(shí)器/計(jì)數(shù)器</p><p><b> ·5個(gè)中斷源</b></p><p><b> ·可編程串行通道</b></p&
15、gt;<p> ·低功耗的閑置和掉電模式</p><p> ·片內(nèi)振蕩器和時(shí)鐘電路</p><p> AT89C51單片機(jī)引腳圖</p><p> 2.3.2 溫度傳感器模塊</p><p> DS18B20是美國DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感器,其結(jié)構(gòu)圖如
16、圖3所示,與傳統(tǒng)的熱敏電阻相比,他能夠直接讀出被測(cè)溫度并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式??梢苑謩e在93.75 ms和750 ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(單線接口)讀寫,溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡單,可靠性更高。他
17、在測(cè)溫精度、轉(zhuǎn)換時(shí)間、傳輸距離、分辨率等方面較DS1820有了很大的改進(jìn),給用戶帶來了更方便的使用和更令人滿意的效果。</p><p> DS18B20的特點(diǎn):</p><p> ?。?)獨(dú)特的單線接口方式:DS18B20與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。 </p><p> ?。?)在使用中不需要任何外圍元件。</p
18、><p> ?。?)可用數(shù)據(jù)線供電,電壓范圍:+3.0~ +5.5 V。 </p><p> ?。?)測(cè)溫范圍:-55 ~+125 ℃。固有測(cè)溫分辨率為0.5 ℃。 </p><p> ?。?)通過編程可實(shí)現(xiàn)9~12位的數(shù)字讀數(shù)方式。 </p><p> (6)用戶可自設(shè)定非易失性的報(bào)警上下限值
19、。 </p><p> (7)支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。 </p><p> ?。?)負(fù)壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作。 </p><p> 2.3.4溫度顯示模塊</p><p> 共陰極數(shù)碼管中8個(gè)發(fā)光二極管的陰極連接在一起,即為共陰極接法,簡
20、稱共陰數(shù)碼管。通常,共陰極接低電平(一般接地),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為高電平時(shí),該端所連接的字符導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。同樣,要求段驅(qū)動(dòng)電路能提供額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻。</p><p> 本次設(shè)計(jì)使用了四個(gè)型號(hào)為ARK SR42056的數(shù)碼管,其管腳分別接至單片機(jī)管腳的10-13、32-39和排阻R
21、P1,確保數(shù)碼管能夠精確顯示溫度,并能夠使溫度精確到十分位。其具體管腳連接如圖2-4所示。</p><p> 圖2-4 數(shù)碼管連接圖</p><p> 3 .系統(tǒng)軟件算法分析</p><p> 系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計(jì)算溫度子程序,顯示數(shù)據(jù)刷新子程序,按鍵掃描處理子程序等。</p><p><
22、b> 3.1主程序流程圖</b></p><p> 圖3.1 主程序流程圖</p><p> 3.2讀出溫度子程序</p><p> 讀出溫度子程序的主要功能是讀出RAM 中的9 字節(jié),在讀出時(shí)需進(jìn)行CRC 校驗(yàn),校驗(yàn)</p><p> 有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖3-2所示。</p>
23、<p> 3.3溫度轉(zhuǎn)換命令子程序</p><p> 溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12 位分辨率時(shí)轉(zhuǎn)換時(shí)間約為</p><p> 750ms,在本程序設(shè)計(jì)中采用1s 顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程</p><p> 圖3.2讀溫度數(shù)據(jù)流程圖 圖3-3溫度轉(zhuǎn)
24、換流程圖</p><p> 3.4計(jì)算溫度子程序</p><p> 計(jì)算溫度子程序?qū)AM 中讀取值進(jìn)行BCD 碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,</p><p> 其程序流程圖如圖3-4所示。</p><p> 3.5顯示數(shù)據(jù)刷新子程序</p><p> 顯示數(shù)據(jù)刷新子程序主要是對(duì)分離后的溫度顯示數(shù)據(jù)進(jìn)
25、行刷新操作,當(dāng)標(biāo)志位位為1</p><p> 時(shí)將符號(hào)顯示位移入第一位。程序流程圖如圖3-5所示。</p><p> 3.6按鍵掃描處理子程序</p><p> 按鍵采用掃描查詢方式,設(shè)置標(biāo)志位,當(dāng)標(biāo)志位為1 時(shí),顯示設(shè)置溫度,否則顯示溫度。如圖3-6所示。</p><p> 4. Proteus軟件仿真</p><
26、;p> 4.1 Proteus簡介</p><p> Proteus 是英國Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,該軟件的特點(diǎn)是:</p><p> ?、賹?shí)現(xiàn)了單片機(jī)仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232動(dòng)態(tài)仿
27、真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。</p><p> ?、谥С种髁鲉纹瑱C(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類型有:ARM7(LPC21xx)、 8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多種外圍芯片。</p><p> ?、厶峁┸浖{(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷
28、點(diǎn)等調(diào)試功能,</p><p> 同時(shí)可以觀察各個(gè)變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil C51 uVision2、MPLAB等軟件。</p><p> ?、芫哂袕?qiáng)大的原理圖繪制功能??傊?,該軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大。</p><p> 4.2
29、Proteus仿真過程</p><p> Proteus軟件仿真原理圖如下圖所示:</p><p> 2、啟動(dòng)該系統(tǒng),運(yùn)行如下圖所示:</p><p> 3、利用K1、K2功能鍵,可以設(shè)定校正溫度加減、開和關(guān)等。其界面分別為:</p><p> 溫度校正調(diào)零示例:如把當(dāng)前溫度設(shè)定為28度,利用18b20將溫度設(shè)定為30度, Prote
30、us仿真如下圖(可觀察到Q1處指示燈的顏色發(fā)生變化):</p><p> 5.課程設(shè)計(jì)心得與體會(huì)</p><p> 本次電子課程綜合設(shè)計(jì),讓我受益匪淺。雖然時(shí)間比以往的長了不少,但是開始選題時(shí)還是很茫然。從選題到定稿,從理論到實(shí)踐,在整整一星期的日子里,可以說得是苦多于甜。但是在這過程中我查閱和瀏覽了很多的相關(guān)資料,和同學(xué)們一起商量,相互合作,并且對(duì)Proteus軟件的使用有了很大程度
31、的提高。同時(shí)不僅可以鞏固和強(qiáng)化以前所學(xué)過的知識(shí),還學(xué)到了很多書本上所不曾學(xué)到的知識(shí)。</p><p> 這次我選擇了溫度測(cè)量系統(tǒng)設(shè)計(jì),在應(yīng)用系統(tǒng)設(shè)計(jì)時(shí),必須先確定該系統(tǒng)的具體要求,這是系統(tǒng)設(shè)計(jì)的依據(jù)和出發(fā)點(diǎn),整個(gè)設(shè)計(jì)過程都必須圍繞這個(gè)訓(xùn)練要求來做。軟件部分的設(shè)計(jì),我按照模塊化的思想,將各個(gè)模塊單獨(dú)調(diào)試,然后再一點(diǎn)一點(diǎn)地疊加,這樣就容易避免更多錯(cuò)誤的出現(xiàn)。在這次單片機(jī)系統(tǒng)的課程設(shè)計(jì)中,我們學(xué)到了很多,尤其是在調(diào)試
32、程序的過程中,我遇到了很多問題,摸索著改正了一些,還有一些錯(cuò)誤在指導(dǎo)老師的幫助下得以解決。這次課程設(shè)計(jì),查閱了大量的文獻(xiàn)資料和搜索了大量網(wǎng)絡(luò)資料,也更清楚的認(rèn)識(shí)到自己所學(xué)的不足,同時(shí)也加深了對(duì)以前所學(xué)知識(shí)的理解,也增強(qiáng)了編程與仿真的操作能力。</p><p> 通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合的重要性,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才是真正所要的。在設(shè)計(jì)的過程中所遇到的問題,
33、可以說是很多。難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說剛開始在連仿真圖時(shí),不能區(qū)分該數(shù)碼管是共陰極還是共陽極的,等到連好圖仿真時(shí)出現(xiàn)錯(cuò)誤才知道自己用錯(cuò)了數(shù)碼管,對(duì)單片機(jī)的C語言掌握得也還不太好……通過這次課程設(shè)計(jì)之后,一定把以前所學(xué)過的知識(shí)重新溫故。</p><p> 總之,這次課程設(shè)計(jì)讓我明白一個(gè)道理那就是:只有理論必須和實(shí)際
34、結(jié)合,才能更好地讓我們掌握書本上的知識(shí)。同時(shí)在設(shè)計(jì)過程中遇到了很多程序編寫出錯(cuò)和系統(tǒng)不能正常仿真的問題,最后在楊慶老師的細(xì)心指導(dǎo)和同學(xué)們耐心幫助下終于得到解決。同時(shí)也讓我懂得所學(xué)的東西最終是要面向應(yīng)用的,是為了在以后的工作中能夠更好的應(yīng)用,此時(shí)的知識(shí)積累是為以后的工作做好準(zhǔn)備。這個(gè)設(shè)計(jì)總體上不算完美,但是在這次設(shè)計(jì)訓(xùn)練的經(jīng)歷的益處是不能言表的,在此謝謝各位老師和同學(xué)的解囊?guī)椭?lt;/p><p><b>
35、 參考文獻(xiàn)</b></p><p> 1、 康華光.電子技術(shù)基礎(chǔ)[M].模擬部分.高等教育出版社,1998</p><p> 2、張國雄等編.測(cè)控電路.機(jī)械工業(yè)出版社,2001.8.</p><p> 3、 李華.MCS一51系列單片機(jī)實(shí)用接口技術(shù)[M].電子工業(yè)出版社,1999</p><p> 4、 閆玉德,葛龍,
36、俞虹. 單片機(jī)微型計(jì)算機(jī)原理與設(shè)計(jì). 中國電力出版社,2010.112-154,197-199,</p><p> 5、 鄭惟暉,《單片機(jī)智能溫度控制系統(tǒng)的設(shè)計(jì)》[D],2008</p><p><b> 附錄</b></p><p><b> 附1:源程序代碼</b></p><p> *
37、***********************************LCD1602模塊**********************************************/</p><p> #include <reg52.h></p><p> #define uchar unsigned char</p><p> #define u
38、int unsigned int</p><p> sbit rs=P2^7;//液晶使能端口</p><p> sbit rw=P2^6;</p><p> sbit e=P2^5;</p><p> sbit P3_6=P3^6;</p><p> sbit P1_0=P1^0;</
39、p><p> sbit P1_1=P1^1;</p><p> //sbit P1_0 = P1^0;</p><p> //sbit P1_1 = P1^1;</p><p> void delay_ms(uchar ms){ //延時(shí)</p><p><b> uint i,j;</b&
40、gt;</p><p> for(i=0;i<ms;i++)</p><p> for(j=0;j<120;j++);</p><p><b> }</b></p><p> void lcd_wcmd(uchar cmd){ //液晶寫指令</p><p> rs=0;
41、rw=0;</p><p><b> e=0;</b></p><p><b> P0=cmd;</b></p><p><b> e=1;</b></p><p><b> e=0;</b></p><p> delay
42、_ms(5);</p><p><b> }</b></p><p> void lcd_wdat(uchar dat){ //液晶寫數(shù)據(jù)</p><p> rs=1;rw=0;</p><p><b> e=0;</b></p><p><b> P0
43、=dat;</b></p><p><b> e=1;</b></p><p><b> e=0;</b></p><p> delay_ms(5);</p><p><b> }</b></p><p> void lcd_di
44、s(uchar post,uchar *p){</p><p> lcd_wcmd(0x80 | post);//設(shè)置數(shù)據(jù)地址指針顯示</p><p> while(*p!='\0'){</p><p> lcd_wdat(*p++);</p><p><b> }</b></p&g
45、t;<p><b> }</b></p><p> uchar code def_char0[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; //字符℃</p><p> void lcd_wcgram(uchar adress,uchar tmp[]){</p><p><b
46、> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> lcd_wcmd(adress+i);</p><p> lcd_wdat(tmp[i]);</p><p><b>
47、; }</b></p><p><b> }</b></p><p> void lcd_inti(){</p><p> delay_ms(15);</p><p> lcd_wcmd(0x38);//16X2字符,5X7點(diǎn)陣,8位數(shù)據(jù)接口</p><p> lcd_w
48、cmd(0x38);</p><p> lcd_wcmd(0x08);//關(guān)閉顯示</p><p> lcd_wcmd(0x01);//清屏</p><p> lcd_wcmd(0x06);//設(shè)置光標(biāo)工作方式</p><p> lcd_wcmd(0x0c);//開顯示,設(shè)置光標(biāo)顯示方式</p><p&g
49、t; lcd_wcgram(0x48,def_char0); //載入用戶自定義字符</p><p><b> }</b></p><p> sbit DQ=P3^7; //18B20數(shù)據(jù)管腳</p><p> /*************************ds18b20延遲子函數(shù)(晶振12MHz )***********
50、**********************/ </p><p> void delay_18B20(unsigned int i){</p><p> while(i--);</p><p><b> }</b></p><p> void reset() {</p><p> uch
51、ar x=0;</p><p> DQ = 1; //DQ復(fù)位</p><p> delay_18B20(8); //稍做延時(shí)</p><p> DQ = 0; //單片機(jī)將DQ拉低</p><p> delay_18B20(80); //精確延時(shí) 大于 480us</p><
52、p> DQ = 1; //拉高總線</p><p> delay_18B20(14);</p><p> x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗</p><p> delay_18B20(20);</p><p><b> }</b>
53、</p><p> unsigned char rbyte(){</p><p> uchar i=0;</p><p> uchar dat = 0;</p><p> for (i=8;i>0;i--){</p><p> DQ = 0; // 給脈沖信號(hào)</p><p>&
54、lt;b> dat>>=1;</b></p><p> DQ = 1; // 給脈沖信號(hào)</p><p><b> if(DQ)</b></p><p> dat|=0x80;</p><p> delay_18B20(4);</p><p><b&g
55、t; }</b></p><p> return(dat);</p><p><b> }</b></p><p> void wbyte(uchar dat){</p><p> uchar i=0;</p><p> for (i=8; i>0; i--){<
56、;/p><p><b> DQ = 0;</b></p><p> DQ = dat&0x01;</p><p> delay_18B20(5);</p><p><b> DQ = 1;</b></p><p><b> dat>>=1;
57、</b></p><p><b> }</b></p><p><b> }</b></p><p> uchar rTempetuare(uchar tmp[]){</p><p> uchar a=0,b=0,temp,decimal;</p><p>
58、; uint uival;</p><p><b> reset();</b></p><p> wbyte(0xCC); //跳過讀序號(hào)列號(hào)的操作</p><p> wbyte(0x44); //啟動(dòng)溫度轉(zhuǎn)?</p><p><b> reset();</b></p>&
59、lt;p> wbyte(0xCC); //跳過讀序號(hào)列號(hào)的操作</p><p> wbyte(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度</p><p> a=rbyte(); //讀取溫度值低位</p><p> b=rbyte(); //讀取溫度值高位</p><p><b>
60、 temp=b;</b></p><p> temp&=0xf0;</p><p> if(temp){ //負(fù)溫</p><p><b> if(a==0){</b></p><p> a=~a+1; //bit7向bit8位產(chǎn)生進(jìn)位</p><p><
61、b> b=~b+1; </b></p><p><b> }</b></p><p> else{ </p><p> a=~a+1; </p><p><b> b=~b;</b></p><p><b> }<
62、/b></p><p> tmp[0]='-';</p><p><b> }</b></p><p><b> else</b></p><p> tmp[0]=' ';</p><p> temp=(b<<4)|
63、(a>>4); //組合</p><p> decimal=a&0x0f; //將小數(shù)點(diǎn)后的數(shù)據(jù)提取出來</p><p> uival=decimal*625;</p><p> tmp[0]='T';</p><p> tmp[1]='=';</p>
64、<p> tmp[2]=0x20; //空格</p><p> tmp[3]=temp/100 | 0x30; //取百位</p><p> tmp[4]=temp%100/10 | 0x30; //取十位</p><p> tmp[5]=temp%100%10 | 0x30;
65、 //取個(gè)位</p><p> tmp[6]=0x2e; //小數(shù)點(diǎn)</p><p> tmp[7]=uival/1000 | 0x30; //十分位</p><p> tmp[8]=uival%1000/100 | 0x30; //百分位</p><p> tmp[9]=uiv
66、al%1000%100/10 | 0x30; //千分位</p><p> tmp[10]=uival%1000%100%10 | 0x30; //萬分位</p><p> tmp[11]=0x20; //空格</p><p> tmp[12]=0x01; //字符℃</p>
67、<p> tmp[13]='\0';</p><p> return temp; //十進(jìn)制溫度</p><p><b> }</b></p><p> /*******************************紅外解碼模塊***********************************
68、*******/</p><p> #define c(x) (x*110592/120000)</p><p> sbit Ir_Pin=P3^2; //紅外數(shù)據(jù)管腳</p><p> unsigned char Ir_Buf[4]; //用于保存解碼結(jié)果</p><p> //=========================
69、=====================================</p><p> unsigned int Ir_Get_Low() //計(jì)數(shù)器1,用于解碼延時(shí)</p><p><b> {</b></p><p><b> TL1=0;</b></p><p><
70、b> TH1=0;</b></p><p><b> TR1=1;</b></p><p> while(!Ir_Pin && (TH1&0x80)==0);</p><p><b> TR1=0;</b></p><p> return
71、TH1*256+TL1;</p><p><b> }</b></p><p> //=============================================================</p><p> unsigned int Ir_Get_High() //計(jì)數(shù)器1,用于解碼延時(shí)</p>
72、<p><b> {</b></p><p><b> TL1=0;</b></p><p><b> TH1=0;</b></p><p><b> TR1=1;</b></p><p> while(Ir_Pin &
73、;& (TH1&0x80)==0);</p><p><b> TR1=0;</b></p><p> return TH1*256+TL1;</p><p><b> }</b></p><p> char jianche()</p><p>
74、 { //解碼程序</p><p><b> char i,j;</b></p><p> uint temp;</p><p><b> restart:</b></p><p> while(Ir_Pin);</p><p> te
75、mp=Ir_Get_Low();</p><p> if(temp<c(8500) || temp>c(9500)) goto restart;//引導(dǎo)脈沖低電平9000</p><p> temp=Ir_Get_High();</p><p> if(temp<c(4000) || temp>c(5000)) goto restart
76、;//引導(dǎo)脈沖高電平4500</p><p> for(i=0;i<4;i++) //4個(gè)字節(jié)</p><p> for(j=0;j<8;j++) //每個(gè)字節(jié)8位</p><p><b> {</b></
77、p><p> temp=Ir_Get_Low();</p><p> if(temp<c(200) || temp>c(800)) goto restart;</p><p> temp=Ir_Get_High();</p><p> if(temp<c(200) || temp>c(2000
78、)) goto restart;</p><p> Ir_Buf[i]>>=1;</p><p> if(temp>c(1120)) Ir_Buf[i]|=0x80;</p><p><b> }</b></p><p> return Ir_Buf[2]&0x0f;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)---溫度測(cè)量顯示電路設(shè)計(jì)
- 糧庫溫度測(cè)量顯示系統(tǒng)課程設(shè)計(jì)
- eda課程設(shè)計(jì)---溫度測(cè)量與控制電路設(shè)計(jì)
- 課程設(shè)計(jì)----溫度顯示及控制電路
- 溫度測(cè)量及時(shí)鐘顯示的課程設(shè)計(jì)
- 課程設(shè)計(jì)---溫度測(cè)量與控制電路
- 溫度測(cè)量與控制電路課程設(shè)計(jì)
- 電子電工課程設(shè)計(jì)報(bào)告---轉(zhuǎn)速測(cè)量顯示邏輯電路設(shè)計(jì)
- 溫度控制顯示課程設(shè)計(jì)
- 智能儀器課程設(shè)計(jì)報(bào)告---基于1n4007的溫度測(cè)量電路設(shè)計(jì)
- 電路課程設(shè)計(jì)--- 溫度測(cè)量域控制器的設(shè)計(jì)
- 1—wire數(shù)字溫度的測(cè)量及l(fā)cd顯示,課程設(shè)計(jì)論文
- 單片及課程設(shè)計(jì)---多點(diǎn)溫度采集電路設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告--溫度顯示儀
- 溫度采集及顯示課程設(shè)計(jì)
- 課程設(shè)計(jì)---正弦波發(fā)生、頻率顯示電路設(shè)計(jì)
- fpga課程設(shè)計(jì)--vga圖像顯示控制電路設(shè)計(jì)
- 溫度測(cè)量課程設(shè)計(jì)
- 溫度采集顯示系統(tǒng)課程設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--紅外溫度計(jì)顯示及控制電路設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論