




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、輕院輕工職業(yè)學(xué)院??飘厴I(yè)設(shè)計(jì)(論文)題 目溫度采集智能家居熱水器學(xué)生 專業(yè)班級(jí) 學(xué) 號(hào) 系 別 指導(dǎo)教師(職稱)完成時(shí)間 2016年3月20日 溫度采集智能家居熱水器摘 要 隨著社會(huì)的發(fā)展,人類科技的進(jìn)步,各行各業(yè)都在使自己的產(chǎn)品智能化、數(shù)字化,因老式的熱水器使用煤氣或天然氣對(duì)水進(jìn)行燃燒加熱,用手動(dòng)的方式調(diào)節(jié)溫度,不僅不能夠精確的確定使用者需要的水溫,而且還存在一定的危險(xiǎn)性。電熱水器是一種可供浴室、洗手間與廚房使用的家用電器,隨著人們生活質(zhì)量的提高,現(xiàn)代的家用電熱水器已經(jīng)摒棄了以前的做法,而采用一種更加精確、安全的實(shí)施方案。 C語(yǔ)言對(duì)單片機(jī)編程有諸多優(yōu)點(diǎn),例如:便于移植、句法檢查時(shí)錯(cuò)誤少、堅(jiān)固
2、性好、頭文件種類諸多,能夠方便快捷使用各種函數(shù)等。本文采用STC89C52單片機(jī)作為控制器,使用C語(yǔ)言編寫(xiě)程序,設(shè)計(jì)了一款智能家用電熱水器。使用按鍵鍵盤(pán)設(shè)定溫度,溫度可以精確到0.1攝氏度,并使用LED燈顯示,能夠精確提供用戶所需溫度的溫水。采用DS18B20采集溫度,使用LED燈顯示,精確的顯示出采集的水溫。當(dāng)所需溫度高于當(dāng)前采集的水溫時(shí),使用繼電器控制外接加熱源,當(dāng)所需溫度低于當(dāng)前采集的水溫時(shí),繼電器斷開(kāi)不加熱。當(dāng)所需溫度高于采集溫度時(shí),繼電器吸合開(kāi)始加熱?;緦?shí)現(xiàn)了智能控制功能。 關(guān)鍵字:18B20、STC89C52、熱水器ABSTRACTWith the development of
3、society, the progress of human science and technology, in all walks of life to make their products intelligent, digital, because the water heater using old-fashioned gas or natural gas is burned to heat water, adjust the temperature manually, not only can the user needs to be accurately determined,
4、and there is some risk. Electric water heater is a kind of household appliances for bathroom and kitchen, restroom use, along with the improvement of people's living quality, household electric water heater modern have rejected the previous practice, and by using a more accurate, safe implementa
5、tion plan. The C language has many advantages, such as: microcomputer programming for transplantation, syntax check error less, robust, head file type many, can be convenient to use a variety of functions. This paper adopts STC89C52 MCU as the controller, the use of C programming language, designed
6、a intelligent home electric water heater. Use the keyboard to set the temperature, the temperature can be accurate to 0.1 degrees Celsius, and the use of LED lights display, can accurately provide the required temperature of warm water. The DS18B20 collection temperature, the use of LED lights displ
7、ay, display the temperature precise acquisition. When the required temperature is higher than the acquisition of temperature, use the relay to control the external heating source, when the required temperature is lower than the current collecting water, relay off without heating. When the required t
8、emperature is higher than the acquisition of temperature, relay starts heating. The basic realization of the intelligent control function. Key words:18B20、STC89C52、目 錄1 引言12 設(shè)計(jì)容與性能指標(biāo)13 系統(tǒng)方案比較、設(shè)計(jì)與論證23.1 主控制器模塊23.2 溫度測(cè)量23.3 設(shè)置溫度33.4 顯示模塊43.5 電源選取44 系統(tǒng)器件選擇55 硬件實(shí)現(xiàn)與單元電路設(shè)計(jì)65.1 主控制模塊65.2 顯示模塊電路65.3 數(shù)碼管顯示驅(qū)動(dòng)
9、電路75.4 溫度傳感器(DS18B20)電路75.4.1 DS18B20基本介紹75.4.2 DS18B20控制方法85.4.3 DS18B20供電方式85.5 繼電器加熱控制電路96 系統(tǒng)軟件設(shè)計(jì)106.1 程序結(jié)構(gòu)分析106.2 系統(tǒng)程序流圖106.2.1 DS18B20初始化程序流程圖126.2.2 讀溫度子程序流程圖126.3 程序編寫(xiě)與調(diào)試136.6.1 Keil編譯器軟件簡(jiǎn)介136.3.2 使用Keil軟件建立一個(gè)工程136.3.3 使用Debug進(jìn)行調(diào)試177 系統(tǒng)的安裝與調(diào)試197.1 安裝步驟197.2 電路的調(diào)試197.3 本章小結(jié)19結(jié)論19參考文獻(xiàn)20附錄1 整體電路
10、原理圖21附錄2 部分源程序2244 / 511 引言 隨著人們生活水平的提高,熱水器在人們的生活中扮演著越來(lái)越重要的角色,越來(lái)越受到人們的青睞。由于燃?xì)鉄崴饕资芩畨合拗?,而且安全性較差。每年使用燃?xì)鉄崴髟斐傻谋?、中毒等事故也屢有所聞。消費(fèi)者對(duì)燃?xì)鉄崴鲬延幸欢ǖ膽峙赂校匀細(xì)鉄崴鳚u漸淡出市場(chǎng)。而智能電熱水器越來(lái)越受到人們的認(rèn)可。電熱水器在中國(guó)的歷史已經(jīng)有10多年了,期間也經(jīng)歷了數(shù)次起落的過(guò)程,在上個(gè)世紀(jì)的最后幾年,隨著國(guó)外品牌的進(jìn)入和國(guó)一些大家電廠的目光轉(zhuǎn)向電熱水器,智能儲(chǔ)水式電熱水器能適應(yīng)任何天氣變化,普通家庭可直接安裝使用,長(zhǎng)時(shí)間通電可以大流量供熱水。使用時(shí)不產(chǎn)生廢氣,既安全又
11、衛(wèi)生。目前市場(chǎng)上銷售的電熱水器多數(shù)還帶有防觸電裝置。干凈衛(wèi)生,不必分室安裝,調(diào)溫方便。在電熱水器發(fā)展到如今的水平,已經(jīng)可以基本滿足生產(chǎn)生活中的需求。但為求精益求精,當(dāng)今學(xué)者將目光放在了更好的調(diào)節(jié)控制水溫水位上,盡可能得使其更智能化,能夠做到更加的安全穩(wěn)定舒適。我國(guó)在對(duì)電熱水器水溫水位系統(tǒng)的研究已取得很大的成就,并在不斷地完善之中。智能電熱水器水溫水位檢測(cè)器是采用數(shù)字化測(cè)量技術(shù),把連續(xù)的模擬量(電信號(hào))轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表儀器。傳統(tǒng)的電熱水器水溫水位檢測(cè)器功能單一、精度低,不能滿足數(shù)字化時(shí)代的需求,然而采用單片機(jī)的電熱水器水溫水位檢測(cè)器功能多樣化、精度高、抗干擾能力強(qiáng)。本
12、文所研究的電熱水器水溫水位檢測(cè)器是以STC89C52單片機(jī)作為主控制元件來(lái)能實(shí)現(xiàn)熱水器里的水溫顯示在數(shù)碼管。更進(jìn)一步的采用繼電器實(shí)現(xiàn)自動(dòng)控制加熱裝置,是單片機(jī)應(yīng)用在工業(yè)、農(nóng)業(yè)、國(guó)防、醫(yī)藥、衛(wèi)生等各行各業(yè)中的一個(gè)典型而普通的例子,隨著科學(xué)技術(shù)的進(jìn)一步發(fā)展,人們生活水平的不斷提高,智能電熱水器越來(lái)越受人們的青睞,同時(shí)節(jié)安全、節(jié)能、易操作也是不可缺少的。在本設(shè)計(jì)中,研究智能電熱水器的水溫檢測(cè)器非常有意義。2 設(shè)計(jì)容與性能指標(biāo) 本設(shè)計(jì)采用51單片機(jī)+DS18B20溫度傳感器+數(shù)碼管顯示+繼電器+功能按鍵組成。DS18B20溫度傳感器檢測(cè)水溫并將水溫信息轉(zhuǎn)換成電信號(hào)傳送給單片機(jī),單片機(jī)將得到的數(shù)據(jù)進(jìn)行處
13、理、顯示與控制。上電后數(shù)碼管顯示當(dāng)前的水溫溫度,通過(guò)按鍵可設(shè)置水溫值,當(dāng)檢測(cè)到的水溫低于設(shè)置的水溫值時(shí),繼電器吸合接通外部加熱裝置,使水溫達(dá)到設(shè)定水溫值。當(dāng)水溫值超過(guò)設(shè)定水溫值時(shí),繼電器斷開(kāi),停止加熱。溫度檢測(cè)精確到0.1度。并具有掉電保存功能,數(shù)據(jù)保存在單片機(jī)部EEPOM中,按鍵還具有連加、減功能。3 系統(tǒng)方案比較、設(shè)計(jì)與論證 該系統(tǒng)主要由溫度測(cè)量和溫度設(shè)置與系統(tǒng)狀態(tài)顯示三部分電路組成,下面介紹實(shí)現(xiàn)此系統(tǒng)功能的方案。3.1 主控制器模塊方案1:采用可編程邏輯器件CPLD作為控制器。CPLD可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能、規(guī)模大、密度高、體積小、穩(wěn)定性高、IO資源豐富、易于進(jìn)行功能擴(kuò)展。采用并行的
14、輸入輸出方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)模控制系統(tǒng)的控制核心。但本系統(tǒng)不需要復(fù)雜的邏輯功能,對(duì)數(shù)據(jù)的處理速度的要求也不是非常高。且從使用與經(jīng)濟(jì)的角度考慮我們放棄了此方案。方案2:采用STC89C52單片機(jī)作為整個(gè)系統(tǒng)的核心,用其控制水溫測(cè)量控制系統(tǒng),以實(shí)現(xiàn)其既定的性能指標(biāo)。充分分析我們的系統(tǒng),其關(guān)鍵在于實(shí)現(xiàn)水溫的自動(dòng)控制,而在這一點(diǎn)上,單片機(jī)就顯現(xiàn)出來(lái)它的優(yōu)勢(shì)控制簡(jiǎn)單、方便、快捷。這樣一來(lái),單片機(jī)就可以充分發(fā)揮其資源豐富、有較為強(qiáng)大的控制功能與可位尋址操作功能、價(jià)格低廉等優(yōu)點(diǎn)。STC89C52單片機(jī)具有功能強(qiáng)大的位操作指令,I/O口均可按位尋址,程序空間多達(dá)8K,對(duì)于本設(shè)計(jì)也綽綽有余,
15、更可貴的是STC89C52單片機(jī)價(jià)格非常低廉。3.2 溫度測(cè)量方案1: 采用數(shù)字溫度芯片DS18B20 測(cè)量實(shí)際溫度,輸出信號(hào)全數(shù)字化。便于單片機(jī)處理與控制,省去傳統(tǒng)的測(cè)溫方法的很多外圍電路。且該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測(cè)溫元件,此元件線形較好。在0100 攝氏度時(shí),最大線形偏差小于1 攝氏度。DS18B20 的最大特點(diǎn)之一采用了單總線的數(shù)據(jù)傳輸,由數(shù)字溫度計(jì)DS18B20和微控制器STC89C52構(gòu)成的溫度測(cè)量裝置,它直接輸出溫度的數(shù)字信號(hào),可直接與計(jì)算機(jī)連接。這樣,測(cè)溫系統(tǒng)的結(jié)構(gòu)就比較簡(jiǎn)單,體積也不大。采用51 單片機(jī)控制,軟件編程的自由度大,可通過(guò)編程實(shí)現(xiàn)各種各樣的算術(shù)算法和
16、邏輯控制,而且體積小,硬件實(shí)現(xiàn)簡(jiǎn)單,安裝方便。既可以單獨(dú)對(duì)多DS18B20控制工作,還可以與PC 機(jī)通信上傳數(shù)據(jù),另外STC89C52在工業(yè)控制上也有著廣泛的應(yīng)用,編程技術(shù)與外圍功能電路的配合使用都很成熟。方案2: 采用熱電偶溫差電路測(cè)溫,溫度檢測(cè)部分可以使用低溫?zé)崤?,熱電偶由兩個(gè)焊接在一起的異金屬導(dǎo)線所組成(如下圖),熱電偶產(chǎn)生的熱電勢(shì)由兩種金屬的接觸電勢(shì)和單一導(dǎo)體的溫差電勢(shì)組成。通過(guò)將參考結(jié)點(diǎn)保持在已知溫度并測(cè)量該電壓,便可推斷出檢測(cè)結(jié)點(diǎn)的溫度。數(shù)據(jù)采集部分則使用帶有A/D 通道的單片機(jī),在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D 轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上
17、,就可以將被測(cè)溫度顯示出來(lái)。熱電偶的優(yōu)點(diǎn)是工作溫度圍非常寬,且體積小,但是它們也存在著輸出電壓小、容易遭受來(lái)自導(dǎo)線環(huán)路的噪聲影響以與漂移較高的缺點(diǎn),并且這種設(shè)計(jì)需要用到A/D 轉(zhuǎn)換電路,感溫電路比較麻煩。圖1 熱電偶電路圖從以上兩種方案,容易看出方案二的測(cè)溫裝置可測(cè)溫度圍寬、體積小,但是線性誤差較大。方案一的測(cè)溫裝置電路簡(jiǎn)單、精確度較高、實(shí)現(xiàn)方便、軟件設(shè)計(jì)也比較簡(jiǎn)單,故本次設(shè)計(jì)采用了方案一。3.3 設(shè)置溫度方案1: 采用鍵盤(pán)輸入設(shè)置溫度,鍵盤(pán)則可以用4個(gè)按鍵,一個(gè)復(fù)位鍵,一個(gè)功能設(shè)定鍵,一個(gè)加減一個(gè)減鍵。四個(gè)鍵比較常用,而且用到的接口得到了極好的利用,僅需要4個(gè)接口。方案2: 可采用4*4矩陣
18、鍵盤(pán),該鍵盤(pán)需要8個(gè)接口,而我們不需這么多鍵。綜上所述,我們選擇第一種方案。3.4 顯示模塊方案1: 用數(shù)碼管進(jìn)行顯示。數(shù)碼管由于顯示速度快,使用簡(jiǎn)單,顯示效果簡(jiǎn)潔明了而得到了廣泛應(yīng)用。方案 2:用LCD液晶進(jìn)行顯示。LCD由于其顯示清晰,顯示容豐富、清晰,顯示信息量大,使用方便,顯示快速而得到了廣泛的應(yīng)用。單對(duì)于此系統(tǒng)我們不需要顯示豐富的容,而且LCD液晶價(jià)格貴,因此我們放棄了此方案。 綜上所述我們選擇方案13.5 電源選取由于本系統(tǒng)采用電池供電,我們考慮了如下幾種方案為系統(tǒng)供電。方案1:采用5V蓄電池為系統(tǒng)供電。蓄電池具有較強(qiáng)的電流驅(qū)動(dòng)能力以與穩(wěn)定的電壓輸出性能。但是蓄電池的體積過(guò)于龐大,
19、在小型電動(dòng)車上使用極為不方便。因此我們放棄了此方案。方案2:采用3節(jié)1.5 V干電池共4.5V做電源,經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證系統(tǒng)工作時(shí),單片機(jī)、傳感器的工作電壓穩(wěn)定能夠滿足系統(tǒng)的要求,而且電池更換方便。綜上所述采用方案24 系統(tǒng)器件選擇1.溫度傳感器的選擇 由于傳統(tǒng)的熱敏電阻等測(cè)溫元件測(cè)出的一般都是電壓,再轉(zhuǎn)換成對(duì)應(yīng)的溫度,需要比較多的外部元件支持,且硬件電路復(fù)雜,制作成本相對(duì)較高。這里采用DALLAS公司的數(shù)字溫度傳感器DS18B20作為測(cè)溫元件。 圖2外部封裝形式 圖3 傳感器電路圖5 硬件實(shí)現(xiàn)與單元電路設(shè)計(jì)5.1 主控制模塊主控制最系統(tǒng)電路如圖4所示。 圖4 單片主控電路5.2 顯示模塊電路 顯示
20、采用四位數(shù)碼管顯示,當(dāng)位選打開(kāi)時(shí),送入相應(yīng)的段碼,則相應(yīng)的數(shù)碼管打開(kāi),關(guān)掉位選,打開(kāi)另一個(gè)位選,送入相應(yīng)的段碼,則數(shù)碼管打開(kāi),而每次打開(kāi)關(guān)掉相應(yīng)的位選時(shí),時(shí)間間隔低于20ms,從人類視覺(jué)的角度上看,就仿佛是全部數(shù)碼管同時(shí)顯示的一樣。顯示電路如圖5圖5 數(shù)碼管顯示5.3 數(shù)碼管顯示驅(qū)動(dòng)電路三極管8550來(lái)驅(qū)動(dòng)4位數(shù)碼管,不僅簡(jiǎn)單,而且價(jià)格便宜。圖6 驅(qū)動(dòng)電路5.4 溫度傳感器(DS18B20)電路5.4.1 DS18B20基本介紹DS18B20是美國(guó)DALLAS半導(dǎo)體公司推出的第一片支持“一線總線”接口的溫度傳感器,它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化
21、成串行數(shù)字信號(hào)處理器處理。DS18B20進(jìn)行精確的溫度轉(zhuǎn)換,I/O線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個(gè)DS18B20在溫度轉(zhuǎn)換期間工作電流達(dá)到1mA,當(dāng)幾個(gè)溫度傳感器掛在同一根I/O線上進(jìn)行多點(diǎn)測(cè)溫時(shí),只靠4.7K上拉電阻就無(wú)法提供足夠的能量,會(huì)造成無(wú)法轉(zhuǎn)換溫度或溫度誤差極大。因此,下圖電路只適應(yīng)于單一溫度傳感器測(cè)溫情況下使用,不適宜采用電池供電系統(tǒng)中。并且工作電源VCC必須保證在5V,當(dāng)電源電壓下降時(shí),寄生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。圖7 溫度傳感器電路引腳圖5.4.2 DS18B20控制方法DS18B20有六條控制命令:溫度轉(zhuǎn)換 44H 啟動(dòng)DS18B20進(jìn)行溫
22、度轉(zhuǎn)換 讀暫存器 BEH 讀暫存器9個(gè)字節(jié)容 寫(xiě)暫存器 4EH 將數(shù)據(jù)寫(xiě)入暫存器的TH、TL字節(jié) 復(fù)制暫存器 48H 把暫存器的TH、TL字節(jié)寫(xiě)到E2RAM中 重新調(diào)E2RAM B8H 把E2RAM中的TH、TL字節(jié)寫(xiě)到暫存器TH、TL字節(jié) 讀電源供電方式 B4H 啟動(dòng)DS18B20發(fā)送電源供電方式的信號(hào)給主CPU 5.4.3 DS18B20供電方式DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線,3腳接電源。另一種是寄生電源供電方式,如圖3.1所示單片機(jī)端口接單線總線,為保證在有效的DS18B20時(shí)鐘周期提供足夠的電流,可用一個(gè)三極管來(lái)
23、完成對(duì)總線的上拉。本設(shè)計(jì)采用電源供電方式, P2.2口接單線總線為保證在有效的DS18B20時(shí)鐘周期提供足夠的電流,可用一個(gè)上拉電阻和STC89C52的P2.2來(lái)完成對(duì)總線的上拉。當(dāng)DS18B20處于寫(xiě)存儲(chǔ)器操作和溫度A/D變換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開(kāi)啟時(shí)間最大為10 s。采用寄生電源供電方式是VDD和GND端均接地。由于單線制只有一根線,因此發(fā)送接收口必須是三狀態(tài)的。主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)3個(gè)步驟:l 初始化。l ROM操作指令。l 存儲(chǔ)器操作指令。5.5 繼電器加熱控制電路 電路如圖8主要是用來(lái)給外部加熱源加熱的。圖8繼電器加熱電路6 系統(tǒng)軟件設(shè)計(jì)6.1 程
24、序結(jié)構(gòu)分析主程序調(diào)用了3個(gè)子程序,分別是數(shù)碼管顯示程序、溫度信號(hào)處理程序、按鍵設(shè)定報(bào)警溫度程序。溫度信號(hào)處理程序:對(duì)溫度芯片送過(guò)來(lái)的數(shù)據(jù)進(jìn)行處理,進(jìn)行判斷和顯示。數(shù)碼管顯示程序:向數(shù)碼管的顯示送數(shù),控制系統(tǒng)的顯示部分。按鍵設(shè)定程序:可以設(shè)定低溫和高溫報(bào)警可精確到0.1度。6.2 系統(tǒng)程序流圖主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之測(cè)量一次被測(cè)溫度,主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示,讀出并處理DS18B20的當(dāng)前溫度值,與設(shè)定的報(bào)警溫度比較,其程序流程見(jiàn)圖9所示。通過(guò)調(diào)用讀溫度子程序把存入存儲(chǔ)中的整數(shù)部分與小數(shù)
25、部分開(kāi)分存放在不的的兩個(gè)單元中,然后通過(guò)調(diào)用顯示子程序顯示出來(lái)。圖9 DS18B20溫度流程圖6.2.1 DS18B20初始化程序流程圖在DS18B20工作之前需要進(jìn)行初始化,流程圖如下: 圖10 初始化程序流程圖6.2.2 讀溫度子程序流程圖 讀溫度子程序的主要功能是從DS18B20中讀出溫度數(shù)據(jù),移入溫度暫存器保存。其程序流程圖如下: 圖11 溫度子程序流程圖 6.3 程序編寫(xiě)與調(diào)試6.6.1 Keil編譯器軟件簡(jiǎn)介 Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易
26、用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開(kāi)發(fā),體會(huì)更加深刻。Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。下面詳細(xì)介紹Keil C51開(kāi)發(fā)系統(tǒng)各部分功能和使用。圖15 C51工具包整體結(jié)構(gòu)圖Keil C51單片機(jī)軟件開(kāi)發(fā)系統(tǒng)的整體結(jié)構(gòu)C51工具包的整體結(jié)構(gòu),如圖3.1所示,其中uVision與Ishell分別是C51 for Windows和for DOS的集成開(kāi)發(fā)環(huán)境(IDE),可以
27、完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE 本身或其它編輯器編輯C 或匯編源文件。然后分別由C51與A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM 中。6.3.2 使用Keil軟件建立一個(gè)工程 Keil是目前進(jìn)行51單片機(jī)開(kāi)發(fā)最常用的編譯軟件。關(guān)于Keil的使用,有很多的資料介紹,這里只介紹其
28、整個(gè)編譯過(guò)程,在最短時(shí)間開(kāi)始使用Easy 51DP-2開(kāi)發(fā)板。對(duì)于Keil更詳細(xì)的介紹,可以參考一些專門(mén)書(shū)籍資料。在Keil里,每一個(gè)完整的程序,都是以一個(gè)工程的形式建立的。一個(gè)工程里可以有一個(gè)或多個(gè)*.c文件和*.h文件,但只可以有一個(gè)main()函數(shù)。一般的做法是將包含main()函數(shù)的C文件加入到工程中,其他文件以#include頭文件的形式加到這個(gè)C文件里。這樣,在編譯的時(shí)候,其他的文件會(huì)被自動(dòng)的導(dǎo)入到工程里來(lái)。打開(kāi)Keil軟件后,出現(xiàn)(圖16)所示界面。當(dāng)然,如果Keil在上次關(guān)閉時(shí)有打開(kāi)的工程,再一次打開(kāi)時(shí)它會(huì)自動(dòng)加載上一次的工程文件。圖16 Keil軟件主界面 首先點(diǎn)擊Proje
29、ct->New Project(Project->Open Project為打開(kāi)一個(gè)已經(jīng)存在的工程),如圖17所示。圖17 Keil軟件打開(kāi)新工程界面 點(diǎn)開(kāi)后,在出現(xiàn)的對(duì)話框中選擇工程存在路徑,單擊“保存”后,出現(xiàn)(如圖18所示)界面。在此界面上選擇電路板上所用的單片機(jī)型號(hào):Atmel STC89C52(或者是AT89S52,視開(kāi)發(fā)板上具體型號(hào)而定),單擊“確定”。圖18 選擇電路板上所用的單片機(jī)型號(hào) 設(shè)置完成后,軟件會(huì)提示“是否將8051上電初始化程序添加入工程?”如圖19所示,這個(gè)一般選擇“否”。(關(guān)于STARTUP.A51的相關(guān)容可查閱相應(yīng)資料)圖19 是否將8051上電初始
30、化程序添加入工程 這樣,就建立了一個(gè)空的51工程。接下來(lái)的事,就是在這個(gè)工程里面加入自己的程序代碼。點(diǎn)擊,或者File->New,便建立了一個(gè)空的文本框?,F(xiàn)在,就可以開(kāi)始在里面輸入你的代碼了。保存時(shí)注意:如果是用C語(yǔ)言寫(xiě)的程序,則將文本保存成*.c,如果是用匯編寫(xiě)的程序,則將文本存成*.asm。 到目前為步,我們已經(jīng)建立了一個(gè)工程,也寫(xiě)了一個(gè)程序代碼。但現(xiàn)在還不能開(kāi)始編譯。因?yàn)檫€沒(méi)有將程序代碼添加到工程里面去。 下一步就是將寫(xiě)完的程序添加到工程里面,如圖20所示,在左邊Project Workspace里的Source Group 1上右擊,選擇Add Files to Group So
31、urce Group 1。在打開(kāi)的對(duì)話框中,選擇剛存的文件路徑和對(duì)應(yīng)的擴(kuò)展名。這樣,程序就添加進(jìn)了這個(gè)工程。圖20 添加文件到工程中 下一步,就開(kāi)始編譯剛輸入進(jìn)去的代碼。點(diǎn)擊工具欄中的按鈕。接著,Keil會(huì)打出下面的提示:Build target 'Target 1'assembling led.asm.linking.Program Size: data=8.0 xdata=0 code=100"first" - 0 Error(s), 0 Warning(s).其中“"first" - 0 Error(s), 0 Warning(s)
32、.”說(shuō)明現(xiàn)在的工程編譯通過(guò),0個(gè)錯(cuò)誤和0個(gè)警告。建立工程的時(shí)候,默認(rèn)是不生成HEX文件的,得在編譯做如下設(shè)置:?jiǎn)螕?,或者在Project Workspace里Target 1上右擊,選擇“Options for Target Target 1”。出現(xiàn)如圖21所示對(duì)話框,選擇“Output”按圖示,將箭頭所指的多選框勾上,點(diǎn)“確定”?,F(xiàn)在再點(diǎn)擊重新編譯,系統(tǒng)提示:“creating hex file from "first".”。便會(huì)在工程所在文件夾里生成HEX文件。圖21 生成HEX文件6.3.3 使用Debug進(jìn)行調(diào)試 Keil有很強(qiáng)大的調(diào)試功能,可以顯示C程序的反匯編代
33、碼、可以計(jì)算代碼運(yùn)行的時(shí)間、可以顯示程序中某一變量的值能用好這個(gè)調(diào)試工具對(duì)編寫(xiě)單片機(jī)程序會(huì)有很大的幫助。同樣的,在這里,只對(duì)Debug進(jìn)行簡(jiǎn)單應(yīng)用介紹,更詳細(xì)的使用方法可以參看相關(guān)書(shū)籍資料。圖22 調(diào)試前設(shè)置窗口首先,單擊,彈出如圖22所示對(duì)話框,在Target頁(yè)面上設(shè)置對(duì)應(yīng)的晶振頻率。其他不用作修改。設(shè)置完成后,單擊,進(jìn)入調(diào)試界面(如圖23所示)。圖23 Keil調(diào)試界面點(diǎn)擊中對(duì)應(yīng)的工具按鈕則可以開(kāi)始調(diào)試。另外,“View”下的三個(gè)工具在調(diào)試中會(huì)經(jīng)常用到如.圖24所示,“Disassembly Window”顯示C文件的反匯編程序;“Watch & Call Stack Window
34、”可以顯示程序中某一變量的值;“Memory Window”可以顯示存中某一地址的值。圖24 三個(gè)常用的調(diào)試工具7 系統(tǒng)的安裝與調(diào)試7.1 安裝步驟1.檢查元件的好壞按電路圖買好元件后首先檢查買回元件的好壞,按各元件的檢測(cè)方法分別進(jìn)行檢測(cè),一定要仔細(xì)認(rèn)真。而且要認(rèn)真核對(duì)原理圖是否一致,在檢查好后才可上件、焊件,防止出現(xiàn)錯(cuò)誤焊件后不便改正。2.放置、焊接各元件按原理圖的位置放置各元件,在放置過(guò)程中要先放置、焊接較低的元件,后焊較高的和要求較高的元件。特別是容易損壞的元件要后焊,在焊集成芯片時(shí)連續(xù)焊接時(shí)間不要超過(guò)10s,注意芯片的安裝方向。7.2 電路的調(diào)試首先燒入顯示程序,看顯示正不正常。在調(diào)試
35、程序時(shí),發(fā)現(xiàn)有的指令用的不正確,導(dǎo)致電路功能不能完全實(shí)現(xiàn),另外軟件程序中的延時(shí)有的過(guò)長(zhǎng)、有的過(guò)短。類似的現(xiàn)象還有很多就不一一列舉了。7.3 本章小結(jié)本章的主要容是電路的測(cè)試和調(diào)試注意事項(xiàng)結(jié) 論 本設(shè)計(jì)采用51單片機(jī)+DS18B20溫度傳感器+繼電器加熱+數(shù)碼管顯示+功能按鍵組成。DS18B20溫度傳感器檢測(cè)水溫并將水溫信息轉(zhuǎn)換成電信號(hào)傳送給單片機(jī),單片機(jī)將得到的數(shù)據(jù)進(jìn)行處理、顯示與控制。上電后數(shù)碼管顯示當(dāng)前的水溫溫度,通過(guò)按鍵可設(shè)置水溫值,當(dāng)檢測(cè)到的水溫低于設(shè)置的水溫值時(shí),繼電器吸合接通外部加熱裝置,使水溫達(dá)到設(shè)定水溫值。當(dāng)水溫值超過(guò)設(shè)定水溫值時(shí),繼電器斷開(kāi),停止加熱。溫度檢測(cè)精確到0.1度。
36、并具有掉電保存功能,數(shù)據(jù)保存在單片機(jī)部EEPOM中,按鍵還具有連加、減功能。本設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)單,調(diào)試方便,系統(tǒng)反映快速靈活,經(jīng)實(shí)驗(yàn)測(cè)試,該溫度系統(tǒng)設(shè)計(jì)方案正確、可行,各項(xiàng)指標(biāo)穩(wěn)定、可靠。參考文獻(xiàn)1巧媛主編. 單片機(jī)原理與應(yīng)用(第二版). :電子工業(yè),20022全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽組委會(huì)編.第五屆全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽獲獎(jiǎng)作品選編(2001), :理工大學(xué),20033何力民編. 單片機(jī)高級(jí)教程. :航空大學(xué),20004金發(fā)慶等編. 傳感器技術(shù)與應(yīng)用.機(jī)械工業(yè),20025坤、宋戈、洪波、憲棟編51單片機(jī)C語(yǔ)言應(yīng)用開(kāi)發(fā)技術(shù)大全,:人民郵電,20086譚浩強(qiáng)著C程序設(shè)計(jì):清華大學(xué),2007;7王忠飛,胥
37、芳MCS-51 單片機(jī)原理與嵌入式系統(tǒng)應(yīng)用M:電子科技大學(xué),2007P268-2738 Peter Van Der Linden著,徐波譯.C專家編程,人民郵電,2003附錄1 整體電路原理圖附錄2 部分源程序#include <reg52.h>#include "eepom52.h"#define uchar unsigned char #define uint unsigned int/*本設(shè)計(jì)系統(tǒng)是18b20溫度報(bào)警系統(tǒng)數(shù)碼管顯示,可設(shè)置溫度上限高溫報(bào)警和下限低溫報(bào)警,報(bào)警溫度可精確到0.1度,并具有掉電保存功能,數(shù)據(jù)保存在單片機(jī)部EEPOM中,進(jìn)入設(shè)置界
38、面后如果沒(méi)有鍵按下系統(tǒng)會(huì)在30秒后自動(dòng)退出設(shè)置界面,人性化的按鍵設(shè)置,按鍵還具有連加、減功能。*/數(shù)碼管段選定義 0 1 2 3 4 5 6 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /斷碼/數(shù)碼管位選定義uchar code smg_we=0xef,0xdf,0xbf,0x7f;uchar dis_smg8 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;uchar smg_i =
39、 3; /顯示數(shù)碼管的個(gè)位數(shù)sbit dq = P24;/18b20 IO口的定義sbit relay = P25; /繼電器IO口定義sbit beep = P23; /蜂鳴器IO口定義uchar a_a;uint temperature ; /bit flag_300ms ;uchar key_can; /按鍵值的變量uchar menu_1; /菜單設(shè)計(jì)的變量uint t_high = 300,t_low = 100;bit flag_lj_en; /按鍵連加使能bit flag_lj_3_en; /按鍵連3次連加后使能 加的數(shù)就越大了 uchar key_time,flag_value
40、; /用做連加的中間變量bit key_500ms ;uchar flag_clock;uchar zd_break_en,zd_break_value; /自動(dòng)退出設(shè)置界面/*1ms延時(shí)函數(shù)*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*小延時(shí)函數(shù)*/void delay_uint(uint q)while(q-);/*數(shù)碼顯示函數(shù)*/void display()uchar i;for(i=0;i<smg_i;i+)P3 = smg_wei; /位選P1 = dis_smgi; /段選d
41、elay_1ms(1);P3 = 0xff; /位選P1 = 0xff; /消隱 /*把數(shù)據(jù)保存到單片機(jī)部eepom中*/void write_eepom()SectorErase(0x2000);byte_write(0x2000, t_high % 256);byte_write(0x2001, t_high / 256);byte_write(0x2002, t_low % 256);byte_write(0x2003, t_low / 256);byte_write(0x2055, a_a);/*把數(shù)據(jù)從單片機(jī)部eepom中讀出來(lái)*/void read_eepom()t_high =
42、byte_read(0x2001);t_high <<= 8;t_high |= byte_read(0x2000);t_low = byte_read(0x2003);t_low <<= 8;t_low |= byte_read(0x2002);a_a = byte_read(0x2055);/*18b20初始化函數(shù)*/void init_18b20()bit q;dq = 1;/把總線拿高delay_uint(1); /15usdq = 0;/給復(fù)位脈沖delay_uint(80);/750usdq = 1;/把總線拿高 等待delay_uint(10);/110u
43、sq = dq;/讀取18b20初始化信號(hào)delay_uint(20);/200usdq = 1;/把總線拿高 釋放總線/*寫(xiě)18b20的數(shù)據(jù)*/void write_18b20(uchar dat)uchar i;for(i=0;i<8;i+) /寫(xiě)數(shù)據(jù)是低位開(kāi)始dq = 0; /把總線拿低寫(xiě)時(shí)間隙開(kāi)始 dq = dat & 0x01; /向18b20總線寫(xiě)數(shù)據(jù)了delay_uint(5); / 60usdq = 1; /釋放總線dat >>= 1;/*讀取18b20的數(shù)據(jù)*/uchar read_18b20()uchar i,value;for(i=0;i<
44、8;i+)dq = 0; /把總線拿低讀時(shí)間隙開(kāi)始 value >>= 1; /讀數(shù)據(jù)是低位開(kāi)始dq = 1; /釋放總線if(dq = 1) /開(kāi)始讀寫(xiě)數(shù)據(jù) value |= 0x80;delay_uint(5); /60us讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間return value; /返回?cái)?shù)據(jù)/*讀取溫度的值 讀出來(lái)的是小數(shù)*/uint read_temp()uint value;uchar low; /在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序init_18b20(); /初始化18b20write_18b20(0xcc); /跳
45、過(guò)64位ROMwrite_18b20(0x44); /啟動(dòng)一次溫度轉(zhuǎn)換命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳過(guò)64位ROMwrite_18b20(0xbe); /發(fā)出讀取暫存器命令EA = 0;low = read_18b20(); /讀溫度低字節(jié)value = read_18b20(); /讀溫度高字節(jié)EA = 1;value <<= 8; /把溫度的高位左移8位value |= low; /把讀出的溫度低位放到value的低八位中value *= 0.625; /轉(zhuǎn)換到溫度值 小數(shù)
46、return value; /返回讀出的溫度 帶小數(shù)/*定時(shí)器0初始化程序*/void time_init()EA = 1; /開(kāi)總中斷TMOD = 0X01; /定時(shí)器0、定時(shí)器1工作方式1ET0 = 1; /開(kāi)定時(shí)器0中斷 TR0 = 1; /允許定時(shí)器0定時(shí)/*獨(dú)立按鍵處理函數(shù)*/void key()static uchar key_new = 0,key_old = 0,key_value = 0;if(key_new = 0) /按鍵松開(kāi)的時(shí)候做松手檢測(cè)if(P2 & 0x0f) = 0x0f)key_value +;else key_value = 0;if(key_val
47、ue >= 10)write_eepom();key_value = 0;key_new = 1;flag_lj_en = 0;/關(guān)閉連加使能flag_lj_3_en = 0;/關(guān)閉3秒后使能flag_value = 0;/清零else if(P2 & 0x0f) != 0x0f)key_value +; /按鍵按下的時(shí)候else key_value = 0;if(key_value >= 7)key_value = 0;key_new = 0;flag_lj_en = 1; /連加使能zd_break_en = 1; /自動(dòng)退出設(shè)置界使能zd_break_value =
48、0; /自動(dòng)退出設(shè)置界變量清零key_can = 20;if(key_500ms = 1)key_500ms = 0;zd_break_en = 1; /自動(dòng)退出設(shè)置界使能zd_break_value = 0; /自動(dòng)退出設(shè)置界變量清零key_new = 0;key_old = 1;if(key_new = 0) && (key_old = 1)switch(P2 & 0x0f)case 0x0e: key_can = 4; break; /得到k1鍵值case 0x0d: key_can = 3; break; /得到k2鍵值case 0x0b: key_can =
49、2; break; /得到k3鍵值case 0x07: key_can = 1; break; /得到k4鍵值key_old = key_new;/*按鍵處理數(shù)碼管顯示函數(shù)*/void key_with()if(key_can = 4)menu_1 +;if(menu_1 >= 3)menu_1 = 0;if(menu_1 = 0)dis_smg0 = smg_dutemperature % 10; /取溫度的小數(shù)顯示dis_smg1 = smg_dutemperature / 10 % 10 & 0x7f; /取溫度的個(gè)位顯示dis_smg2 = smg_dutemperatu
50、re / 100 % 10 ; /取溫度的十位顯示smg_i = 3;if(menu_1 = 1)dis_smg0 = smg_dut_high % 10; /取小數(shù)顯示dis_smg1 = smg_dut_high / 10 % 10 & 0x7f; /取個(gè)位顯示dis_smg2 = smg_dut_high / 100 % 10 ; /取low十位顯示dis_smg3 = 0x89;smg_i = 4;if(menu_1 = 2)dis_smg0 = smg_dut_low % 10; /取low小數(shù)顯示dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; /取個(gè)位顯示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位顯示dis_smg3 = 0xc7;smg_i = 4;if(menu_1 = 1)/設(shè)置高溫報(bào)警if(key_can = 3)if(flag_lj_3_en = 0)t_high + ;/按鍵按下未松開(kāi)自動(dòng)加三次else t_high += 10;/按鍵按下未松開(kāi)自動(dòng)加三次之后每次自動(dòng)加10if(t_high > 990)t_high = 990;dis_smg0 = smg_dut_high
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何在信息系統(tǒng)項(xiàng)目管理師考試中掌握使用案例分析法試題及答案
- 項(xiàng)目管理軟件的比較分析試題及答案
- 軟件設(shè)計(jì)師考試課程設(shè)置試題及答案
- 考試評(píng)分標(biāo)準(zhǔn)下的軟件設(shè)計(jì)師試題及答案
- 項(xiàng)目管理中時(shí)間估算技巧試題及答案
- 機(jī)電工程環(huán)境監(jiān)測(cè)技術(shù)試題及答案
- 公共政策的執(zhí)行性與考量因素試題及答案
- 網(wǎng)絡(luò)設(shè)計(jì)文檔撰寫(xiě)要點(diǎn)試題及答案
- 科技與社會(huì)政策相結(jié)合的創(chuàng)新路徑試題及答案
- 深入探討云計(jì)算與網(wǎng)絡(luò)的結(jié)合點(diǎn)與試題及答案
- 冠寓運(yùn)營(yíng)管理手冊(cè)正式版
- 單位(子單位)工程觀感質(zhì)量核查表
- 熱力管網(wǎng)施工組織設(shè)計(jì)方案標(biāo)書(shū)
- 納豆激酶知識(shí)講座
- 蘇教版三下第十單元期末復(fù)習(xí)教材分析
- 機(jī)械通氣基礎(chǔ)知識(shí)及基礎(chǔ)操作課件
- 打印版醫(yī)師執(zhí)業(yè)注冊(cè)健康體檢表(新版)
- 1.3.1動(dòng)量守恒定律課件(共13張PPT)
- DB36_T 420-2019 江西省工業(yè)企業(yè)主要產(chǎn)品用水定額(高清無(wú)水印-可復(fù)制)
- 中小學(xué)教育懲戒規(guī)則(試行)全文解讀ppt課件
- TCECS 850-2021 住宅廚房空氣污染控制通風(fēng)設(shè)計(jì)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論