基于單片機(jī)的溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)_第1頁
基于單片機(jī)的溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)_第2頁
基于單片機(jī)的溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)_第3頁
基于單片機(jī)的溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)_第4頁
基于單片機(jī)的溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)課程名稱: 基于單片機(jī)的溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì) 學(xué) 院: 明德學(xué)院 專 業(yè): 電自10152 姓 名: 郭貴方 號(hào): 102003110228 年 級(jí): 大三 任課教師: 楊靖 2013年 7月 6日目 錄前 言第一章 單片機(jī)概述*3第二章 總體方案設(shè)計(jì)*52.1 課題的意義*52.2 系統(tǒng)整體硬件電路*52.2.1 芯片簡(jiǎn)介*52.2.2 硬件電路設(shè)計(jì)及描述*6第三章 系統(tǒng)軟件算法設(shè)計(jì)*11心得體會(huì)*20參考文獻(xiàn)*21第一章 單片機(jī)概述 單片機(jī)誕生于20世紀(jì)70年代末,經(jīng)歷了scm、mcu、soc三大階段。單片機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入輸出設(shè)備構(gòu)成。單片機(jī)是一種集成在電路芯片,是采用

2、超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器cpu隨機(jī)存儲(chǔ)器ram、只讀存儲(chǔ)器rom、多種i/o口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、a/d轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的計(jì)算機(jī)系統(tǒng)。早期單片機(jī)主要由于工藝及設(shè)計(jì)水平不高、功耗高和抗干擾性能差等原因,所以采取穩(wěn)妥方案:即采用較高的分頻系數(shù)對(duì)時(shí)鐘分頻,使得指令周期長(zhǎng),執(zhí)行速度慢。以后的 cmos單片機(jī)雖然采用提高時(shí)鐘頻率和縮小分頻系數(shù)等措施,但這種狀態(tài)并未被徹底改觀(51以及51兼容)。此間雖有某些精簡(jiǎn)指令集單片機(jī)(risc)問世,但依然沿襲對(duì)時(shí)鐘分頻的作法。單片機(jī)問世以

3、來所走的路與微處理器是不同的。微處理器向著高速運(yùn)算、數(shù)據(jù)分析與處理能力、大規(guī)模容量存儲(chǔ)等方向發(fā)展,以提高通用計(jì)算機(jī)的性能。其接口界面也是為了滿足外設(shè)和網(wǎng)絡(luò)接口而設(shè)計(jì)的 。單片機(jī)則是從工業(yè)測(cè)控對(duì)象、環(huán)境、接口特點(diǎn)出發(fā),向著增強(qiáng)控制功能、提高工業(yè)環(huán)境下的可靠性、靈活方便的構(gòu)成應(yīng)用計(jì)算機(jī)系統(tǒng)的界面接口的方向發(fā)展。因此,單片機(jī)有著自已的特點(diǎn),主要是:12 品種多樣,型號(hào)繁多。品種型號(hào)逐年擴(kuò)充以適應(yīng)各種需要。使系統(tǒng)開發(fā)者有很大的選擇自由。 提高性能,擴(kuò)大容量。集成度已達(dá)200萬個(gè)晶體管以上??偩€工作速度已達(dá)數(shù)十微秒。工作頻率達(dá)到30mhz甚至40mhz。指令執(zhí)行周期減到數(shù)十微秒。存儲(chǔ)器容量ram發(fā)展到1

4、k、2k,ro m發(fā)展到32k、64k; 增加控制功能,向外部接口延伸。把原屬外圍芯片的功能集成到本芯片內(nèi)。現(xiàn)今的單片機(jī)已發(fā)展到在一塊含有cpu的芯片上,除嵌入ram、rom存儲(chǔ)器和io接口外,還有ad、pwm、u art、timercounter、dma、watchdog、serial port、sensor、driver、還有顯示驅(qū)動(dòng)、鍵盤控制、函數(shù)發(fā)生器、比較器等,構(gòu)成一個(gè)完整的功能強(qiáng)的計(jì)算機(jī)應(yīng)用系統(tǒng); 低功耗。供電電壓從5v降到3v、2v甚至1v左右。工作電流從ma級(jí)降到a級(jí)。在生產(chǎn)工藝上以cmos代替nmos,并向hcmos過渡; 應(yīng)用軟件配套。提供了軟件庫,包括標(biāo)準(zhǔn)應(yīng)用軟件,示范設(shè)

5、計(jì)方法。使用戶開發(fā)單片機(jī)應(yīng)用系統(tǒng)時(shí)更快速、方便。使有可能做到用一周時(shí)間開發(fā)一個(gè)新的應(yīng)用產(chǎn)品; 系統(tǒng)擴(kuò)展與配置。有供擴(kuò)展外部電路用的三總線結(jié)構(gòu)db、ab、cb,以方便構(gòu)成各種應(yīng)用系統(tǒng)。根據(jù)單片機(jī)網(wǎng)絡(luò)系統(tǒng)、多機(jī)系統(tǒng)的特點(diǎn)專門開發(fā)出單片機(jī)串行總線。此外,還特別配置有傳感器,人機(jī)對(duì)話 、網(wǎng)絡(luò)多通道等接口,以便構(gòu)成網(wǎng)絡(luò)和多機(jī)系統(tǒng)。目前單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒有單片機(jī)的蹤跡全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開單片機(jī)。更不用說自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、。導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工

6、業(yè)自動(dòng)化過程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能ic卡,民用豪華轎車的安醫(yī)療器械以及各種智能機(jī)械了。因此,單片機(jī)的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的科學(xué)家、工程師。單片機(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域。第二章 總體方案設(shè)計(jì)2.1 課題設(shè)計(jì)的意義 一:消化與鞏固單片機(jī)原理及接口技術(shù)課程所學(xué)的知識(shí)。 一切問題來源于書本,在做課題的時(shí)候,有很多的問題都需要在課本中找到答案,這就使得把這學(xué)期的單片機(jī)原理及接口技術(shù)有了一次系統(tǒng)的復(fù)習(xí),對(duì)所學(xué)的知識(shí)進(jìn)行了鞏固與消化。 二:理論聯(lián)系實(shí)際,用理論知識(shí)解決實(shí)際的問題。 三:培養(yǎng)設(shè)計(jì)能力,

7、初步掌握設(shè)計(jì)的步驟和方法。 四:設(shè)計(jì)一個(gè)具有一定功能的溫度檢測(cè)系統(tǒng),該系統(tǒng)上電或按鍵復(fù)位后監(jiān)測(cè)準(zhǔn)備狀態(tài),按監(jiān)測(cè)啟動(dòng)鍵,系統(tǒng)開始監(jiān)測(cè)溫度,并將溫度通過串行口方式傳送給計(jì)算機(jī),按下停止鍵,系統(tǒng)停止監(jiān)測(cè)。要求使用ds18b20監(jiān)測(cè)溫度,有上電復(fù)位和按鍵復(fù)位,要有聲光報(bào)警。2.2 系統(tǒng)整體硬件電路 2.2.1 芯片介紹本次設(shè)計(jì)一共用到了以下幾個(gè)芯片:80c51、ds18b20、74ls138、led數(shù)碼管顯示器。 80c51的介紹:mcs-51系列單片機(jī)的硬件結(jié)構(gòu)基本相同,主要區(qū)別在于芯片上rom的形式和配置。8051的基本結(jié)構(gòu)由:1個(gè)8位的cpu、1個(gè)片內(nèi)時(shí)鐘振蕩器、4kb的片內(nèi)程序存儲(chǔ)器、128個(gè)

8、字節(jié)的片內(nèi)數(shù)據(jù)存儲(chǔ)器、4個(gè)并行的i/o口,具有32個(gè)雙向的、可獨(dú)立操作的i/o線、2個(gè)16位的定時(shí)/計(jì)數(shù)器、1個(gè)全雙工的串行口、5個(gè)中斷源,可設(shè)置成2個(gè)優(yōu)先級(jí)、21個(gè)特殊功能寄存器、具有很強(qiáng)的布爾處理功能有機(jī)結(jié)合在一起,共有40 個(gè)引腳。 ds-18b20 數(shù)字溫度傳感器的介紹:ds18b20可組網(wǎng)數(shù)字溫度傳感器芯片封裝而成,具有耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。獨(dú)特的單線接口方式,ds18b20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與ds18b20的雙向通訊。 測(cè)溫范圍 55+125,固有測(cè)溫分辨率0.5,支持多點(diǎn)組網(wǎng)功能,多個(gè)ds

9、18b20可以并聯(lián)在唯一的三線上,最多只能并聯(lián)8個(gè),實(shí)現(xiàn)多點(diǎn)測(cè)溫,如果數(shù)量過多,會(huì)使供電電源電壓過低,從而造成信號(hào)傳輸?shù)牟环€(wěn)定。ds18b20數(shù)字溫度計(jì)提供9位二進(jìn)制溫度讀數(shù),指示器件的溫度,信息經(jīng)過單線接口送入bs1820,因此從主機(jī)cpu到ds1820僅需一條線盒地線,ds1820的電源可以由數(shù)據(jù)線本身提供而不需要外部電源。74ls138的介紹:74ls138是一種常用的3-8譯碼器芯片。其中,a、b、c為數(shù)據(jù)輸入端,/g2a.、/g2b、和g1為數(shù)據(jù)輸入允許端,/yo-/y7為譯碼器的輸出端,低電平有效,顯然,當(dāng)輸入c、b和a的狀態(tài)確定時(shí),譯碼器輸出/y0y7只有1個(gè)為低電平,其余為高電

10、平。 led數(shù)碼顯示器的介紹:led數(shù)碼顯示管是單片機(jī)應(yīng)用產(chǎn)品中常用的廉價(jià)輸出設(shè)備,它是由若干個(gè)發(fā)光二極管組成顯示字段,當(dāng)二極管導(dǎo)通時(shí),相應(yīng)的一個(gè)點(diǎn)或一個(gè)筆畫發(fā)光,就能顯示出各種字符,常用的8段led顯示ag和dp為顯示字段控制端。2.2.2硬件電路的描述及設(shè)計(jì) 二 硬件電路的描述1. 溫度采集系統(tǒng)功能說明及總體方案的介紹 (1)溫度測(cè)量功能 利用ds18b20數(shù)字溫度傳感器實(shí)現(xiàn)對(duì)溫度進(jìn)行精確測(cè)量,是溫度值顯示在數(shù)碼管上。 (2)溫度采集功能 利用ds18b20數(shù)字傳感器對(duì)溫度進(jìn)行采集,單片機(jī)作為控制器件,數(shù)據(jù)通過串行口傳至計(jì)算機(jī),進(jìn)行溫度的采集。 (3)系統(tǒng)工作流程 附圖一 (4)總體方案的

11、介紹 利用ds18b20對(duì)溫度進(jìn)行下采集,通過單片機(jī)的處理,在led上顯示出數(shù)據(jù),利用兩個(gè)開關(guān)控制,開始鍵按下,開始測(cè)試,停止按鍵,按下后停止檢測(cè),數(shù)碼管顯示最近一次檢測(cè)值。超過60度,聲光報(bào)警。2 繪制硬件電路圖, 3 溫度檢測(cè)系統(tǒng)的原件清單器件名稱數(shù)量80c51單片機(jī)1個(gè)ds18b201個(gè)74ls1381個(gè)led數(shù)碼管3個(gè)蜂鳴器1個(gè)二極管1個(gè)電容若干電阻若干開關(guān)若干4 詳細(xì)介紹溫度檢測(cè)系統(tǒng)電路主要部分的工作原理(1) 單片機(jī)型號(hào)的選擇及引腳的工作情況 本設(shè)計(jì)用到了80c51共有40個(gè)引腳,其中用到的引腳有:控制引腳、reset、/ea、p0、p1、p2口,還用到了xtal1、和xtal2的

12、晶整信號(hào)的輸入、輸出引腳。 reset引腳:復(fù)位信號(hào),在reset引腳上保持2個(gè)機(jī)器周期以上的高電平,單片機(jī)復(fù)位,通過按鍵上電復(fù)位電路輸入信號(hào),控制單片機(jī)。 /ea引腳:內(nèi)外程序存儲(chǔ)器選擇控制端,/ea接高電平,cpu對(duì)程序存儲(chǔ)器的操作從單片機(jī)內(nèi)部程序存儲(chǔ)器開始,并可延伸到單片機(jī)的外部程序存儲(chǔ)器。 p0口引腳:8位雙向的三態(tài)i/o口,單片機(jī)有外部擴(kuò)展時(shí),作為低8位地址線和數(shù)據(jù)總線使用,可以驅(qū)動(dòng)8個(gè)ttl負(fù)載,在設(shè)計(jì)中p0.0和p0.1控制開關(guān)k1和k2,p0.2、p0.3、p0.4控制74ls138譯碼器的選通。 p1口引腳:8位準(zhǔn)雙向i/o口,可以驅(qū)動(dòng)4個(gè)ttl負(fù)載,在設(shè)計(jì)中p1.0接的是g

13、nd接地引腳,p1.1和p1.2接的是聲光報(bào)警器,p1.3接的是ds18b20的溫度檢測(cè)器。 p2口引腳:8位準(zhǔn)雙向的i/o口,當(dāng)單片機(jī)有外部擴(kuò)展時(shí),作為高8位的地址線使用,可以驅(qū)動(dòng)4個(gè)ttl負(fù)載,設(shè)計(jì)中用p2口控制三個(gè)共陰級(jí)的led。 xtal1、xtal2引腳:晶體振蕩器信號(hào)輸入輸出引腳,用來控制設(shè)計(jì)中的晶振電路。 (2)復(fù)位電路的原理復(fù)位電路的目的是產(chǎn)生持續(xù)時(shí)間小于2個(gè)機(jī)器周期的高電平。通常,在設(shè)計(jì)時(shí),使復(fù)位電路在單片機(jī)上能產(chǎn)生110ms的高電平,保證可靠的實(shí)現(xiàn)復(fù)位。 按鍵開關(guān)及上電自動(dòng)復(fù)位電路:上圖為按鍵開關(guān)及上電自動(dòng)復(fù)位電路,當(dāng)按鍵開關(guān)s按下時(shí),+5v電源通過s接通電阻r和r1構(gòu)成電

14、路網(wǎng)咯,設(shè)計(jì)時(shí)使電阻r1上的分壓達(dá)到高電平的值,就可以是單片機(jī)復(fù)位,因?yàn)榘磩?dòng)按鈕開關(guān)使其閉合的時(shí)間遠(yuǎn)遠(yuǎn)大于單片機(jī)復(fù)位隨需要的時(shí)間,通常把上電復(fù)位和按鈕開關(guān)復(fù)位電路綜合在一起,這樣就可以在每一次電源接通時(shí)系統(tǒng)復(fù)位,也可以滿足強(qiáng)制復(fù)位的要求,c取22uf,r取1000,r1取200左右。 (3)74ls138譯碼器的工作原理 原理:當(dāng)一個(gè)選通端g為高電平,另外兩個(gè)選通端/g2a、/g2b為低電平時(shí)可以將地址端(a、b、c)的二進(jìn)制編碼在一個(gè)對(duì)應(yīng)的輸出端以低電平輸出。其真值表如下:/g/g2a/g2bcba/y0/y1/y2100000011100001101100010110當(dāng)c、b、a輸出為00

15、0時(shí),74ls138選中l(wèi)ed1,led1管發(fā)亮,輸出001時(shí),led2管發(fā)亮,輸出為010時(shí),led3管發(fā)亮。 (4)晶振電路 利用單片機(jī)芯片上提供的反相放大器電路,在xtal1和xtal2引腳之間外接振蕩源構(gòu)成單片機(jī)的時(shí)鐘電路,有振蕩源osc和 電容c1和c2構(gòu)成了并聯(lián)諧振回路作為定時(shí)元件,振蕩源qsc晶體振蕩器或陶瓷振蕩器,頻率為1.212mhz,電容c1、c2為30pf,起頻率微調(diào)作用,在單片機(jī)的應(yīng)用系統(tǒng)中,晶振的頻率越高,單片機(jī)的運(yùn)行速度越快。(5)聲光報(bào)警系統(tǒng) 聲光報(bào)警器的主要源器件是由感應(yīng)器,發(fā)光二極管、蜂鳴器等構(gòu)成整個(gè)報(bào)警器,當(dāng)溫度超過60是,就自動(dòng)報(bào)警。 (6)ds18b20

16、溫度檢測(cè)器的原理 ds18b20工作過程中的協(xié)議如下:初始化,rom操作指令,存儲(chǔ)器操作指令,數(shù)據(jù)處理。 多路測(cè)量,當(dāng)每一片ds18b20在其rom中都存有其唯一的48位系列號(hào),在出廠前,與寫入片內(nèi)rom,主機(jī)在進(jìn)入操作程序前必須接入1820用讀,rom命令將1820的系列號(hào)讀出并登陸,在1820組成的測(cè)溫系統(tǒng)中,主機(jī)在發(fā)出跳過rom命令之后,再發(fā)出系統(tǒng)的溫度轉(zhuǎn)換啟動(dòng)碼,就可以實(shí)現(xiàn)所有1820的統(tǒng)一轉(zhuǎn)換,在經(jīng)過一秒后,就可以用很少的時(shí)間逐一讀取。 第三章:系統(tǒng)軟件算法設(shè)計(jì)由于匯編語言學(xué)的時(shí)間太短,所以用c語言。望老師諒解!#include #include #include #include

17、#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned long sbit key1 = p11; /按下開始檢測(cè)sbit key2 = p13; /按下顯示sbit le = p23; sbit oe = p24; sbit beep=p16;sbit dq=p17; /ds18b20數(shù)據(jù)i/o口#define command_unknow 8 /不可識(shí)別的返回類型/= / 基本的常用常量 /= #define true 1 /正確#define false 0 /錯(cuò)誤unsign

18、ed char num;uchar code dispcode= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0xff,0x6f; /共陰極顯示代碼uchar disp_buf3=0x00,0x00,0x00; /顯示數(shù)據(jù)緩沖區(qū)uchar dp0=0,dp1=0,dp2=0;#define nop _nop_()uchar temp_h,temp_l; /*溫度值變量*/uchar flag1; /*正負(fù)標(biāo)志位*/sbit tem_in=p17; /*溫度讀取端口1*/uchar tem_h,tem_l; /用于存儲(chǔ)溫度轉(zhuǎn)換值高8位和低8位bit fla

19、g=0; /正、負(fù)溫度值符號(hào)標(biāo)志位,0為正,1為負(fù)void delay1ms(uchar x); /延時(shí)約1ms程序/*函數(shù)聲明*/void delay(int us); /延時(shí)函數(shù)bit init_ds18b20(void); /ds18b20初始化函數(shù)uchar read_bit(void); /ds18b20讀一個(gè)字節(jié)void write_bit(uchar val_bit); /ds18b20寫一個(gè)字節(jié)uchar read_byte(void); /ds18b20讀字節(jié)函數(shù)void write_byte(uchar com); /ds18b20寫字節(jié)函數(shù)int readtemperat

20、ure(); /ds18b20讀取溫度void display_temp(void); /顯示函數(shù)void adj_dat(); /顯示字節(jié)調(diào)整函數(shù)void l_delay(int n); /延時(shí)函數(shù)void delay(unsigned int count) unsigned int i; while(count) i=200; while(i0)i-; count-; void delay_us(uchar n) uchar i; i=0; while(i0)i-; tem_in=1; i=4; while(i0)i-;/*=函數(shù)功能:向b20寫一字節(jié)入口參數(shù):待寫數(shù)據(jù) 說 明 :=*/v

21、oid tmpwrite(unsigned char dat) unsigned int i; unsigned char j; bit testb; for(j=1;j1; if(testb) tem_in=0;i+;i+; tem_in=1; i=8;while(i0)i-; else tem_in=0; i=8;while(i0)i-; tem_in=1;i+;i+; /*=函數(shù)功能:直接讀一字節(jié)程序入口參數(shù):無 說 明 :返回結(jié)果=*/uchar readbyte(void) uchar i,k; i=8; k=0; while(i-) tem_in=1; delay_us(1); t

22、em_in=0; k=k1; tem_in=1; nop; if(tem_in)k |= 0x80; delay_us(4); return(k);void tmpchange(void) dsreset(); /*復(fù)位*/ delay(1); tmpwrite(0xcc); /跳過序列號(hào)命令 tmpwrite(0x44); /轉(zhuǎn)換命令 delay(1);void tmp(void) float dis;/ uchar tempbuf; dsreset(); delay(1); tmpwrite(0xcc); tmpwrite(0xbe); temp_l=readbyte(); /低位在前 t

23、emp_h=readbyte(); /高位在后 flag1=temp_h&0xf8; if(flag1) temp_h=temp_h; if(temp_l=0)temp_h+; /若低位全為且溫度為負(fù),取補(bǔ)時(shí)就要向高位進(jìn) temp_l=temp_l+1; dis=(temp_h*256+temp_l)/16;if(int)dis60)disp_buf0=dispcode(int)dis%1000/100; /顯示百位 disp_buf1=dispcode(int)dis%100/10; /顯示十位 disp_buf2=dispcode(int)dis%10; /顯示個(gè)位/*溫度檢測(cè)*/void

24、 tmp_test(void) float dis; dsreset(); delay(1); tmpwrite(0xcc); tmpwrite(0xbe); temp_l=readbyte(); /低位在前 temp_h=readbyte(); /高位在后 flag1=temp_h&0xf8; if(flag1) temp_h=temp_h; if(temp_l=0)temp_h+; /若低位全為且溫度為負(fù),取補(bǔ)時(shí)就要向高位進(jìn) temp_l=temp_l+1; dis=(temp_h*256+temp_l)/16;if(dis60)/超出溫度極限報(bào)警beep=1;else beep=0;/*

25、主程序*/void main (void) dp0=dispcode0;dp1=dispcode0;dp2=dispcode0;/初始化數(shù)碼管顯示0delay1ms(2000); /延時(shí)2swhile(1)tmpchange(); delay(10);tmp_test();/檢測(cè)溫度并報(bào)警if(!key1)delay1ms(10); /去抖動(dòng)tmpchange(); / 啟動(dòng)溫度轉(zhuǎn)換delay(10);/采集溫度 if(!key2) delay1ms(10); dp0=disp_buf0;dp1=disp_buf1;dp2=disp_buf2;/將采集溫度賦給顯示變量 /分段顯示數(shù)碼管數(shù)字p2

26、=0x00;p0 =dp0; delay1ms(1); p2=0x01;p0 =dp1; delay1ms(1); p2=0x02;p0 =dp2; delay1ms(1); /*延時(shí)函數(shù)*/void l_delay(int n) int i,j; for(i=0;in;i+) for(j=0;j1000;j+);/*ds18b20復(fù)位函數(shù)*/bit init_ds18b20(void) bit res; dq=0; /拉低dq線 delay(29); /延時(shí)480us dq=1; /dq線置高 delay(10); /延時(shí) res=dq; /讀取復(fù)位響應(yīng)信號(hào) delay(10); retur

27、n(res); /返回響應(yīng)值/*ds18b20讀位函數(shù)*/uchar read_bit(void) uchar i; dq=0; /拉低dq線 dq=1; /dq線置高 for(i=0;i3;i+); /延時(shí)15us return(dq); /返回當(dāng)前讀取值/*ds18b20寫位函數(shù)*/void write_bit(uchar val_bit) dq=0; /拉低dq if(val_bit=1)dq=1; /從dq線發(fā)送1 delay(5); /延時(shí) dq=1;/*ds18b20讀字節(jié)函數(shù)*/uchar read_byte(void) uchar i; uchar temp=0; for(i=

28、0;i8;i+) if(read_bit()temp|=0x01i; /向temp寫入讀取位 delay(6); return(temp); /返回讀取字節(jié)/*ds18b20寫字節(jié)函數(shù)*/void write_byte(uchar com) uchar i,temp; for(i=0;ii; /右移i次取低位發(fā)送 temp&=0x01; write_bit(temp); delay(5);/*溫度值正負(fù)判斷程序*/uint get_tem(uchar dath,uchar datl) uint temp=0,temp_h=0,temp_l; temp_h=(uint)dath; temp=te

29、mp_h&0x00ff; temp_l=(uint)datl; temp_l&=0x00ff; temp=(temp8)|temp_l; /去掉符號(hào)值后合并成16位數(shù)據(jù) if(dath&0x80)=0x80) flag=1; temp=temp+1; /負(fù)數(shù)時(shí)求補(bǔ) else flag=0; return(temp);/*溫度讀取函數(shù)*/int readtemperature() uint temp=0; float temp1=0; while(!(init_ds18b20(); write_byte(0xcc); /跳過讀序號(hào)列號(hào)的操作 write_byte(0x44); /啟動(dòng)溫度轉(zhuǎn)換 while(!(init_ds18b2

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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)論