基于單片機(jī)的溫度測(cè)量警報(bào)器秒表_第1頁(yè)
基于單片機(jī)的溫度測(cè)量警報(bào)器秒表_第2頁(yè)
基于單片機(jī)的溫度測(cè)量警報(bào)器秒表_第3頁(yè)
基于單片機(jī)的溫度測(cè)量警報(bào)器秒表_第4頁(yè)
基于單片機(jī)的溫度測(cè)量警報(bào)器秒表_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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、 基于單片機(jī)的溫度測(cè)量報(bào)警器+秒表 華碧摘 要溫度是日常生活中不可缺少的物理量,溫度在各個(gè)領(lǐng)域都有積極的意義。很多行業(yè)中以與日常生活中都有大量的用電加熱設(shè)備,如用于加熱處理的加熱熱水器,用于洗浴的電熱水器與各種不同用途的溫度箱等,采用單片機(jī)對(duì)它們進(jìn)行檢測(cè)具有檢測(cè)方便、簡(jiǎn)單、靈活性大等特點(diǎn),而且還可以大幅提高被控系統(tǒng)的性能,從而能被大大提高產(chǎn)品的質(zhì)量。因此,智能化溫度檢測(cè)技術(shù)正被廣泛地應(yīng)用。本溫度設(shè)計(jì)采用現(xiàn)在流行的STC89C52單片機(jī)為檢測(cè)器,用DS18B20檢測(cè)的方法,再配以其他電路對(duì)熱水器的水溫進(jìn)行檢測(cè)。關(guān)鍵詞:STC89C52;DS18B20;42 / 27緒論研究背景溫度是人類(lèi)生產(chǎn)生活

2、中非常關(guān)鍵的一項(xiàng)物理量,溫度檢測(cè)系統(tǒng)廣泛應(yīng)用于社會(huì)生活的各個(gè)領(lǐng)域 ,如家電、汽車(chē)、材料、電力電子等 。溫度檢測(cè)是工業(yè)生產(chǎn)過(guò)程中和日常生活中經(jīng)常遇到的檢測(cè)問(wèn)題,人們需要對(duì)各種加熱爐、熱處理爐、家用熱水器中溫度進(jìn)行監(jiān)測(cè)。特別是在冶金 、化工、建材、食品、機(jī)械、石油等工業(yè)中,具有舉足重輕的作用,因而設(shè)計(jì)一種較為理想的溫度檢測(cè)系統(tǒng)是非常有價(jià)值的。工業(yè)生產(chǎn)中溫度檢測(cè)具有單向性、時(shí)滯性、大慣性和時(shí)變性的特征,同時(shí)要實(shí)現(xiàn)溫度檢測(cè)的快速性和準(zhǔn)確性,對(duì)于提高產(chǎn)品質(zhì)量具有很重要的現(xiàn)實(shí)意義。對(duì)于不同場(chǎng)所、不同工藝、所需溫度高低圍不同、精度不同,則采用的測(cè)溫元件、測(cè)溫方法也將不同;產(chǎn)品工藝不同、檢測(cè)溫度的精度不同、時(shí)

3、效不同,則對(duì)數(shù)據(jù)采集的精度和采用的檢測(cè)算法也不同。因而,對(duì)溫度的測(cè)量方法要多種多樣。隨著電子技術(shù)和微型計(jì)算機(jī)的迅速發(fā)展,微機(jī)測(cè)量和檢測(cè)技術(shù)也得到了迅速的發(fā)展和廣泛的應(yīng)用。利用微機(jī)對(duì)溫度進(jìn)行測(cè)量的技術(shù),也便隨之而生,并得到日益發(fā)展和完善,越來(lái)越顯示出其優(yōu)越性。研究容本設(shè)計(jì)的容是溫度檢測(cè)系統(tǒng),檢測(cè)對(duì)象是空氣的溫度。溫度檢測(cè)在日常生活與工業(yè)領(lǐng)域應(yīng)用相當(dāng)廣泛,比如電熱水器,孵化器,發(fā)酵缸等場(chǎng)所的溫度檢測(cè)。這些場(chǎng)合都需要有一種能夠比較精確快速實(shí)現(xiàn)所需溫度的測(cè)量器。本文設(shè)計(jì)的目的就是實(shí)現(xiàn)一種可連續(xù)高精度調(diào)溫的溫度測(cè)量器。需要實(shí)現(xiàn)以下功能:(1)調(diào)節(jié)設(shè)置溫度。(2)通過(guò)實(shí)際溫度反饋快速準(zhǔn)確的實(shí)現(xiàn)所需溫度。(

4、3)在液晶屏幕中顯示溫度值。(4)超溫報(bào)警。(5)檢測(cè)溫度的同時(shí)進(jìn)行計(jì)時(shí)。1. 系統(tǒng)方案論證與設(shè)計(jì)1.1 系統(tǒng)方案設(shè)計(jì)對(duì)于空氣溫度測(cè)量系統(tǒng)來(lái)說(shuō)方案有很多:如采用單片機(jī)檢測(cè)、PLC檢測(cè)、PC機(jī)檢測(cè)等。利用單片機(jī)實(shí)現(xiàn)溫度測(cè)量利用單片機(jī)實(shí)現(xiàn)空氣氣溫的檢測(cè),系統(tǒng)主要包括現(xiàn)場(chǎng)溫度采集、溫度顯示、報(bào)警裝置和以單片機(jī)stc89c52作為微處理器。溫度采集電路以數(shù)字形式將現(xiàn)場(chǎng)溫度傳至單片機(jī),單片機(jī)結(jié)合現(xiàn)場(chǎng)溫度與用戶設(shè)定的目標(biāo)溫度,輸送到lcd顯示。1.2系統(tǒng)方案論證用單片機(jī)作為檢測(cè)器,外圍電路直接連接到單片機(jī)的檢測(cè)方法具有靈活性高,易擴(kuò)展的優(yōu)勢(shì),并且現(xiàn)在的單片機(jī)一般都具有通信接口能夠?qū)崿F(xiàn)與外檢測(cè)器通信,包括P

5、C機(jī)。單片機(jī)經(jīng)過(guò)發(fā)展其可靠性已得到大家的認(rèn)可,并且經(jīng)濟(jì)價(jià)格便宜,具有大規(guī)模應(yīng)用的條件。更重要的是單片機(jī)體積小,能夠直接放置在需要檢測(cè)的裝置中去,不用另外設(shè)計(jì)安裝空間。1.3 系統(tǒng)方案實(shí)現(xiàn)本文選用單片機(jī)作為檢測(cè)器,但要實(shí)現(xiàn)所需的溫度檢測(cè)的功能我們還需要另外的電子元器件組成電路,并發(fā)送和接受相應(yīng)的電信號(hào)來(lái)組成一個(gè)完整的檢測(cè)系統(tǒng)。所需的電路模塊如圖1-1所示:?jiǎn)纹瑱C(jī)數(shù)據(jù)顯示電源超溫報(bào)警晶振溫度傳感器被檢測(cè)系統(tǒng)執(zhí)行器圖1-1 系統(tǒng)框圖3. 硬件電路硬件合理選擇和優(yōu)化配置直接決定了空氣溫度檢測(cè)系統(tǒng)的可靠性,以與檢測(cè)效果的優(yōu)劣,根據(jù)認(rèn)真仔細(xì)的比較本文選用如下的硬件來(lái)實(shí)現(xiàn)系統(tǒng)要求的功能。3.STC89C52

6、單片機(jī)簡(jiǎn)介STC89C52是一個(gè)低電壓,高性能單片機(jī),帶有4K字節(jié)的可反復(fù)擦寫(xiě)的程序存儲(chǔ)器(PENROM)。和128字節(jié)的存取數(shù)據(jù)存儲(chǔ)器(RAM),這種器件采用ATMEL公司的高密度、不容易丟失存儲(chǔ)技術(shù)生產(chǎn),并且能夠與MCS-51系列的單片機(jī)兼容。片含有8位中央處理器和閃爍存儲(chǔ)單元,所以功能較強(qiáng)的STC89C52單片機(jī)能夠提供一種安全可靠的檢測(cè)方案,而被應(yīng)用到檢測(cè)領(lǐng)域中。STC89C52單片機(jī)的引腳如圖3-1所示:圖3-1 STC89C52STC89C52單片機(jī)主要功能部件包括中央處理器、片數(shù)據(jù)存儲(chǔ)器、片程序存儲(chǔ)器、震蕩電路、電源與復(fù)位電路并行I/O接口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)組成。簡(jiǎn)要介紹

7、一下本文用到的一些部件3.1.1 中央處理器中央處理器(CPU)是STC89C52單片機(jī)的核心部件,其字長(zhǎng)為8位,主要由運(yùn)算器和檢測(cè)器等部件組成。運(yùn)算器用于實(shí)現(xiàn)對(duì)操作數(shù)的算術(shù)邏輯運(yùn)算和位操作。檢測(cè)器是單片機(jī)的智慧檢測(cè)部件,檢測(cè)器的主要任務(wù)是識(shí)別指令,并根據(jù)指令的性質(zhì)檢測(cè)單片機(jī)各功能部件,從而保證單片機(jī)各部分能自動(dòng)而協(xié)調(diào)地工作。3.1.2 片數(shù)據(jù)存儲(chǔ)器89c52單片機(jī)部數(shù)據(jù)存儲(chǔ)器容量?jī)H為256B,與片外數(shù)據(jù)存儲(chǔ)器空間(64K)相獨(dú)立,采用8位地址碼尋址。其中低地址空間的128B(007FH)供用戶使用,可按規(guī)定規(guī)劃為工作寄存區(qū)、堆棧區(qū)、位尋址數(shù)據(jù)存儲(chǔ)器區(qū)和通用數(shù)據(jù)存儲(chǔ)器區(qū);高地址空間的128B(

8、80FFH)為特殊功能寄存器(FSR),實(shí)際中只用到26B,其地址分布并不連續(xù)。3.1.3 片程序存儲(chǔ)區(qū)89C52單片機(jī)部程序存儲(chǔ)器容量為4KB,分布在整個(gè)64K程序存儲(chǔ)器空間的低地址空間.3.1.4 振蕩器和時(shí)序電路89C52單片機(jī)部有震蕩電路,只需外接石英晶體振蕩器和頻率微調(diào)電容即可產(chǎn)生024MHz震蕩脈沖信號(hào)(震蕩周期為單片機(jī)工作的最小時(shí)間單位),震蕩脈沖經(jīng)定時(shí)電路處理,產(chǎn)生CPU工作的各種時(shí)序信號(hào)。3.1.5 電源與復(fù)位89C52單片機(jī)采用DC5V供電工作電流為30mA左右,在掉電方式下,電流消耗可大大降低。89C52單片機(jī)需要外部電路提供上電或手動(dòng)復(fù)位信號(hào)(高電平脈沖),使單片機(jī)各部

9、件回到初始狀態(tài)。3.1.6 并行I/O端口89C52單片機(jī)有四個(gè)8位并行I/O(輸入/輸出)端口,每個(gè)端口均是準(zhǔn)雙向口,助記符分別為P0、P1、P2、P3,通過(guò)32個(gè)引腳將各I/O端口線全部引出,與外部建立聯(lián)絡(luò)。外圍電路的連接就主要通過(guò)這些I/O口實(shí)現(xiàn)與單片機(jī)的數(shù)據(jù)傳輸。3.1.7 定時(shí)/計(jì)數(shù)器在單片機(jī)實(shí)際應(yīng)用中,往往需要精確的定時(shí)或?qū)ν獠渴录M(jìn)行計(jì)數(shù)。89C52單片機(jī)部設(shè)置的兩個(gè)定時(shí)/計(jì)時(shí)器為此提供了便利。兩個(gè)定時(shí)/計(jì)數(shù)器的助記符分別為T(mén)0、T1,可以設(shè)置為計(jì)數(shù)方式,實(shí)現(xiàn)對(duì)外部事件的計(jì)數(shù);也可以設(shè)置為定時(shí)方式,實(shí)現(xiàn)精確定時(shí)。3.1.8 中斷系統(tǒng)89C52單片機(jī)采用向量中斷邏輯,可以處理5個(gè)中

10、斷源的中斷請(qǐng)求,并依據(jù)中斷優(yōu)先級(jí)安排進(jìn)入相應(yīng)的中斷服務(wù)程序。5個(gè)中斷源的中斷向量為固定值,采用高低兩級(jí)優(yōu)先權(quán)隊(duì)列和固定優(yōu)先級(jí)相結(jié)合的管理模式。由于堆棧區(qū)容量限制,僅允許兩級(jí)中斷嵌套,即高優(yōu)先權(quán)隊(duì)列的中斷請(qǐng)求可中斷低優(yōu)先權(quán)隊(duì)列的中斷服務(wù),但同等優(yōu)先權(quán)隊(duì)列的高級(jí)別中斷不能中斷該隊(duì)列中的低優(yōu)先級(jí)中斷服務(wù)。3.2 時(shí)鐘電路時(shí)鐘電路用于產(chǎn)生單片機(jī)工作時(shí)所必須的時(shí)鐘檢測(cè)信號(hào)。89C52單片機(jī)的部電路在時(shí)鐘信號(hào)檢測(cè)下,嚴(yán)格地按照時(shí)序執(zhí)行指令進(jìn)行工作。單片機(jī)各功能部件的運(yùn)行都是以時(shí)鐘檢測(cè)信號(hào)為基準(zhǔn)工作的。因此,時(shí)鐘頻率直接影響單片機(jī)的速度,時(shí)鐘電路的質(zhì)量也直接影響單片機(jī)系統(tǒng)的穩(wěn)定運(yùn)行。常用的時(shí)鐘電路設(shè)計(jì)有兩種

11、方式,一種是部時(shí)鐘方式,另一種為外部時(shí)鐘方式。部時(shí)鐘方式受到的影響較少,能夠提供更加穩(wěn)定的信號(hào),所以本文采用部時(shí)鐘方式。部時(shí)鐘方式的電路連接圖3-2所示:圖3-2 晶振硬件連接電路中的電容C1和C2典型值通常選擇為30pF左右。對(duì)外接電容的值雖然沒(méi)有嚴(yán)格的要求,但電容的大小會(huì)影響振蕩器頻率的高低、振蕩器的穩(wěn)定性和起振的快速性。晶振的震蕩頻率的圍通常是在1.2MHz12MHz之間。但時(shí)鐘頻率越高單片機(jī)的運(yùn)行速度越快,但對(duì)電子器件的要求越高。考慮到所需的定時(shí)時(shí)間以與擴(kuò)展和PC機(jī)的通信,本文選用11.0592MHz的頻率3.3 單總線數(shù)字溫度傳感器DS18B20單線總線特點(diǎn)單總線即只有一根數(shù)據(jù)線,系

12、統(tǒng)中的數(shù)據(jù)交換,控制都由這根線完成。單總線通常要求外接一個(gè)約為 4.7K10K 的上拉電阻,這樣,當(dāng)總線閑置時(shí)其狀態(tài)為高電平DS18B20的特點(diǎn)DS18B20 單線數(shù)字溫度傳感器,即“一線器件”,其具有獨(dú)特的優(yōu)點(diǎn):     ( 1 )采用單總線的接口方式與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與 DS18B20 的雙向通訊。單總線具有經(jīng)濟(jì)性好,抗干擾能力強(qiáng),適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,使用方便等優(yōu)點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念。     ( 2 )測(cè)量溫度圍寬,測(cè)量精度高 D

13、S18B20 的測(cè)量圍為 -55 + 125 ;在 -10+ 85°C 圍,精度為± 0.5°C 。  ( 3 )在使用中不需要任何外圍元件。     ( 4 )持多點(diǎn)組網(wǎng)功能多個(gè) DS18B20 可以并聯(lián)在惟一的單線上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。    ( 5 )供電方式靈活 DS18B20 可以通過(guò)部寄生電路從數(shù)據(jù)線上獲取電源。因此,當(dāng)數(shù)據(jù)線上的時(shí)序滿足一定的要求時(shí),可以不接外部電源,從而使系統(tǒng)結(jié)構(gòu)更趨簡(jiǎn)單,可靠性更高。( 6 )測(cè)量參數(shù)可配置 DS18B20 的測(cè)量分辨率可通過(guò)程序設(shè)定 91

14、2 位( 7 )負(fù)壓特性電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作。( 8 )掉電保護(hù)功能 DS18B20 部含有 EEPROM ,在系統(tǒng)掉電以后,它仍可保存分辨率與報(bào)警溫度的設(shè)定值。   DS18B20 具有體積更小、適用電壓更寬、更經(jīng)濟(jì)、可選更小的封裝方式,更寬的電壓適用圍,適合于構(gòu)建自己的經(jīng)濟(jì)的測(cè)溫系統(tǒng),因此也就被設(shè)計(jì)者們所青睞。DS18B20部結(jié)構(gòu)如圖所示,主要由4部分組成:64 位ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個(gè)DS18B20的64

15、位序列號(hào)均不一樣。64位ROM的排的循環(huán)冗余校驗(yàn)碼(CRC=X8X5X41)。 ROM的作用是使每一個(gè)DS18B20都各不一樣,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。DS18B20部構(gòu)成n DS18B20 部結(jié)構(gòu)主要由四部分組成: 64 位光刻 ROM 、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器 TH 和 TL 、配置寄存器。n      光刻 ROM 中的 64 位序列號(hào)是出廠前被光刻好的,它可以看作是該 DS18B20 的地址序列碼。 64 位光刻 ROM 的排列是:開(kāi)始 8 位(地址: 28H )是產(chǎn)品類(lèi)型標(biāo)號(hào),接著的 48 位是該 DS

16、18B20 自身的序列號(hào),并且每個(gè) DS18B20 的序列號(hào)都不一樣,因此它可以看作是該 DS18B20 的地址序列碼;最后 8 位則是前面 56 位的循環(huán)冗余校驗(yàn)碼( CRC=X8+X5+X4+1 )。由于每一個(gè) DS18B20 的 ROM 數(shù)據(jù)都各不一樣,因此微控制器就可以通過(guò)單總線對(duì)多個(gè) DS18B20 進(jìn)行尋址,從而實(shí)現(xiàn)一根總線上掛接多個(gè) DS18B20 的目的。3.8 報(bào)警電路當(dāng)檢測(cè)到實(shí)際溫度大于設(shè)置溫度32時(shí),可認(rèn)為空氣溫度過(guò)高,此時(shí)應(yīng)發(fā)出報(bào)警信號(hào),提醒人們注意。報(bào)警信號(hào)輸出端定義為P2.4腳,連接電路如圖3-13所示:圖3-13 報(bào)警電路(注意:圖中的平1.2應(yīng)為2.4)發(fā)聲元件

17、采用最常見(jiàn)的有源蜂鳴器,兩端施加直流電壓時(shí)就可以發(fā)聲。三極管在電路中作用為開(kāi)關(guān)器件。蜂鳴器本質(zhì)是一個(gè)感性元件,其電流不能瞬變,因此必須有一個(gè)續(xù)留二極管提供續(xù)流,否則,在蜂鳴器兩端會(huì)產(chǎn)生幾十伏的尖峰電壓,可能損壞驅(qū)動(dòng)三極管,并干擾整個(gè)電路系統(tǒng)的其他部分。4. 軟件結(jié)構(gòu)和程序框圖系統(tǒng)的軟件由三大模塊組成:主程序模塊、功能實(shí)現(xiàn)模塊和運(yùn)算檢測(cè)器模塊4.1 主程序模塊主程序的作用為循環(huán)調(diào)用各個(gè)子模塊,通過(guò)調(diào)用各個(gè)子模塊不斷更新全局變量,然后各個(gè)子模塊使用新的變量來(lái)實(shí)現(xiàn)檢測(cè)的要求。4.2 功能實(shí)現(xiàn)模塊功能實(shí)現(xiàn)模塊按照各個(gè)檢測(cè)單元實(shí)現(xiàn)分別實(shí)現(xiàn)不同的功能,然后把個(gè)功能通過(guò)單片機(jī)聯(lián)系起來(lái)組成一個(gè)完整的能較好實(shí)現(xiàn)

18、預(yù)定功能的系統(tǒng)。4.2.3 溫度采集子模塊溫度采集模塊是用單片機(jī)采集ds18b20中的溫度數(shù)字信號(hào),然后保存在單片機(jī)中,作為檢測(cè)的依據(jù)。由于ds18b20傳輸過(guò)來(lái)的為二進(jìn)制信號(hào),一位一位的傳送到P3.4,所以要將其按權(quán)轉(zhuǎn)化為單片機(jī)能夠使用的十進(jìn)制。d示。圖4-4 讀取溫度流程圖4.2.4 顯示子模塊顯示子程序使用lcd示的方式,把設(shè)定溫度和實(shí)際溫度顯示在lcd中.圖4-5 顯示流程圖圖4-7 定時(shí)器T1流程圖結(jié)論本文通過(guò)對(duì)系統(tǒng)整體然后對(duì)每一個(gè)子模塊的詳細(xì)設(shè)計(jì),我們得到了一個(gè)穩(wěn)定可靠的空氣溫度檢測(cè)系統(tǒng)。本系統(tǒng)能夠準(zhǔn)確地檢測(cè)空氣溫度到設(shè)定的溫度,具有較好額調(diào)節(jié)功能。可能在實(shí)際工作中會(huì)出現(xiàn)或大或小的

19、檢測(cè)偏差。由于本文使用的檢測(cè)器為89C52,而這種單片機(jī)具有串口通信的功能,如果對(duì)其加上串行總線就能和外部其他的檢測(cè)器進(jìn)行通信,比如將溫度信號(hào)傳遞給PC機(jī),從PC機(jī)設(shè)置設(shè)定溫度等。而PC機(jī)能夠連接到互聯(lián)網(wǎng),這就能組成一個(gè)遠(yuǎn)程的檢測(cè)網(wǎng)絡(luò),從而組成物聯(lián)網(wǎng)一樣的檢測(cè)網(wǎng)絡(luò)。致 論文的設(shè)計(jì)過(guò)程中,我查閱了許多有關(guān)溫度檢測(cè)系統(tǒng)設(shè)計(jì)方面的文獻(xiàn)資料,使我對(duì)溫度檢測(cè)的設(shè)計(jì)和使用有了更深的認(rèn)識(shí)。從論文選題到完成論文,賴友源老師付出了大量的時(shí)間和心血,在設(shè)計(jì)過(guò)程中,賴友源老師從多方面進(jìn)行指導(dǎo)。在此,我要由衷地感同時(shí),我也要感給予我?guī)椭耐瑢W(xué),在不懂的環(huán)節(jié)為我努力探討。報(bào)告的完成,不僅是我大學(xué)知識(shí)積累的體現(xiàn),而且也是

20、機(jī)械與電子工程學(xué)院所有老師悉心教導(dǎo)的結(jié)果,感他們讓我掌握了一定的專(zhuān)業(yè)知識(shí),專(zhuān)業(yè)技能和一些為人處世的道理。最要感激父母,是他們給我學(xué)習(xí)的機(jī)會(huì),并且在學(xué)業(yè)期間給我大力支持和為我付出!參考文獻(xiàn)1 毅剛單片機(jī)原理與應(yīng)用M高等教育,20032 盧勝利單片機(jī)原理與應(yīng)用技術(shù)實(shí)踐M 機(jī)械工業(yè) ,20093 步月基于單片機(jī)的測(cè)試技術(shù)原理與應(yīng)用M 機(jī)械工業(yè) ,20074 于海生微型計(jì)算機(jī)檢測(cè)技術(shù)M第2版清華大學(xué),20095 胡壽松自動(dòng)檢測(cè)原理M第5版科學(xué),20096 夕松 汪木蘭過(guò)程檢測(cè)系統(tǒng)M科學(xué),20097 王兆安 黃俊電力電子技術(shù)M第4版 機(jī)械工業(yè),20108 振全 世鳳MATLAB語(yǔ)言與檢測(cè)系統(tǒng)仿真M 化學(xué)

21、工業(yè),20099 譚浩強(qiáng)C程序設(shè)計(jì)M第3版清華大學(xué),200510 景波PROTEL 99SE電路設(shè)計(jì)與制板M機(jī)械工業(yè),201011 曉帆 根和高精度溫度檢測(cè)J學(xué)院學(xué)報(bào),2007附錄部分程序如下:文件1:/#include <at89x51.h>/用AT89C51時(shí)就用這個(gè)頭文件#include <reg52.h>/用華邦W78E58B時(shí)必須用這個(gè)頭文件#include <absacc.h>#include <ctype.h>#include <math.h>#include <stdio.h>#include <st

22、ring.h>#include <DS18B20.h>#include <lcd.c> /液晶顯示頭文件#include <lcd-1.c> /液晶顯示頭文件/sbit DQ = P34; /定義DQ引腳為P3.4unsigned char t2,*pt;/用來(lái)存放溫度值,測(cè)溫程序就是通過(guò)這個(gè)數(shù)組與主函數(shù)通信的unsigned char TempBuffer19=0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'0'/顯示實(shí)時(shí)溫度,上電時(shí)顯示+125.00Cunsigned char TempBuffer

23、017=0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'0'/顯示溫度上下限,上電時(shí)顯示TH:+125 TL:+124Cunsigned char code dotcode4=0,25,50,75;/*因顯示分辨率為0.25,但小數(shù)運(yùn)算比較麻煩,故采用查表的方法*再將表值分離出十位和個(gè)位后送到十分位和百分位*/void covert0( unsigned char TH, unsigned char TL)/將溫度上下限轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù) if(TH>0x

24、7F) /判斷正負(fù),如果為負(fù)溫,將其轉(zhuǎn)化為其絕對(duì)值 TempBuffer03=0x2d;/ /0x2d為"-"的ASCII碼TH=TH;TH+; else TempBuffer03=0x2b;/0x2B為"+"的ASCII碼 if(TL>0x7f) TempBuffer011=0x2d;/ /0x2d為"-"的ASCII碼 TL=TL+1; else TempBuffer011=0x2b;/0x2B為"+"的ASCII碼 TempBuffer04=TH/100+0x30; /分離出TH的百十個(gè)位 if( Te

25、mpBuffer04=0x30) TempBuffer04=0xfe; /百位數(shù)消隱 TempBuffer05=(TH%100)/10+0x30;/分離出十位 TempBuffer06=(TH%100)%10+0x30; /分離出個(gè)位 TempBuffer012=TL/100+0x30; /分離出TL的百十個(gè)位 if( TempBuffer012=0x30) TempBuffer012=0xfe; /百位數(shù)消隱 TempBuffer013=(TL%100)/10+0x30;/分離出十位 TempBuffer014=(TL%100)%10+0x30; /分離出個(gè)位void covert1(voi

26、d)/將溫度轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù) unsigned char x=0x00,y=0x00; t0=*pt; pt+; t1=*pt; if(t1>0x07) /判斷正負(fù)溫度 TempBuffer10=0x2d; /0x2d為"-"的ASCII碼t1=t1; /*下面幾句把負(fù)數(shù)的補(bǔ)碼*/t0=t0; /* 換算成絕對(duì)值*/x=t0+1; /*/t0=x; /*/if(x>255) /*/t1+; /*/ else TempBuffer10=0x2b;/0xfe為變"+"的ASCII碼 t1<<=4;/將高字節(jié)左移4位 t1=t1&

27、amp;0x70;/取出高字節(jié)的3個(gè)有效數(shù)字位 x=t0;/將t0暫存到X,因?yàn)槿⌒?shù)部分還要用到它 x>>=4;/右移4位 x=x&0x0f;/和前面兩句就是取出t0的高四位 t1=t1|x;/將高低字節(jié)的有效值的整數(shù)部分拼成一個(gè)字節(jié) TempBuffer11=t1/100+0x30; /+0x30 為變 09 ASCII碼 if( TempBuffer11=0x30) TempBuffer11=0xfe; /百位數(shù)消隱 TempBuffer12=(t1%100)/10+0x30;/分離出十位 TempBuffer13=(t1%100)%10+0x30; /分離出個(gè)位 t

28、0=t0&0x0c;/取有效的兩位小數(shù) t0>>=2;/左移兩位,以便查表 x=t0; y=dotcodex;/查表?yè)Q算成實(shí)際的小數(shù) TempBuffer15=y/10+0x30;/分離出十分位 TempBuffer16=y%10+0x30;/分離出百分位void delay(unsigned char i)while(i-);main() unsigned char TH=32,TL=0; /讀取溫度,溫度值存放在一個(gè)兩個(gè)字節(jié)的數(shù)組中, unsigned intw,maini; /測(cè)溫函數(shù)返回這個(gè)數(shù)組的頭地址 T0init(); /定時(shí)器0初始化 while(1) spe

29、=0; LCD_Initial();/lcd初始化/for(maini=0;maini<25;maini+) main_1();LCD_Initial(); pt=ReadTemperature(TH,TL,0x3f); /上限溫度+110,下限-20,分辨率10位,也就是0.25Cdelay(100); /讀取溫度,溫度值存放在一個(gè)兩個(gè)字節(jié)的數(shù)組中, covert1(); /將溫度轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù)covert0(TH,TL); /將溫度上下限轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù) /第一個(gè)參數(shù)列號(hào),第二個(gè)為行號(hào),為0表示第一行/為1表示第二行,第三個(gè)參數(shù)為顯示數(shù)據(jù)的首地址LCD_Print(1,

30、1,TempBuffer0); /下一步擴(kuò)展時(shí)可能通過(guò)這兩個(gè)變量,調(diào)節(jié)上下限LCD_Print(1,0,TempBuffer1);for(w=0;w<999;w+) /*/ delay(400); /*/ /報(bào)警復(fù)位/ void timer0()interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;/定時(shí)50MSif(-timecount=0)timecount=20;/執(zhí)行20次后秒標(biāo)志位置1timeflag=1; /1Sif(+timecount1>1)timecount1 = 0;bit_100ms = 1; /置100

31、MS標(biāo)志位文件2:/#include <at89x51.h>/用AT89C51時(shí)就用這個(gè)頭文件#include <reg52.h>/用華邦W78E58B時(shí)必須用這個(gè)頭文件sbit DQ = P34;/定義DQ引腳為P3.4 sbit spe=P24;/sbit spe=P37;/*ds18b20延遲子函數(shù)(晶振12MHz )*/ /*DS18B20對(duì)時(shí)間要求很?chē)?yán),但只能長(zhǎng)不能短*在11.0592M下也行,因?yàn)闀r(shí)間長(zhǎng)些*/*6u秒*/void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函數(shù)*/void Init_DS

32、18B20(void) unsigned char x=0; DQ = 1; /DQ復(fù)位 delay_18B20(8); /稍做延時(shí) DQ = 0; /單片機(jī)將DQ拉低 delay_18B20(80); /精確延時(shí) 大于 480us DQ = 1; /拉高總線 delay_18B20(14); x=DQ; /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗 delay_18B20(20);/*ds18b20讀一個(gè)字節(jié)*/ unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>

33、;0;i-) DQ = 0; / 給脈沖信號(hào) dat>>=1; DQ = 1; / 給脈沖信號(hào) if(DQ) dat|=0x80; delay_18B20(4); return(dat);/*ds18b20寫(xiě)一個(gè)字節(jié)*/ void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; /*讀取ds18b20當(dāng)前溫度*/unsigned char *ReadTem

34、perature(char TH,char TL,unsigned char RS)unsigned char tt2;Init_DS18B20(); /初始化/WriteOneChar(0xCC); / 跳過(guò)讀序號(hào)列號(hào)的操作/WriteOneChar(0x4E); /寫(xiě)入"寫(xiě)暫存器"命令,修改TH和TL和分辯率配置寄存器 /先寫(xiě)TH,再寫(xiě)TL,最后寫(xiě)配置寄存器/WriteOneChar(TH);/寫(xiě)入想設(shè)定的溫度報(bào)警上限/WriteOneChar(TL);/寫(xiě)入想設(shè)定的溫度報(bào)警下限/WriteOneChar(RS);/寫(xiě)配置寄存器,格式為0 R1 R0 1,1 1 1 1

35、/R1R0=00分辨率婁9位,R1R0=11分辨率為12位/delay_18B20(80); / this message is wery important/Init_DS18B20();WriteOneChar(0xCC); / 跳過(guò)讀序號(hào)列號(hào)的操作/WriteOneChar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換/delay_18B20(80); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度d

36、elay_18B20(80);tt0=ReadOneChar(); /讀取溫度值低位tt1=ReadOneChar(); /讀取溫度值高位if(tt1>0x01) spe=1; /報(bào)警/return(tt);文件3:#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code wlcome16=" Hua Bi"/定義第一行顯示數(shù)組uchar lcdtimer16=" 00 : 00 : 00.0"/定義第二行顯示數(shù)組uchar timec

37、ount; /時(shí)間計(jì)數(shù)寄存器uchar timecount1;bit timeflag;/時(shí)間標(biāo)志位bitbit_100ms;sbit e=P22;sbit rw=P21;sbit rs=P20;/-/延時(shí)函數(shù),晶振為12MHZ,延時(shí)約為40US*dell/-void delay1(uint del1)uchar del2;for(;del1>0;del1-)for(del2=10;del2>0;del2-);/-/液晶1602顯示判忙函數(shù)/-void busy()uchar temp;temp=0x00;rs=0;/指令rw=1;/讀BF值while(temp&0x80)

38、=0x80)/如果BF值為1:P1=0xff;e=1;/允許讀寫(xiě)temp=P1;/讀取P1狀態(tài)e=0;/禁止讀寫(xiě)/-/向液晶顯示器寫(xiě)命令函數(shù)/-void WR_(uchar temp)busy();/調(diào)用判忙函數(shù)rs=0;/指令rw=0;/寫(xiě)P1=temp;/把指令寫(xiě)入RAMe=1;/允許讀寫(xiě)e=0;/禁止讀寫(xiě)/-/向液晶顯示器寫(xiě)數(shù)據(jù)函數(shù)/-void WR_data(uchar num)busy();/調(diào)用判忙函數(shù)rs=1;/數(shù)據(jù)rw=0;/寫(xiě)P1=num;/把數(shù)據(jù)寫(xiě)入RAMe=1;/允許讀寫(xiě)e=0;/禁止讀寫(xiě)/-/寫(xiě)顯示數(shù)據(jù)函數(shù)(首地址:第一行還是/ 第二行?,待顯示數(shù)組首地址)/-void

39、 disp_lcd(uchar addr,uchar *temp1)uchar i;WR_(addr);/設(shè)置DDRAM地址delay1(100);for(i=0;i<16;i+)WR_data(temp1i);/寫(xiě)入要顯示的數(shù)據(jù)delay1(100);/-/液晶顯示器初始化函數(shù)/-void lcd_ini()char i;for(i=3;i>0;i-)P1=0x30;/8位數(shù)據(jù)接口rs=0;/指令rw=0;/讀e=1;/禁止讀寫(xiě)e=0;/允許讀寫(xiě)delay1(100);P1=0x38;/兩行顯示rs=0;/指令rw=0;/寫(xiě)e=1;/允許讀寫(xiě)e=0;/禁止讀寫(xiě)delay1(100

40、);/-/液晶顯示器復(fù)位函數(shù)/-void lcd_reset()WR_(0x01);/清屏delay1(100);WR_(0x06);/數(shù)據(jù)讀、寫(xiě)后,AC加1delay1(100);WR_(0x0c);/顯示開(kāi)delay1(100);/-/定時(shí)器初始化函數(shù)/-void T0init()TMOD=0x01;/設(shè)置定時(shí)器0方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;/裝初值TR0=1;/啟動(dòng)計(jì)數(shù)IE=0x82;/開(kāi)總中斷,開(kāi)定時(shí)器0中斷timeflag=0;timecount=20;/-/清零時(shí)間函數(shù)/-void clear() /ASK碼48對(duì)應(yīng)

41、數(shù)字0lcdtimer15 = lcdtimer13 = lcdtimer12 = 48; lcdtimer8 = lcdtimer7 = lcdtimer3 = lcdtimer2 = 48;/-void main_1()/lcd_ini();/初始化/lcd_reset();/復(fù)位disp_lcd(0x80,wlcome);/第一行顯示W(wǎng)LCOME數(shù)組disp_lcd(0xc0,lcdtimer);/第二行顯示時(shí)間if(bit_100ms = 1)/秒小數(shù)位bit_100ms = 0;if(+lcdtimer15>57)lcdtimer15 = 48;if(timeflag=1) /

42、判斷1S標(biāo)志位timeflag=0; /清零秒標(biāo)志位if(+lcdtimer13>57) /秒個(gè)位+1,是否大于9?(ASK碼48-57)對(duì)應(yīng)數(shù)字0-9)lcdtimer13 = 48; /清零秒個(gè)位if(+lcdtimer12>53) /秒十位+1,大于6?(48+6=53)lcdtimer12 = 48;/清零秒十位if(+lcdtimer8>57) /分個(gè)位+1,個(gè)位>9?lcdtimer8 = 48;/分個(gè)位清零if(+lcdtimer7>53)/分十位+1,大于6?lcdtimer7 = 48; /分十位清零if(+lcdtimer3>57)/小時(shí)

43、個(gè)位+1,大于9?lcdtimer3 = 48; /清零時(shí)個(gè)位if(+lcdtimer2>53)/小時(shí)十位+1,大于6?lcdtimer2 = 48; /小時(shí)十位清零disp_lcd(0xc0,lcdtimer);/第二行顯示更新/-/定時(shí)器0中斷服務(wù)函數(shù)/-文件4:/#include <at89x51.h>/用AT89C51時(shí)就用這個(gè)頭文件#include <reg52.h>/用華邦W78E58B時(shí)必須用這個(gè)頭文件#include <intrins.h>#include <time.h>/注意那個(gè)LCD_Wait()函數(shù),它是判"忙"標(biāo)志的,在實(shí)際硬件要把注掉的那種打開(kāi)/Port Definitions*sbit LcdRs= P20;sbit LcdRw= P21;sbit LcdEn = P22;sfr DBPort = 0x90;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口/部等待函數(shù)*unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBP

溫馨提示

  • 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ù)網(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)論