基于單片機的智能熱水壺設(shè)計_第1頁
基于單片機的智能熱水壺設(shè)計_第2頁
基于單片機的智能熱水壺設(shè)計_第3頁
基于單片機的智能熱水壺設(shè)計_第4頁
基于單片機的智能熱水壺設(shè)計_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄內(nèi)容摘要1關(guān)鍵詞1第1章 緒論21.1研究背景21.2研究目的與意義21.3熱水壺發(fā)展現(xiàn)狀3第2章 系統(tǒng)總體設(shè)計42.1設(shè)計總體思路42.2系統(tǒng)總設(shè)計框圖42.3主要模塊功能簡介42.4外部配件材料的選擇5第3章 硬件模塊電路設(shè)計63.1硬件組成部分63.2主要模塊電路設(shè)計63.2.1單片機模塊63.2.2溫度檢測模塊73.2.3液晶顯示模塊83.2.4按鍵控制模塊83.2 總系統(tǒng)電路9第4章 軟件模塊電路設(shè)計104.1 設(shè)計總體思路104.2 燒開水功能設(shè)計特點104.3控制程序工作流圖104.4系統(tǒng)主程序11第5章 系統(tǒng)測試125.1 硬件部分測試125.1.1熱水壺功能測試125.

2、1.2系統(tǒng)誤差分析125.2 軟件部分測試125.3 結(jié)果分析12結(jié)論14致謝15參考文獻16附錄1 電路原理圖與PCB圖17附錄2系統(tǒng)總程序代碼19附錄3元器件清單30附錄4設(shè)計實物圖31Abstract32 基于單片機的智能熱水壺系統(tǒng)設(shè)計【內(nèi)容摘要】在日常生活中,熱水壺有著十分廣泛的應用領(lǐng)域。熱水壺是結(jié)合用戶的實際需求和現(xiàn)代社會需要的一種智能產(chǎn)品,于是本次設(shè)計了以單片機為核心器件,結(jié)合人性化的理念,最終實現(xiàn)智能的控制電路和程序設(shè)計的智能熱水壺。本設(shè)計實現(xiàn)了日常燒開水功能,以及通過按鍵設(shè)定溫度加熱冷水,達到設(shè)定溫度后,通過蜂鳴器提醒用戶并自動斷電,同時液晶顯示屏顯示即時溫度等拓展功能。本設(shè)計

3、硬件部分由單片機芯片、溫度檢測,蜂鳴報警、液晶顯示等模塊,同時利用了單片機的智能性,軟件部分在keil uvision開發(fā)環(huán)境中使用C語言編寫軟件程序,實現(xiàn)了對水溫的智能控制,其具有生活化、實用性強的特點?!娟P(guān)鍵詞】單片機;智能;熱水壺;DS18B20;燒水;32第1章 緒論1.1 研究背景近年來,隨著單片機技術(shù)的發(fā)展,單片機的應用研究不斷深入,傳統(tǒng)控制檢測快速更新。在實時檢測和自動控制的系統(tǒng)中,單片機通常是作為一個核心部件,基于具體的硬件結(jié)構(gòu)和應用對象的應用特點,并結(jié)合軟件改進控制系統(tǒng),代替復雜的電子電路或數(shù)字電路,通過軟件控制外圍電路,確保智能化能夠?qū)崿F(xiàn)。單片機應用于范圍廣泛的智能產(chǎn)品中,

4、如智能儀表、實時工業(yè)控制、通信設(shè)備、導航系統(tǒng)、家用電器等,單片機應用在生產(chǎn)中時,其可以使產(chǎn)品升級換代,常在產(chǎn)品名前端冠名“智能”。熱水壺是在日常生活中需要的實際需求和用戶相關(guān)的現(xiàn)代社會的產(chǎn)物,是一種單片機控制的智能產(chǎn)品。隨著科技的發(fā)展和社會的進步,人們的生活質(zhì)量在逐步增加。近年來,各種智能設(shè)備不斷更新,如智能手機、智能水壺走進我們的生活。由于其自身的優(yōu)點,安全、智能電水壺在生活中有著廣泛的應用。1.2 研究目的與意義目前市場上品種繁多的開水壺存在著功能比較單一、不夠完善等不足,所以我們在普通的燒水壺基礎(chǔ)上利用所學單片機知識添加了一些方便實用的功能,如設(shè)溫加熱、蜂鳴提示、顯示即時溫度的功能,使產(chǎn)

5、品更加人性化,日常使用更加方便。隨著社會的快速發(fā)展,智能新產(chǎn)品相繼出現(xiàn),比如數(shù)碼相機、平板電腦等一系列的新鮮的事物,人們的日常生活中也發(fā)生了極大的變化。本設(shè)計以探究智能新產(chǎn)品工作原理為出發(fā)點,基于單片機設(shè)計了一款智能熱水壺,設(shè)計過程考查了我們綜合運用所學知識的能力,包括以前學過的關(guān)于單片機編程與應用、電裝實習等的知識,同時我對當前的電子產(chǎn)業(yè)發(fā)展的新趨勢有了一定的了解,實際動手能力和模擬實際產(chǎn)品的開發(fā)能力也得到了鍛煉,對應屆大學生日后工作能力的培養(yǎng)具有重要的意義。本次設(shè)計也培養(yǎng)了我理解工程技術(shù)的工作中需要的整體觀和經(jīng)濟觀,同時提高掌握設(shè)計的各種方案以及技術(shù)指標、資料收集、技術(shù)文獻,分析計算,描繪

6、電路圖及撰寫論文等能力。1.3 熱水壺發(fā)展現(xiàn)狀電熱水壺在中國的發(fā)展史上雖然短暫,發(fā)展速度卻很快。在早期的中國,電熱水壺很早就開始了工業(yè)生產(chǎn),但其主要面向出口。電熱水壺具有結(jié)構(gòu)簡單、加熱快、節(jié)約能源、操作方便、安全實用、使用壽命長等優(yōu)點。近年來,國內(nèi)市場占有率開始快速增長,市場增長率超過50%。隨著電熱水壺產(chǎn)品消費者的意識不斷提高,在國內(nèi)市場電熱水壺的容量有明顯的提升。其次,雖然飲水機在我國的普及率很高,但由于飲水機體積大,重復加熱,存在二次污染的問題,于是提供了電水壺產(chǎn)業(yè)發(fā)展的機會1。第2章 設(shè)計方案概述2.1 總體設(shè)計思路 本次智能熱水壺的設(shè)計方案利用單片機軟件系統(tǒng)為工作環(huán)境,不僅實現(xiàn)基本的

7、燒開水以及燒開后斷電功能,并且結(jié)合按鍵控制溫度的設(shè)定,可加熱冷水至指定溫度,蜂鳴器報警,隨后熱水壺斷電,同時液晶顯示屏顯示即時溫度。2.2 系統(tǒng)總設(shè)計框圖 初步確定電路系統(tǒng)由以下模塊組成,電路系統(tǒng)框圖如圖2-1所示。加熱裝置-繼電器 蜂鳴報警器液晶顯示- LM160L溫度檢測-DS18B20電源供電按鍵控制ST89C52RC單 片 機圖2-1 電路系統(tǒng)框圖2.3 主要模塊電路功能簡介1、單片機模塊 作為智能熱水壺設(shè)計的控制中心,單片機用于驅(qū)動整個熱水壺系統(tǒng)的運作,如液晶屏上的溫度顯示、接收傳感器中的溫度信號以及按鍵信號、LED上顯示溫度等2。2、溫度檢測模塊 周期性采集溫度信號,判斷是否達到預

8、設(shè)溫度,傳送至單片機內(nèi)處理。3、液晶顯示模塊 顯示水壺內(nèi)熱水的即時溫度,便于用戶隨時掌控溫度變化。4、控制按鍵模塊三個獨立按鍵組成一個獨立鍵盤,連接單片機的I/O端口,對單片機輸入控制信號,用于設(shè)溫加熱模式時控制設(shè)定溫度的加或減,以及單片機的啟動與停止。模式設(shè)定由一個獨立按鍵組成,當按下按鍵,液晶顯示屏右下角顯示“1”,即為燒開水模式;再次按下按鍵,液晶顯示屏右下角顯示“2”,即為設(shè)溫加熱模式;顯示“0”為停止加熱狀態(tài)。5、加熱裝置模塊 用于加熱水壺中的水,使水達到設(shè)定的溫度。6、蜂鳴器模塊 當冷水加熱到指定溫度時發(fā)出報警聲提示用戶。7、電源模塊 用于給整個設(shè)計系統(tǒng)提供電。2.4 外部配件材料

9、的選擇本熱水壺采用220V 200W的制式,水壺的選用優(yōu)先考慮耐高溫的合金材料,繼電器連接加熱片來加熱壺底來實現(xiàn)燒水。在水壺底部和加熱片上都涂上一層導熱膠,使冷水受熱均勻、加熱的速度更快,減少等待時間。水壺蓋上開孔一個邊長約為40mm的方洞,便于放入測溫探頭、散去蒸汽,避免暴沸。第3章 硬件模塊電路設(shè)計3.1 硬件組成部分 確定了本次設(shè)計需要實現(xiàn)的功能后,針對燒開水、加熱冷水、顯示溫度的功能,設(shè)計的硬件部分主要由單片機模塊、溫度控制模塊、液晶顯示模塊、按鍵控制模塊構(gòu)成。3.2 主要模塊電路設(shè)計3.2.1 單片機模塊相比于普通的微型計算機,單片機具有以下特點:體積小,結(jié)構(gòu)簡單,控制能力強,可靠性

10、高,集成度高,抗干擾能力強,磁屏蔽能力強,適合在惡劣環(huán)境下工作,以及低電壓,低功耗,性價比較高,開發(fā)周期短等。其中,STC89C52是STC公司生產(chǎn)的一種CMOS8位微控制器。STC89C52使用MCS-51內(nèi)核,但做了許多改進使芯片具有傳統(tǒng)51單片機不具備的功能。在單芯片上,由于靈巧的8 位CPU 和在系統(tǒng)可編程Flash, STC89C52為眾多嵌入式控制應用系統(tǒng)提供靈活、有效的解決方案3。STC89C52RC芯片如圖3-1所示。圖3-1 STC89C52RC芯片STC89C52單片機系統(tǒng)由單片機、時鐘電路、復位電路組成,其具有以下功能: 8k字節(jié)Flash,512字節(jié)RAM,

11、32 位I/O 口線,定時器,內(nèi)置4KB EEPROM,MAX810復位電路,3個16 位定時器/計數(shù)器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級中斷結(jié)構(gòu)),全雙工串行口。STC89C52 也可降至0Hz 靜態(tài)邏輯操作,支持2種軟件,還可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35MHz,6T/12T可選4。本次設(shè)計采用STC89C52RC型號單片機,且單片機采用內(nèi)部時鐘方式,在MCS-51電路外接晶體以及電容C

12、4和C5組成并聯(lián)諧振電路且構(gòu)成一個自激振蕩器,接在放大器的反饋回路中,向內(nèi)部電路提供震蕩時鐘。在本次設(shè)計中晶體選擇1.2MHz頻率,而電容C4和C5的選擇為30pF的典型值。單片機中的復位電路采用上電自動復位和按鍵復位的方式。3.2.2 溫度控制模塊 比較熱電偶溫度傳感器,它的實現(xiàn)過程為:靠光敏電阻檢測光照的大小,光照的大小改變電阻的大小,再給電阻一個外加電壓,就改變了電壓的大小,再用轉(zhuǎn)換器件檢測電壓的變化并轉(zhuǎn)換為數(shù)字信號,隨后傳到單片機上作一定的處理后去控制相應的數(shù)碼管來顯示當時的溫度。而對DS18B20來說過程則簡單許多,熱電偶電阻傳感器一直到單片機之前的部分都可以用一個DS18B20來代

13、替,從而真正的實現(xiàn)了數(shù)字化5。 本設(shè)計系統(tǒng)采用的是DS18B20溫度傳感器,DS18B20是美國達拉斯公司生產(chǎn)的一款產(chǎn)品,是一線式數(shù)字化傳感器。工作電源可在遠端引入,也可采用寄生電源方式產(chǎn)生。低功耗、微型化、抗干擾能力很強,可根據(jù)實際要求通過簡單的編程實現(xiàn)數(shù)字讀數(shù)方式,便于與微處理器進行接口。電路簡單,實現(xiàn)起來比較容易,幾乎適用于所有類型的單片機。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。6DS18B20引腳圖以及內(nèi)部系統(tǒng)框圖如圖3-2、3-3所示。圖3-2 DS18B20引腳圖圖3-3 DS18B20內(nèi)部系統(tǒng)框圖3.2

14、.3 液晶顯示模塊 本次設(shè)計采用的液晶顯示屏為LM016L,除了PROTEUS中016沒有顯示調(diào)亮度的兩個端口,它與LCD1602具有相同的原理。它可以顯示兩行,每行16 個字符,因此可相當于32 個LED 數(shù)碼管,而且比數(shù)碼管顯示的信息還多。采用單+5V電源供電,外圍電路配置簡單,價格便宜,具有很高的性價比7。在單片機系統(tǒng)中應用液晶顯示屏具有以下優(yōu)點:顯示質(zhì)量高、數(shù)字式接口、體積小、重量輕、功耗低,在嵌入式應用系統(tǒng)中得到越來越廣泛的應用。 液晶顯示屏、LCD1602管腳分布圖如圖3-4、3-5所示。圖3-4 液晶顯示屏圖3-5 LCD1602管腳分布圖3.2.4 按鍵控制電路三個按

15、鍵構(gòu)成一個獨立鍵盤,一端分別接單片機的P0.5、P0.6和P0.7口,另一端接地。通過單片機的掃描查詢,判斷按鍵是否按下,當沒有按鍵按下時,P0口輸入為高電平,反之則為低電平8。3.2.5 電源供電電路由于本設(shè)計的模塊都采用直流+5V供電,于是直接采用三端穩(wěn)壓器供電,省去了復雜的電源變壓電路。再考慮到單片機和液晶顯示屏的功耗,使用電池供電比較費電,并且電流也達不到要求,所以也直接用三端穩(wěn)壓器供電,電流大、電壓穩(wěn)定。3.3 總系統(tǒng)電路 總系統(tǒng)電路原理圖以及PCB圖詳見附錄1。第四章 軟件模塊電路設(shè)計4.1 設(shè)計總體思路本設(shè)計采用51單片機系統(tǒng)固件,基于keil uVision4開發(fā)環(huán)境,使用C語

16、言編寫程序9。程序需要實現(xiàn)以下需求: 1、一般熱水壺都具有的燒開水功能。 2、指定溫度加熱冷水。切換模式后,按下加或減按鍵調(diào)節(jié)需要設(shè)定的溫度,到水溫到達指定溫度后熱水壺自動斷電。3、LM016L液晶顯示屏上顯示即時溫度、設(shè)定溫度以及工作模式。4.2 燒開水功能設(shè)計特點由于不同的地域氣壓差異,當溫度達到100度時,水不一定能燒開,甚至在海拔較高的地區(qū)水不能加熱到100度。于是本設(shè)計中相應的在溫度控制模塊中采用周期性采樣溫度的方式,每10s保存一次溫度值,通過每次的采樣進行比較進而尋找水溫的最大值,如果沒有更大的水溫值,則水達到沸點,若溫度穩(wěn)定持續(xù)超過3分鐘,并且水溫超過80度,此時可判斷水燒開了

17、,隨后熱水壺自動斷開電源。程序執(zhí)行采用定時器中斷方式,提高了系統(tǒng)的響應速度10。4.3 控制程序工作流圖 根據(jù)設(shè)計的思路和目標功能,確立了軟件的工作流圖??刂瞥绦蚬ぷ髁鲌D如圖4-1所示。圖4-1 控制程序工作流圖4.4 系統(tǒng)主程序系統(tǒng)主程序代碼詳見附錄2。第5章 系統(tǒng)測試5.1 硬件部分測試本設(shè)計首先在Protel Altium Designer Summer 09軟件上繪制出原理圖,并且完成PCB的設(shè)計,之后送至電路板制版工廠完成主控雙面電路板的制作,自行動手完成元器件的焊接和測試。焊接過程需要謹慎認真的態(tài)度,先焊好主控芯片,最后焊接其它元器件,焊接結(jié)束后用萬用表歐姆檔對照原理圖進行電路檢測

18、,檢測其導通情況以及是否有短路或虛焊現(xiàn)象并及時修正。確保一切正常后,下載測試程序檢測主控核心板是否能正常工作,經(jīng)檢測,主控核心板能達到預期的工作效果,可以作為本系統(tǒng)的主控部件。5.1.1 熱水壺功能測試 在水壺內(nèi)盛上大約100ml的冷水,放置在涂上一層導熱膠的加熱板上,將1個DS18B20溫度傳感器探頭放進水中用于檢測實時溫度,再將程序下載至主控板內(nèi)后接通電源,選擇“1”模式開始燒水,觀察并記錄如下:1.獨立按鍵設(shè)定工作模式,在液晶顯示屏上正常顯示實時水溫和工作模式。2.大約10分鐘后,水燒開,蜂鳴器報警,顯示屏上顯示“Boiling”,隨后斷電。重復測燒開水時的溫度和所用時間5次,得到的結(jié)果

19、如表5-1所示:12345開水溫度/度99.5199.4999.5299.5199.50所用時間9分58秒9分56秒9分58秒9分57秒9分58秒重新在水壺內(nèi)盛上大約100ml的冷水,重復燒開水前的準備步驟,接通電源,按兩下模式按鍵,選擇“2”模式,起始水溫為26.41度,再通過溫度加減按鍵調(diào)節(jié)設(shè)定溫度,設(shè)定50度后,等待大約5分鐘后到達設(shè)定溫度,蜂鳴器報警,隨后斷電。重復測設(shè)定溫度50度時的實際斷電溫度和所用時間5次,得到的結(jié)果如表5-2所示:12345實際溫度/度51.2250.9951.1851.2351.21所用時間4分44秒4分40秒4分41秒4分42秒4分45秒5.1.2 系統(tǒng)誤差

20、分析 分析整個測試過程,總結(jié)出有幾點誤差: 1.溫度檢測引起的誤差。本設(shè)計溫度檢測中存在的誤差是在可以接受的范圍內(nèi)的,由于DS18B20本身存在一定的系統(tǒng)誤差,以及檢測過程中溫度環(huán)境不均勻、水流滾動影響等因素,因此設(shè)計采用周期采樣溫度的方法測定溫度。 2.繼電器引起的誤差。隨著繼電器對電熱管的加熱,水溫升高,電流流經(jīng)SSR減小,因此交流的負載增加干擾信號也就不足為奇,SSR誤導通。 3.電壓波動引起的誤差。5.2 軟件部分測試 本設(shè)計使用C語言在keil uvision開發(fā)環(huán)境下進行編程,該軟件兼容單片機C語言軟件開發(fā)系統(tǒng),編譯過程中對于出錯的地方給出清楚的位置,方便開發(fā)者改進錯誤。在編程的基

21、礎(chǔ)上,整個調(diào)試的工作包括工程的建立和函數(shù)的調(diào)用,檢查包含的頭文件是否正確,分模塊檢查,根據(jù)設(shè)計的要求檢查初始化程序,以及優(yōu)化程序結(jié)構(gòu)。經(jīng)過反復的測試后,確定系統(tǒng)能夠正常工作,系統(tǒng)功能得到了良好的實現(xiàn),設(shè)計的軟件部分測試完成。5.3 結(jié)果分析 經(jīng)過對系統(tǒng)的硬件以及軟件部分的反復測試,在兩種功能模式下,系統(tǒng)各模塊都能夠正常工作??傮w來說,這些功能的實現(xiàn)達到了畢業(yè)設(shè)計題目上的要求,并且本設(shè)計的外形設(shè)計提高了安全性和靈活性,具有操作簡單、實用等特點。本設(shè)計的成本較低,便于進行工業(yè)生產(chǎn),投入日常生活中使用,從這個角度來說,本設(shè)計具有一定的實用意義。結(jié)論 通過硬件和軟件的設(shè)計,我制作了智能熱水壺

22、,本次設(shè)計的各項目標功能都已實現(xiàn),包括用燒開水、按鍵設(shè)置溫度、指定溫度加熱冷水、達到設(shè)定溫度時自動斷電等。通過這次設(shè)計,自己努力學習、認真設(shè)計,從搜集資料、分析和確定方案,我學習到了電路板的制作與程序的編寫等操作技能,通過單片機編程和焊接電路板等實踐方面的學習積累了自己的動手經(jīng)驗。在此期間,我充分的鍛煉了我的自學能力,明白了學習生活中要有不輕言放棄的毅力。同時也領(lǐng)悟到不要在乎作品完成得是否完美,重要的是自己所學的在實踐中如何應用以及怎樣應用到最好。本次設(shè)計的硬件模塊電路部分比較簡單,大部分熱水壺功能是由軟件程序?qū)崿F(xiàn)。在編程過程中,我重新復習了許多匯編語言的編程技巧,最終編寫的程序更加靈活;另外

23、我還學習了代碼的優(yōu)化技巧,逐漸養(yǎng)成了良好的編程習慣,寫出了高質(zhì)量的程序代碼,為今后的學習工作打下了良好的基礎(chǔ)。致謝經(jīng)過三個月的忙碌和工作,我的畢業(yè)設(shè)計已經(jīng)接近尾聲。由于經(jīng)驗的匱乏,本次畢業(yè)設(shè)計難免有許多考慮不周和制作不好的地方,如果沒有導師的指導與督促,以及一起制作設(shè)計的同學們支持,要去完成這個設(shè)計是難上加難的。在這里首先要感謝我的導師。她平日里工作繁多,但在我做畢業(yè)設(shè)計的過程中,從設(shè)計方案的確定和修改、中期檢查指導、后期完善修改、論文的規(guī)范修改等方面都給予了我耐心的指導。其次還要感謝所有幫助過我的老師,感謝電子工程學院所提供的實驗室,在焊接和調(diào)試電路時給我們帶來了極大的方便。在這里,我要再一

24、次對我的導師以及電子工程學院的全體老師們表示深深的謝意,在你們的支持與幫助下我順利的完成了此次畢業(yè)設(shè)計。參考文獻1中國行業(yè)研究網(wǎng).電水壺發(fā)展的三大趨勢,2007.2吉林工程技術(shù)師范學院.智能水壺.2009.3周鵬.基于STC89C52單片機的溫度檢測系統(tǒng)設(shè)計.現(xiàn)代電子技術(shù),2012.4STC89C51RC單片機官方技術(shù)資料STC官網(wǎng)5南京航空航天大學金城學院.一個單片機實現(xiàn)溫度傳感網(wǎng)絡(luò)并用數(shù)碼管顯示的設(shè)計,2013.6王歡,王忠慶,岳利維.基于STC89C52RC單片機的溫度報警系統(tǒng)的設(shè)計與實現(xiàn). 晉城職業(yè)技術(shù)學院學報,2011.7趙亮.跟我學51單片機(七)LCD1602液晶顯示模塊.201

25、1.8吉小輝,陳育中.電水壺自動斷電控制器的研究與設(shè)計.電子設(shè)計工程,2013.9譚浩強.C語言程序設(shè)計(第二版).清華大學出版社,1999.10薛江玉,張鵬,冀鵬,宋玉倩.基于單片機的智能燒水壺,2011.附錄1 電路原理圖、PCB圖附錄2 系統(tǒng)主程序代碼【main.c】include <reg52.h>#include "STC89C52RC.h"#include "Lm016l.h"#include "DS18B20.h"#define TIMER0TIMEH0x3C#define TIMER0TIMEL0xB0#d

26、efine HEATON0#define HEATOFF1#define BUZZERON0#define BUZZEROFF1#define SETTEMPUPLMT100#define SETTEMPDOWNLMT30sbit Buzzer = P37;sbit KeyMode = P05;sbit KeyUp = P06;sbit KeyDown = P07;sbit Heat = P36;/加熱控制sbit Reserve = P23;sbit BackLight = P43;/測試用sbit Test1 = P32;sbit Test2 = P33;sbit Test3 = P34;

27、sbit Test4 = P35;/定義幾個全局變量unsigned char timeflag;int RlTemp;/這里定義為int 比較時也用int型比較int svRlTemp;/保存一次溫度值int pvTemp;/前兩秒的溫度值int MaxTemp;/用于尋找最大溫度值/*/* 初始化定時器0 這里設(shè)置50ms定時/*void ConfigTimer0()TMOD |= 0x01;TH0 = TIMER0TIMEH; / TL0 = TIMER0TIMEL;ET0 = 1; /TR0 = 1; /EA = 1;void SysInit()InitLCDLm016l();Init

28、Ds18b20();ConfigTimer0();void delay(unsigned int x)unsigned int y;for(;x>0;x-)for(y=110;y>0;y-);/*void GetAndDisplay()stt = GetDs18b20Temperature(&temp);if(stt) WriteLm016lString(0,0,"error");elseInteger2String(temp,str);WriteLm016lString(0,0,str);fttp = Ds18b20Convert2Temperatur

29、e(temp);n = Float2String(fttp,2,str);WriteLm016lString(0,1,str);WriteLm016lChar(n,1,0x08);/這里0x08為第一個自造字符*/unsigned int abs(int a, int b)unsigned int rlt;if(a >= b) rlt = a - b;else rlt = b - a;return rlt;/*/* 判斷水是否開了/*unsigned char IsWaterBoiling()static unsigned char stb = 0;/if(abs(RlTemp,pvTe

30、mp) <= 4)/小于+-0.25度/stb +;/else/stb = 0;/換種方式判斷: 找最大值 如果沒有更大的值 則到達沸點if(RlTemp > MaxTemp) MaxTemp = RlTemp; stb = 0; else stb +; /判斷if(stb >= 120) && (RlTemp > 1280) /如果溫度穩(wěn)定持續(xù)超過3min,并且水溫超過80度,則認為水開了stb = 0;return 1;else return 0;void BuzzerLight(unsigned char n)for(;n>0;n-)Buzz

31、er = BUZZERON;delay(50);Buzzer = BUZZEROFF;delay(30);/*/* 初始化定時器0 這里設(shè)置50ms定時/*void main()int temp;float fttp;unsigned char stt;unsigned char str16;unsigned char i,n;unsigned char mode;unsigned char settp;int settpint;unsigned char blflag = 0;SysInit();/i=0;settp = 50;settpint = settp;settpint <&l

32、t;= 4;WriteLm016lChar(15,1,mode+'0');GetDs18b20Temperature(&temp);while(1)/采集溫度if(timeflag & 0x01)timeflag &= 0xfe;Test1 = Test1;stt = GetDs18b20Temperature(&temp);if(stt)/WriteLm016lString(0,0,"No Ds18b20");else/保存溫度i+;if(i>=10) /每10s保存一次溫度值i = 0;pvTemp = temp;s

33、vRlTemp = RlTemp;/這里不需要了RlTemp = temp;/顯示if(stt) WriteLm016lString(0,0,"No Ds18b20");elsen = String2StringArray("T=0",str);fttp = Ds18b20Convert2Temperature(temp);n += Float2String(fttp,2,&strn);strn = 0x08; n += 1;n += String2StringArray(" 0",&strn);/清除后面字符Writ

34、eLm016lString(0,0,str);/WriteLm016lChar(n,0,0x08);/這里0x08為第一個自造字符/if(mode = 0x02)/顯示設(shè)定溫度值n = String2StringArray("Set=",str);n += Integer2String(settp,&strn);strn = 0x08; n += 1;n += String2StringArray(" 0",&strn);/清除后面字符WriteLm016lString(0,1,str);/WriteLm016lChar(n,1,0x08

35、);/模式切換switch(mode)case 0x00:/關(guān)閉模式Heat = HEATOFF; Buzzer = BUZZEROFF;blflag = 0; MaxTemp = 0;break;case 0x01:/燒開水模式 if(timeflag & 0x02)/共用1s定時timeflag &= 0xfd;Test2 = Test2;if(blflag)/Buzzer = BUZZERON;Heat = HEATOFF;BuzzerLight(3);WriteLm016lString(0,1,"Boiling");elseHeat = HEATON

36、;blflag = IsWaterBoiling();break;case 0x02:/指定加熱模式if(timeflag & 0x04)timeflag &= 0xfb;Test3 = Test3;if(RlTemp > settpint)Heat = HEATOFF;/Buzzer = BUZZERON;BuzzerLight(3);elseHeat = HEATON;Buzzer = BUZZEROFF;break;default:mode = 0; break;/按鍵監(jiān)測if(!KeyMode)delay(10);while(!KeyMode);/等待釋放if(!

37、stt)mode +;/如果18b20不存在 則不能切換模式if(mode > 2) mode = 0;/String2StringArray(" ",str);WriteLm016lString(0,1,str);/WriteLm016lChar(15,1,mode+'0');if(!KeyUp)delay(10);while(!KeyUp);/等待釋放settp +;if(settp > SETTEMPUPLMT) settp = SETTEMPDOWNLMT;settpint = settp;settpint <<= 4;if(!KeyDown)delay(10);while(!KeyDown);/等待釋放settp -;if(settp < SETTEMPDOWNLMT) settp = SETTEMPUPLMT;settpint = settp;settpint <<= 4;/*/ 定時器0中斷函數(shù)/*void Timer0ISR(void) interrupt 1st

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論