找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 30041|回復(fù): 19
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)電熱水器控制系統(tǒng)設(shè)計(jì)文檔 已經(jīng)制作成品成功

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

摘要


電熱水器作為人們生活中不可或缺的家用電器之一,對(duì)我們的生活水平有著重要的影響,常用的熱水器主要分為以下三種:燃?xì)馐綗崴鳎?yáng)能熱水器以及電熱水器。
太陽(yáng)能熱水器雖然有沒(méi)有污染的優(yōu)點(diǎn),但是其使用受到天氣與位置的較大限制,加之其不能對(duì)溫度進(jìn)行有效控制;燃?xì)鉄崴麟m然不用受到上面的限制,但是人們通常會(huì)對(duì)其使用過(guò)程中的一些危險(xiǎn),如一氧化碳中毒和燃?xì)庑孤┑膿?dān)心,加之其安裝過(guò)程非常繁瑣,也漸漸淡出人們的視線;而電熱水器在具有其上優(yōu)點(diǎn)的同時(shí),其安裝十分方便,同時(shí)在當(dāng)今時(shí)代,電熱水器的各方面的研發(fā)已經(jīng)十分的成熟,安全性也能很好的得到保證。
而隨著科技的發(fā)展,傳統(tǒng)的機(jī)械式控制系統(tǒng)一難以滿足人們對(duì)高生活水平的要求,而在微處理器技術(shù)、傳感器技術(shù)的進(jìn)一步成熟的現(xiàn)今社會(huì),電熱水器開(kāi)始摒棄傳統(tǒng)的機(jī)械式的控制方式,轉(zhuǎn)而采用全新的控制方式,,以微處理器為核心,通過(guò)傳感器測(cè)溫,然后再通過(guò)顯示屏顯示,輔以友好的人機(jī)界面,從而實(shí)現(xiàn)熱水器的智能使控制方法。
本文完成的控制系統(tǒng)是利用AT89S52單片機(jī)作為控制核心的,然后利用其現(xiàn)有接口外接各種硬件模塊,主要有:溫度測(cè)量電路,實(shí)時(shí)時(shí)鐘電路,鍵盤,看門狗電路,加熱開(kāi)關(guān),LED顯示電路。
軟件部分主要是為實(shí)現(xiàn)系統(tǒng)功能而進(jìn)行的C語(yǔ)言編程。
本系統(tǒng)為一款智能式電熱水器,使用獨(dú)立鍵盤輸入各種指令,使用DS18B20測(cè)量溫度,測(cè)量溫度精度可達(dá)到0.01℃,采用一塊LCD顯示屏顯示所需要顯示的各種數(shù)據(jù),便于用戶的操作,通過(guò)用戶的各種事先指令,對(duì)單片機(jī)進(jìn)行操作,達(dá)到控制熱水器的加熱系統(tǒng)的工作狀態(tài),基本達(dá)到了對(duì)熱水器的控制的目的。


目錄
第一章 緒論1
1.1引言              1
1.2選題背景與意義              1
1.3研究現(xiàn)狀              2
1.4研究?jī)?nèi)容              2
1.5本文結(jié)構(gòu)              4
第二章 電熱水器控制系統(tǒng)設(shè)計(jì)方案4
2.1系統(tǒng)功能說(shuō)明
2.2系統(tǒng)主要實(shí)現(xiàn)功能
2.3系統(tǒng)整體設(shè)計(jì)方案
2.4方案論證
第三章 主要元件介紹
3.1單片機(jī)系統(tǒng)模塊介紹
3.1.1 AT89S52單片機(jī)的主要性能
3.1.2 AT89S52管腳功能說(shuō)明
3.1.3單片機(jī)的最小系統(tǒng)
3.2溫度檢測(cè)模塊
3.2.1 DS18B20的主要功能及特點(diǎn)
3.2.2DS18B20的內(nèi)部結(jié)構(gòu)
3.2.3 DS18B20的工作時(shí)序
第四章 硬件模塊的設(shè)計(jì)
4.1 溫度采集模塊
4.2實(shí)時(shí)時(shí)鐘電路模塊
4.2.1 DS1302的介紹
4.2.2實(shí)時(shí)時(shí)鐘模塊原理圖
4.3鍵盤輸入模塊
4.4繼電器加熱模塊
4.5 LCD顯示模塊設(shè)計(jì)
4.5.1 LCD模塊概述
4.5.2 LCD模塊硬件說(shuō)明
4.5.3 內(nèi)部控制指令
4.5.4顯示硬件設(shè)計(jì)原理圖
4.6其余硬件模塊設(shè)計(jì)
第五章系統(tǒng)軟件設(shè)計(jì)
5.1主程序模塊
5.2 DS18B20測(cè)溫模塊
5.3實(shí)時(shí)時(shí)鐘模塊
5.4 LCD顯示模塊            
5.5鍵址返回程序
5.6測(cè)試及性能分析            


  •                  緒  論

1.1引言

我國(guó)作為熱水器生產(chǎn)的大國(guó),近年來(lái)熱水器的發(fā)展十分迅速,而熱水器主要有三個(gè)研究方向:太陽(yáng)能,燃?xì)馐脚c電熱式。近年來(lái)因?yàn)閱纹瑱C(jī)技術(shù)的發(fā)展,傳感器技術(shù)的漸漸成熟,電熱水器的數(shù)字化與精確控制已經(jīng)變成可能。
作為一種需要在浴室,洗手間與廚房中使用的電器,這種電熱水器采用水電分離的控制方式,即采用小電流低電壓的控制電路來(lái)控制高電壓大電流的加熱電路,一般情況下,使用十分安全。并且在安全可靠的基礎(chǔ)上,這種熱水器還提供清楚的溫度顯示與方便的溫度調(diào)節(jié)裝置,所以在目前的市場(chǎng)上十分受到歡迎。

1.2選題背景與意義

本文對(duì)電熱水器的控制系統(tǒng)進(jìn)行可研究,具體研究的意義如下:
1) 隨著傳感器測(cè)量技術(shù)的漸漸成熟,這種技術(shù)被廣泛的運(yùn)用在了在傳統(tǒng)測(cè)溫方式不便于溫度測(cè)量的場(chǎng)合,而且傳感器作為測(cè)量元件其相較于傳統(tǒng)測(cè)溫系統(tǒng),測(cè)量精度與可靠性得到了進(jìn)一步的提升,這一技術(shù)在當(dāng)時(shí)與以后的時(shí)間里得到了發(fā)展與完善,迅速的顯示出來(lái)其對(duì)于傳統(tǒng)的物理式的溫度測(cè)量系統(tǒng)的優(yōu)越性。[1]
2) 在這一系統(tǒng)中(溫度采集與控制),我們要求對(duì)溫度進(jìn)行實(shí)時(shí)控制,單片機(jī)具有極強(qiáng)的處理能力,將其運(yùn)用在溫度控制系統(tǒng)中就具備了傳統(tǒng)的控制電路所不具有的實(shí)時(shí)控制能力,隨著單片機(jī)技術(shù)的發(fā)展成熟以及周邊元件的開(kāi)發(fā),其控制方式變得越來(lái)越簡(jiǎn)單,并且其相較于傳統(tǒng)控制電路,可以大幅度的提高溫度控制的精度,從而達(dá)到更高的技術(shù)要求。
3)單片機(jī)由于體積小重量輕、價(jià)格便宜、功耗低,控制能力強(qiáng)及運(yùn)算速度快等特點(diǎn),因而采用其作為主控芯片,使整個(gè)系統(tǒng)設(shè)計(jì)簡(jiǎn)單易行,成本低廉,使用方便。
4)就目前來(lái)看,隨著天然氣價(jià)格上漲以及高層住房的普及,燃?xì)馐綗崴髋c太陽(yáng)能式熱水器因?yàn)槠渥陨淼娜毕荻ナ袌?chǎng)占有率,而電熱水器由于其自身不會(huì)受到這種限制,并且電熱水器由于其小巧的外形、快速的加熱速度、節(jié)能的設(shè)計(jì)、可靠地安全性等特點(diǎn)所以在今后的熱水器市場(chǎng)上必將作為一種主流熱水器出現(xiàn)。
所以選取電熱水器的控制系統(tǒng)作為此次的研究課題是具有十分重要的意義的。

1.3研究現(xiàn)狀
    電熱水器在中國(guó)的歷史已經(jīng)有10多年了,期間也經(jīng)歷了數(shù)次起落的過(guò)程,在上個(gè)世紀(jì)的最后幾年,隨著國(guó)外品牌的進(jìn)入和國(guó)內(nèi)一些大家電廠的目光轉(zhuǎn)向電熱水器,儲(chǔ)水式電熱水器能適應(yīng)任何天氣變化,普通家庭可直接安裝使用,長(zhǎng)時(shí)間通電可以大流量供熱水。使用時(shí)不產(chǎn)生廢氣,既安全又衛(wèi)生。目前市場(chǎng)上銷售的電熱水器多數(shù)還帶有防觸電裝置。干凈衛(wèi)生,不必分室安裝,調(diào)溫方便。隨著技術(shù)的成熟,今后將朝著保溫層整體發(fā)泡技術(shù)、溫控器置入內(nèi)膽、加熱管下潛式設(shè)計(jì)、節(jié)能免更換幾個(gè)方面發(fā)展。
熱水器是一種可供浴室,洗手間及廚房使用的家用電器。據(jù)國(guó)務(wù)院發(fā)展研究中心市場(chǎng)經(jīng)濟(jì)研究所統(tǒng)計(jì)數(shù)據(jù)表明:近年來(lái)我國(guó)熱水器的銷量每年以 25%的速度上升,在未來(lái)五年內(nèi),銷售額每年可達(dá)近500億以上。眾所周知,燃?xì)鉄崴饕蚱浒踩[患及越來(lái)越高的使用成本正漸漸淡出熱水器市場(chǎng),而太陽(yáng)能熱水器也因其嚴(yán)格受天氣氣候及安裝條件影響而很難占據(jù)更大的市場(chǎng)份額,所以電熱水器迅速崛起而不斷壯大。為了滿足人們對(duì)現(xiàn)代電器的智能化的要求,利用目前電子技術(shù)的最新成果改善電熱水器的性能已經(jīng)完全可能和必要。本課題將以單片機(jī)為控制核心,實(shí)現(xiàn)對(duì)熱水器的自動(dòng)控制,設(shè)計(jì)出一款具有自動(dòng)化、智能化、易于操作、控制精度高、性價(jià)比高的電熱水器控制系統(tǒng)。

1.4本文研究?jī)?nèi)容

1)本文所研究的電熱水器控制系統(tǒng)由7個(gè)部分組成:?jiǎn)纹瑱C(jī)以及外部電路、電源電路、按鍵輸入電路、LED數(shù)碼管及指示燈電路、報(bào)警電路、加熱控制電路和溫度采集電路。
2)作為最重要的主控芯片,我們選用51系列單片機(jī)作為核心來(lái)進(jìn)行此次的設(shè)計(jì)。單片機(jī)作為微型計(jì)算機(jī)的一種,是嵌入式微機(jī)系統(tǒng),是作為其他系統(tǒng)的組成部分使用的,在物理結(jié)構(gòu)上嵌于其它系統(tǒng)之中,英文為Embedded Systems。嵌入式系統(tǒng)將計(jì)算機(jī)硬件和軟件結(jié)合起來(lái),構(gòu)成一個(gè)專門的計(jì)算裝置,實(shí)現(xiàn)特定的功能。它是一個(gè)大系統(tǒng)或大的電子設(shè)備中的一部分,工作在一個(gè)與外界發(fā)生交互并受時(shí)間約束的環(huán)境中,在沒(méi)有人工干預(yù)的情況下進(jìn)行實(shí)時(shí)控制。自從20世紀(jì)70年代以來(lái),單片機(jī)經(jīng)歷了初級(jí)、發(fā)展、高速發(fā)展三個(gè)階段。單片機(jī)性能不斷地完善,性能價(jià)格比顯著提高,種類和型號(hào)快速增加。從性能和用途上看,單片機(jī)正朝著面向多層次用戶的多品種多規(guī)格方向發(fā)展,哪一個(gè)應(yīng)用領(lǐng)域前景廣闊,就有這個(gè)領(lǐng)域的特殊單片機(jī)出現(xiàn)。近幾年來(lái),單片機(jī)以其集成度和性價(jià)比高、體積小等優(yōu)點(diǎn),在工業(yè)自動(dòng)化、過(guò)程控制、數(shù)字儀器儀表、通信系統(tǒng)以及家用電器產(chǎn)品中有著不可替代的作用。
3)220V交流電加熱裝置的通斷由繼電器控制,其中繼電器中的保險(xiǎn)絲會(huì)在溫度過(guò)高的情況下會(huì)熔斷,防止加熱管干燒,并且在單片機(jī)上還加上發(fā)光二極管顯示加熱電路的工作情況。

1.5本文結(jié)構(gòu)

本文以對(duì)單片機(jī)的研究作為基礎(chǔ),對(duì)DS18B20及單片機(jī)控制顯示,輸入輸出等方面進(jìn)行了研究,全文分為6章,各章內(nèi)容如下:
第一章主要介紹了電熱水器控制系統(tǒng)的基本概念、特點(diǎn)研究現(xiàn)狀,闡述了電熱水器的研究背景以及研究意義,概括的闡述了本次設(shè)計(jì)的主要內(nèi)容。
第二章表明了本次設(shè)計(jì)的技術(shù)指標(biāo)要求,主要介紹了采用的幾個(gè)設(shè)計(jì)方案與各自的優(yōu)缺點(diǎn),并在最后表明了本次設(shè)計(jì)最終所采用的方案。
第三章闡述所選擇的幾個(gè)重要元件的特點(diǎn)與性能第四章主要介紹了電熱水器控制系統(tǒng)的硬件電路的設(shè)計(jì),主要介紹了各模塊的設(shè)計(jì)方案。
第四章對(duì)系統(tǒng)的硬件模塊的設(shè)計(jì)進(jìn)行闡述,對(duì)各硬件的原理及主要參數(shù)進(jìn)行了描述。
第五章對(duì)系統(tǒng)的軟件設(shè)計(jì)進(jìn)行闡述,以流程圖為線索對(duì)各個(gè)模塊的軟件程序的設(shè)計(jì)方案進(jìn)行了介紹。
第六章總結(jié)了全文的研究工作,給出了存在的問(wèn)題與進(jìn)一步的研究方向。


第二章 電熱水器控制系統(tǒng)設(shè)計(jì)方案

2.1系統(tǒng)功能說(shuō)明

本設(shè)計(jì)采用AT89S52單片機(jī)作為主控芯片,利用數(shù)字式溫度傳感器DS18B20作為溫度采集裝置采集溫度,將溫度信號(hào)傳送給單片機(jī)后通過(guò)一片液晶顯示屏顯示出來(lái)。
系統(tǒng)工作的溫度可以通過(guò)電路板上的按鍵自主進(jìn)行設(shè)定。
系統(tǒng)采用了一個(gè)繼電器,用單片機(jī)為主的控制系統(tǒng)控制繼電器觸電的吸合,來(lái)控制交流電加熱電路,達(dá)到以弱電控制強(qiáng)電的目的。
系統(tǒng)必須設(shè)置溫度報(bào)警系統(tǒng),即達(dá)到設(shè)定溫度的上限時(shí)揚(yáng)聲器報(bào)警,系統(tǒng)自動(dòng)斷電,當(dāng)溫度恢復(fù)時(shí),系統(tǒng)重新恢復(fù)工作。

2.2系統(tǒng)主要實(shí)現(xiàn)功能

系統(tǒng)主要功能如下:
1)測(cè)量熱水器內(nèi)的溫度,并通過(guò)顯示屏實(shí)時(shí)顯示溫度值,顯示范圍為0℃~70℃。
2)正常狀態(tài)下顯示系統(tǒng)時(shí)鐘。
3)可手動(dòng)設(shè)定時(shí)鐘時(shí)間即對(duì)時(shí)鐘進(jìn)行校準(zhǔn)。
4)可以人工設(shè)定熱水器內(nèi)的燒水溫度,范圍在20℃~70℃之間,也可以無(wú)需設(shè)定,打開(kāi)后自動(dòng)燒水,溫度上限為70℃。
5)具備定時(shí)功能,限定燒水時(shí)間。
6)可以立即開(kāi)機(jī)或在24小時(shí)內(nèi)任意設(shè)定開(kāi)機(jī)時(shí)間。
7)當(dāng)熱水器內(nèi)沒(méi)有水時(shí),有報(bào)警提示,并開(kāi)關(guān)自動(dòng)關(guān)閉,即有防止干燒功能。
8)要求熱水器有一定的抗干擾的功能。

2.3系統(tǒng)整體設(shè)計(jì)方案

電熱水器控制系統(tǒng)的整體設(shè)計(jì)方案包括硬件設(shè)計(jì)與軟件設(shè)計(jì)方案,硬件方案主要是指以單片機(jī)為核心,包括外接的溫度采集電路,實(shí)時(shí)時(shí)鐘電路,鍵盤,熱水器加熱開(kāi)關(guān),液晶顯示電路,報(bào)警電路以及復(fù)位電路。具體硬件框圖如圖2.1所示


2.4方案論證

按照前面的課題要求,我們首先確定運(yùn)用單片機(jī)AT89S52作為本次設(shè)計(jì)的核心部件。
在溫度采集方面有多種選擇,常見(jiàn)的溫度傳感器分為以下幾種:熱敏電阻式溫度傳感器、熱電阻式溫度傳感器、熱電偶式溫度傳感器、模擬集成溫度傳感器、智能溫度傳感器。本次設(shè)計(jì)原本選擇的是pt1000鉑電阻溫度傳感器,其作為高精度的溫度敏感元件,具有測(cè)溫范圍大,測(cè)溫精度高,穩(wěn)定性好,示值復(fù)現(xiàn)性高與耐氧化等特點(diǎn),常被用作0℃~926℃溫度區(qū)間內(nèi)的標(biāo)準(zhǔn)溫度計(jì),其特性曲線為:-200°C~0°C時(shí),Rt=R0[1+At+Bt2+c(t-100)t3];0°C~650°C時(shí),Rt=R0[1+At+Bt2]。(Rt為溫度為t°C時(shí)熱電阻的阻值,R0為0°C時(shí)的阻值,A、B、C為實(shí)驗(yàn)測(cè)定的常數(shù),A=3.90802×10-2,B=5.802×10-7,C=-4.22×10-7)本系統(tǒng)使用的R0為1000Ω。而要將pt1000作為本次設(shè)計(jì)的元件,還需要語(yǔ)氣配套的傳感器測(cè)量電路與放大電路兩部分,具體電路如圖2.2所示。[12]
但是在實(shí)際購(gòu)買時(shí)發(fā)現(xiàn)pt1000電阻由于價(jià)格過(guò)高,所以在最終設(shè)計(jì)中并沒(méi)有采用pt1000作為測(cè)溫元件來(lái)使用,同時(shí),在同組同學(xué)推薦下采用了另一種集成式溫度傳感器DS18B20作為測(cè)溫元件,DS18B20雖然測(cè)溫范圍比pt1000小,但是在滿足本設(shè)計(jì)要求的基礎(chǔ)上,其價(jià)格不到pt1000的一半,并且其硬件電路由于舍去了普通傳感器所需附帶的A/D電路的設(shè)計(jì),所以其硬件電路的設(shè)計(jì)更加簡(jiǎn)單,所以采用了DS18B20作為最終設(shè)計(jì)中的測(cè)溫元件。[11]

本次設(shè)計(jì)的要求是選擇51單片機(jī)作為核心的處理器,但是市場(chǎng)上做51單片機(jī)的廠商有很多家,其中比較著名的有STC公司、MICROCHIP公司、德州儀器公司、Intel公司、ATMEL公司、Philips公司、Siemens公司。[9]
其中STC公司的STC單片機(jī)主要是基于8051內(nèi)核,是新一代增強(qiáng)型單片機(jī),指令代碼完全兼容傳統(tǒng)8051,速度快8~12倍,帶ADC,4路PWM,雙串口,有全球唯一ID號(hào),加密性好,抗干擾強(qiáng)。
還有MICROCHIP公司的PIC單片機(jī),其突出的特點(diǎn)是體積小,功耗低,精簡(jiǎn)指令集,抗干擾性好,可靠性高,有較強(qiáng)的模擬接口,代碼保密性好,大部分芯片有其兼容的FLASH程序存儲(chǔ)器的芯片.
PHILIPS公司的PHLIPIS 51LPC系列單片機(jī)是基于80C51內(nèi)核的單片機(jī),嵌入了掉電檢測(cè)、模擬以及片內(nèi)RC振蕩器等功能,這使51LPC在高集成度、低成本、低功耗的應(yīng)用設(shè)計(jì)中可以滿足多方面的性能要求。
ATMEl公司的8位單片機(jī)有AT89、AT90兩個(gè)系列,AT89系列是8位Flash單片機(jī),與8051系列單片機(jī)相兼容,靜態(tài)時(shí)鐘模式;AT90系列單片機(jī)是增強(qiáng)RISC結(jié)構(gòu)、全靜態(tài)工作方式、內(nèi)載在線可編程Flash的單片機(jī),也叫AVR單片機(jī)。
而作為第一次使用單片機(jī)做獨(dú)立設(shè)計(jì),我選用的是ATMEL公司的AT89S52單片機(jī),AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash 儲(chǔ)存器。使用Atmel 公司高密度非易失性儲(chǔ)存器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序編程器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。

眾所周知,單片機(jī)的程序?qū)懭脒^(guò)程不是一帆風(fēng)順的,其常常需要多次的寫入與調(diào)試的過(guò)程,這里采用AT89S52的優(yōu)點(diǎn)就是AT89S52額外添加了8k在系統(tǒng)可編程(即ISP)Flash存儲(chǔ)器,特意設(shè)計(jì)為方便在線編程,使得其下載線電路簡(jiǎn)單,且可實(shí)現(xiàn)并行和或者串行模式的在線編程,使得每一次的程序下載與調(diào)試不必將單片機(jī)從PCB板上拔下,這樣不僅使程序調(diào)試變得更加方便,其次還會(huì)大大延長(zhǎng)單片機(jī)與PCB板的壽命。
由于本次設(shè)計(jì)需要有定時(shí)開(kāi)關(guān)機(jī)的功能,而單片機(jī)其內(nèi)部時(shí)鐘只能作為其內(nèi)部程序運(yùn)行的基準(zhǔn)而不能滿足設(shè)計(jì)的要求,所以外接了一個(gè)時(shí)鐘芯片來(lái)滿足本次設(shè)計(jì)的要求。[10]
市面上的主流的時(shí)鐘芯片有DS1302、 DS1307、PCF8485、SB2068等等。這些芯片結(jié)構(gòu)簡(jiǎn)單,價(jià)格低廉,而實(shí)時(shí)時(shí)鐘電路DS1302是DALLAS公司的一種具有涓細(xì)電流充電能力的電路,主要特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768kHz晶振。
在顯示方面采用一個(gè)液晶顯示屏來(lái)顯示主要的參數(shù),液晶顯示屏相對(duì)于LED數(shù)碼管雖然編程方面更加繁瑣,但是相對(duì)的其還具有更多的優(yōu)點(diǎn),其除了可以順利的顯示數(shù)字之外,還可以對(duì)顯示的數(shù)字進(jìn)行簡(jiǎn)單的注釋,使得人機(jī)操作界面變得更加友好,其次在有關(guān)網(wǎng)站上也可以順利的查找到有關(guān)DS1302的信號(hào)顯示程序,本次顯示界面除了有溫度的顯示還需要有時(shí)間的顯示,定時(shí)操作信號(hào)的顯示,采用LCD顯示屏使操作顯得更加方便。[6]
在鍵盤的選擇上,有兩種選擇:一是采用獨(dú)立式按鍵鍵盤,第二種是采用矩陣式鍵盤。矩陣式一般鍵盤采用4*4式鍵盤,而本次設(shè)計(jì)中并不需要如此多的功能按鍵,所以本次設(shè)計(jì),選擇了獨(dú)立式按鍵,本次總共使用了6個(gè)按鍵。其中按鍵1的功能是系統(tǒng)的復(fù)位,按鍵2的功能是實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘的時(shí)間校準(zhǔn)功能,按鍵3實(shí)現(xiàn)的功能是實(shí)現(xiàn)燒水溫度的設(shè)置功能,按鍵4實(shí)現(xiàn)的功能是燒水定時(shí)功能的設(shè)置,按鍵5與按鍵6分別是“+”“—”功能鍵。
然后本次設(shè)計(jì)中還加入了一個(gè)發(fā)光二極管與蜂鳴器。
發(fā)光二極管用來(lái)顯示繼電器的閉合狀況,使得加熱電路的通斷能夠被更直接的觀察。
而加入蜂鳴器的作用是在進(jìn)行某項(xiàng)操作時(shí)進(jìn)行指示作用,還有在達(dá)到燒水溫度或者定時(shí)時(shí)間到的時(shí)候起到報(bào)警作用。



第三章 主要元件介紹

3.1單片機(jī)系統(tǒng)模塊介紹

AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K在線可編程Flash 存儲(chǔ)器,使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在線可編程,亦適于常規(guī)編程器。在一個(gè)芯片上,擁有靈巧的8 位CPU 和在線可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。[1]
AT89S52具有以下標(biāo)準(zhǔn)功能:8K字節(jié)的Flash,256字節(jié)的RAM,32 位I/O 口,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件,可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作;掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。

3.1.1 AT89S52單片機(jī)的主要性能

與MCS-51單片機(jī)產(chǎn)品兼容
8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器
1000次擦寫周期
全靜態(tài)操作:0Hz~33Hz
三級(jí)加密程序存儲(chǔ)器
32個(gè)可編程I/O口線
三個(gè)16位定時(shí)器/計(jì)數(shù)器
八個(gè)中斷源
全雙工UART串行通道
低功耗空閑和掉電模式
掉電后中斷可喚醒
看門狗定時(shí)器
雙數(shù)據(jù)指針
掉電標(biāo)識(shí)符

3.1.2 AT89S52管腳功能說(shuō)明

AT89S52引腳如圖3.1所示。


圖3.1  AT89S52引腳結(jié)構(gòu)圖
VCC :電源
GND : 接地
P0口: P0口是一個(gè)8位漏極開(kāi)路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用,在這種模式下,P0具有內(nèi)部上拉電阻。在flash編程時(shí),P0口也用來(lái)接收指令字節(jié),在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),P0口需要外部上拉電阻。
表3.1 P1口第二功能


P1口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P1 輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL 邏輯電平。對(duì)P1 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如表3.1所示。在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。
P2口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL 邏輯電平。對(duì)P2 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問(wèn)外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX @DPTR)時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX @RI)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。
P3口:P3 口是一個(gè)有內(nèi)部上拉電阻的8 位雙向I/O 口,P3 輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL 邏輯電平。對(duì)P3 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如表3.2所示。在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。
表3.2  P3口第二功能


RST:復(fù)位輸入。晶振工作時(shí),RST腳持續(xù)2個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位。看門狗計(jì)時(shí)完成后,RST 腳輸出96個(gè)晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無(wú)效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。
ALE/PROG:地址鎖存控制信號(hào)(ALE)是訪問(wèn)外部程序存儲(chǔ)器時(shí),鎖存低8 位地址的輸出脈沖。在flash編程時(shí),此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來(lái)作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE脈沖將會(huì)跳過(guò)。如果需要,通過(guò)將地址為8EH的SFR的第0位置“1”,ALE操作將無(wú)效。這一位置 “1”,ALE 僅在執(zhí)行MOVX 或MOVC指令時(shí)有效。否則,ALE 將被微弱拉高。這個(gè)ALE 使能標(biāo)志位(地址為8EH的SFR的第0位)的設(shè)置對(duì)微控制器處于外部執(zhí)行模式下無(wú)效。
PSEN:外部程序存儲(chǔ)器選通信號(hào)(PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng)AT89S52從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN在每個(gè)機(jī)器周期被激活兩次,而在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN將不被激活。
EA/VPP:訪問(wèn)外部程序存儲(chǔ)器控制信號(hào)。為使能從0000H 到FFFFH的外部程序存儲(chǔ)器讀取指令,EA必須接GND.為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12V的VPP電壓。
XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。
XTAL2:振蕩器反相放大器的輸出端。[7]

3.1.3單片機(jī)的最小系統(tǒng)

單片機(jī)的最小系統(tǒng)是指運(yùn)用最少的元件使單片機(jī)運(yùn)行的系統(tǒng),一般包括一下的幾個(gè)部分:晶振電路、復(fù)位電路、電源電路和串口電路。
晶振是電路中常用用的時(shí)鐘元件,全稱是叫晶體震蕩器,在單片機(jī)系統(tǒng)里晶振的作用非常大,他結(jié)合單片機(jī)內(nèi)部的電路,產(chǎn)生單片機(jī)所必須的時(shí)鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立在這個(gè)基礎(chǔ)上的,晶振的提供的時(shí)鐘頻率越高,那單片機(jī)的運(yùn)行速度也就越快。[2]
晶振的作用是為系統(tǒng)提供基本的時(shí)鐘信號(hào)。通常一個(gè)系統(tǒng)共用一個(gè)晶振,便于各部分保持同步。有些通訊系統(tǒng)的基頻和射頻使用不同的晶振,而通過(guò)電子調(diào)整頻率的方法保持同步。
而晶振由于會(huì)與單片機(jī)的XTAL1與XTAL2腳構(gòu)成的振蕩電路中會(huì)產(chǎn)生諧波,從而降低電路時(shí)鐘振蕩器的穩(wěn)定性,所以一般會(huì)匹配兩個(gè)30pf的電容來(lái)消減諧波對(duì)于電路穩(wěn)定性的影響。
晶振電路如圖3.2所示:,XTAL1 和XTAL2 分別是放大器的輸入、輸出端
圖3.2 晶振電路

系統(tǒng)復(fù)位有兩種方式:上電復(fù)位與手動(dòng)復(fù)位。[3]
上電復(fù)位:上電瞬間,電容充電電流最大,電容相當(dāng)于短路,RST端為高電平,自動(dòng)復(fù)位;電容兩端的電壓達(dá)到電源電壓時(shí),電容充電電流為零,電容相當(dāng)于開(kāi)路,RST端為低電平,程序正常運(yùn)行。

手動(dòng)復(fù)位:首先經(jīng)過(guò)上電復(fù)位,當(dāng)按下按鍵時(shí),RST直接與VCC相連,為
圖3.3復(fù)位電路


高電平形成復(fù)位,同時(shí)電解電容被短路放電;按鍵松開(kāi)時(shí),VCC對(duì)電容充電,充電電流在電阻上,RST依然為高電平,仍然是復(fù)位,充電完成后,電容相當(dāng)于開(kāi)路,RST為低電平,正常工作。[5]
一般采用手動(dòng)復(fù)位,其對(duì)于上電復(fù)位方式更加方便,不需要切斷電源便可對(duì)系統(tǒng)進(jìn)行復(fù)位,復(fù)位電路如圖3.3所示

3.2溫度檢測(cè)模塊

3.2.1 DS18B20的主要功能及特點(diǎn)

DS18B20溫度傳感器是美國(guó)達(dá)拉斯(DALLAS)半導(dǎo)體公司推出的應(yīng)用單總線技術(shù)的數(shù)字溫度傳感器。該器件將半導(dǎo)體溫敏器件、A/D轉(zhuǎn)換器、存儲(chǔ)器等做在一個(gè)很小的集成電路芯片上。它具有微型化、低功耗、高性能、抗干擾能力強(qiáng)、易配微處理器等優(yōu)點(diǎn),可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(hào)供處理器處理。[8]
DS18B20具有以下特性:
獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線。
每個(gè)設(shè)備都有一個(gè)唯一的64位序列碼,存儲(chǔ)在ROM中。
簡(jiǎn)單的多點(diǎn)分布式測(cè)溫應(yīng)用。
在使用中不需要任何外圍元件。
可以從數(shù)據(jù)線供電。電源范圍為3.0V~ 5.5V。
測(cè)溫范圍 -55℃~+125℃。
在—10℃~+85℃間,測(cè)溫分辨率為0.5℃。
溫度計(jì)分辨率可由用戶選擇,9至12位之間。
在750毫秒內(nèi)將溫度轉(zhuǎn)換為12位字。
用戶可自定義非易失性報(bào)警的設(shè)置。
報(bào)警搜索命令定義和存儲(chǔ)的設(shè)備,其溫度不收程序限制(溫度報(bào)警狀態(tài))。
采用8引腳SOP和3引腳TO- 92封裝。
軟件與DS1822兼容。
其引腳如圖3.4所示:





圖3.4 DS18B20引腳圖
引腳說(shuō)明:
GND - 接地
DQ  - 輸入/輸出數(shù)據(jù)
VDD - 電源電壓
NC  - 無(wú)連接

DS18B20的極限使用條件
各引腳對(duì)地電壓: -0.5V~+0.6V
工作溫度:  -55℃~125℃
儲(chǔ)存溫度:  -55℃~+125℃
焊接溫度參見(jiàn)J-STD-020A的規(guī)格
*以上指出的器件在進(jìn)行正常焊接操作時(shí)所需要的環(huán)境條件,可能還有部分為能說(shuō)明但是在操作規(guī)格中已經(jīng)暗示器件可正常運(yùn)行的環(huán)境。長(zhǎng)期工作在極限條件下可能會(huì)影響器件的可靠性。

3.2.2DS18B20的內(nèi)部結(jié)構(gòu)

DS18B20的內(nèi)部存儲(chǔ)資源分為8個(gè)字節(jié)的ROM,9個(gè)字節(jié)的高速暫存器RAM,3個(gè)字節(jié)的EEPROM。如圖3.5所示。


圖3.5  DS18B20內(nèi)部結(jié)構(gòu)圖
每只DS18B20都有一個(gè)唯一存儲(chǔ)在ROM中的64位編碼。最前面8位是單線系列編碼,接著的49位是唯一的序列號(hào),最后8位是以上56位的CRC編碼。當(dāng)一條總線上皆有多個(gè)DS18B20時(shí),就通過(guò)序列號(hào)對(duì)其加以區(qū)分。
主機(jī)操作ROM的指令有5種:
33H——讀ROM。讀DS18B20溫度傳感器ROM中的編碼。
55H——匹配ROM。發(fā)出此命令后,接著發(fā)出64位ROM編碼,訪問(wèn)單總線上與該編碼相對(duì)應(yīng)的DS18B20并使之做出響應(yīng),為下一步對(duì)該DS18B20的讀寫做準(zhǔn)備。
F0H——搜索ROM。用于確定掛接在同一總線上DS18B20的個(gè)數(shù),識(shí)別64位ROM地址,位操作各期間做好準(zhǔn)備。
CCH——跳過(guò)ROM。忽略64位ROM地址,直接向18B20發(fā)溫度變換命令。
ECH——告警搜索命令。執(zhí)行后只有溫度超過(guò)設(shè)定值上限或下限的芯片才做出響應(yīng)。
高速暫存器RAM由9個(gè)字節(jié)組成。其組成如圖3.8所示。包括兩個(gè)溫度顯示位,兩個(gè)復(fù)制的TH和TL,一個(gè)配置寄存器和三個(gè)保留位,一個(gè)CRC校驗(yàn)值。可電擦E2PROM又包括溫度觸發(fā)器TH和TL,以及一個(gè)配置寄存器。

表3.3  高速暫存器RAM組成
寄存器內(nèi)容
字節(jié)地址
溫度值地位(LSB)
0
溫度值高位(MSB)
1
高溫限值(TH)
2
低溫限值(TL)
3
配置寄存器
4
保留
5
保留
6
保留
7
CRC校驗(yàn)值
8

操作RAM的指令主要有:
44H——溫度轉(zhuǎn)換。啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換,結(jié)果存入RAM。
BEH——讀暫存器。讀內(nèi)部RAM中的溫度數(shù)據(jù)。
4EH——寫暫存器。發(fā)出像內(nèi)部RAM寫上、下限溫度數(shù)據(jù)指令,緊跟該命令之后傳送2字節(jié)的數(shù)據(jù)。
48H——復(fù)制暫存器。將RAM中的TH、TL復(fù)制到E2PROM中。
B8H——重調(diào)E2PROM。將E2PROM中內(nèi)容恢復(fù)到中。
B4H——讀供電方式。寄生供電時(shí),DS18B20發(fā)送0,外界電源供電時(shí),DS18B20發(fā)送1。

3.2.3 DS18B20的工作時(shí)序

DS18B20需要嚴(yán)格的單總線協(xié)議以確保數(shù)據(jù)的完整性,主要包括初始化系列,讀序列,寫序列,所有時(shí)序都是講主機(jī)作為主設(shè)備,單總線設(shè)備作為從設(shè)備。每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)啟動(dòng)寫時(shí)序開(kāi)始,如果要求單總線器件會(huì)送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動(dòng)讀時(shí)序?qū)懲陻?shù)據(jù)將接受。數(shù)據(jù)和命令的傳輸都是地位在先。
初始化時(shí)序:
1)先將數(shù)據(jù)線置高電平1。
2)延時(shí)(該時(shí)間要求不是很嚴(yán)格,但是要盡可能短一點(diǎn))。
3)數(shù)據(jù)線拉到低電平0。
4)延時(shí)750us(該時(shí)間范圍可以在480~960us)。
5)數(shù)據(jù)線拉到高電平。
6)延時(shí)等待。如果初始化成功,則在15~60ms內(nèi)產(chǎn)生一個(gè)由DS18B20返回的低電平0,據(jù)該狀態(tài)可以確定它的存在。
7)若CPU讀到數(shù)據(jù)線上的低電平0后,還要進(jìn)行延時(shí),其延時(shí)的時(shí)間從發(fā)出高電平算起至少要480us.
8)將數(shù)據(jù)線再次拉到高電平1后結(jié)束。如圖3.6所示。



圖3.6  初始化時(shí)序圖

寫時(shí)序:
1)數(shù)據(jù)線先置低電平0。
2)延時(shí)確定的時(shí)間為15us。
3)按從低位到高位的順序發(fā)送數(shù)據(jù)。
4)延時(shí)時(shí)間為45us。
5)將數(shù)據(jù)線拉到高電平1。
6)重復(fù)1)~5)步驟,直到發(fā)送完整個(gè)字節(jié)。
7)最后將數(shù)據(jù)線拉高到1。如圖3.7所示。

圖3.7  寫數(shù)據(jù)時(shí)序圖
讀時(shí)序:
1)將數(shù)據(jù)線拉高到1。
2)延時(shí)2us。
3)將數(shù)據(jù)線拉低到0。
4)延時(shí)6 us。
5)將數(shù)據(jù)線拉高到1。
6)延時(shí)4 us。
7)讀數(shù)據(jù)線的狀態(tài)得到一個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理。
8)延時(shí)30us。
9)重復(fù)1~7步驟,直到讀取完一個(gè)字節(jié)。如圖3.8所示。

圖3.8  讀數(shù)據(jù)時(shí)序圖



第四章 硬件模塊的設(shè)計(jì)

在第二章已經(jīng)提到硬件件模塊的設(shè)計(jì)主要是指以單片機(jī)為核心,包括外接的溫度采集電路,實(shí)時(shí)時(shí)鐘電路,鍵盤,熱水器加熱開(kāi)關(guān),液晶顯示電路,報(bào)警電路以及復(fù)位電路的設(shè)計(jì)。

圖4.1 硬件模塊設(shè)計(jì)框圖

4.1 溫度采集模塊

首先我們選擇DS18B20作為本次設(shè)計(jì)的測(cè)溫元件。
由第三章有關(guān)內(nèi)容可知DS18B20溫度傳感器可以將溫度這一模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)供處理器進(jìn)行處理,從而省去了電阻電感式傳統(tǒng)溫度傳感器的信號(hào)運(yùn)放模塊與A/D轉(zhuǎn)換模塊。
DS18B20只有三根外引線:?jiǎn)尉€數(shù)據(jù)傳輸總線端口DQ (2),外供電源線VDD(3),共用地線GND(1)。DS18B20有兩種供電方式:一種為數(shù)據(jù)線供電方式,此時(shí)VDD接地,它是通過(guò)內(nèi)部電容在空閑時(shí)從數(shù)據(jù)線獲取能量,來(lái)完成溫度轉(zhuǎn)換,相應(yīng)的完成溫度轉(zhuǎn)換的時(shí)間較長(zhǎng)。這種情況下,用單片機(jī)的一個(gè)I/O口來(lái)完成對(duì)DS18B20總線的上拉。另一種是外部供電方式(VDD接+5V),相應(yīng)的完成溫度測(cè)量的時(shí)間較短。

在本設(shè)計(jì)中采用外部供電方式實(shí)現(xiàn)DS18B20傳感器與單片機(jī)的連接,具體的接口電路如圖4.2所示。
圖4.2溫度傳感器接口電路

4.2實(shí)時(shí)時(shí)鐘電路模塊

本次設(shè)計(jì)采用的外接時(shí)鐘模塊芯片是美國(guó)DALLAS公司的DS1302時(shí)鐘芯片。

4.2.1 DS1302的介紹

其作為一款高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和RAM數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與31天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。DS1302的外部引腳分配如圖1所示及內(nèi)部結(jié)構(gòu)如圖2所示。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄,因此廣泛應(yīng)用于測(cè)量系統(tǒng)中。
各引腳的功能為:
Vcc1:主電源;Vcc2:備份電源。當(dāng)Vcc2>Vcc1+0.2V時(shí),由Vcc2DS1302供電,當(dāng)Vcc2< Vcc1時(shí),由Vcc1DS1302供電。
SCLK:串行時(shí)鐘,輸入,控制數(shù)據(jù)的輸入與輸出;
I/O:三線接口時(shí)的雙向數(shù)據(jù)線;
CE:輸入信號(hào),在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個(gè)功能:第一,CE開(kāi)始控制字訪問(wèn)移位寄存器的控制邏輯;其次,
CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?/div>
具體引腳圖如圖4.3所示

圖4.3 DS1302引腳圖

圖4.4 DS1302內(nèi)部結(jié)構(gòu)圖

4.2.2實(shí)時(shí)時(shí)鐘模塊原理圖

電路原理圖如圖4.5所示,DS1302與單片機(jī)的連接也僅需要3條線:CE引腳、SCLK串行時(shí)鐘引腳、I/O串行數(shù)據(jù)引腳,Vcc2為備用電源,外接12MHz晶振,為芯片提供計(jì)時(shí)脈沖。


圖4.5 DS1302實(shí)時(shí)時(shí)鐘電路接線電路

4.3鍵盤輸入模塊

鍵盤輸入原理圖如圖4.6所示:
P3.3~P3.7分別接按鍵S1~S6
按鍵的功能分別是:
S1時(shí)間調(diào)整按鈕
S3燒水開(kāi)始按鈕與燒水溫度調(diào)整按鈕
S4燒水時(shí)間設(shè)定按鈕
S5“+”功能鍵
S6“—”功能鍵


圖4.6鍵盤輸入模塊原理圖

4.4繼電器加熱模塊

繼電器的定義是當(dāng)輸入量(激勵(lì)量)的變化達(dá)到規(guī)定要求時(shí),在電氣輸出電路中使被控量發(fā)生預(yù)定的階躍變化的一種電器,它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路)之間的互動(dòng)關(guān)系。通常應(yīng)用于自動(dòng)化的控制電路中,它實(shí)際上是用小電流去控制大電流運(yùn)作的一種“自動(dòng)開(kāi)關(guān)”。故在電路中起著自動(dòng)調(diào)節(jié)、安全保護(hù)、轉(zhuǎn)換電路等作用。
本設(shè)計(jì)所用的為型號(hào)SRD-05VDC-SL-C的繼電器。線圈電壓為直流5V,為一單刀雙擲繼電器,其引腳結(jié)構(gòu)如圖4.7所示。


圖4.7 繼電器引腳圖
除線圈外,另三個(gè)引腳構(gòu)成一個(gè)單刀雙擲開(kāi)關(guān),當(dāng)線圈通電時(shí),開(kāi)關(guān)達(dá)到另一邊,原來(lái)的開(kāi)觸點(diǎn)吸和,閉觸點(diǎn)斷開(kāi)。本設(shè)計(jì)中,目的是用繼電器吸和,接通外接的以加熱設(shè)備,從而起到溫度控制的作用,只需用到一組常開(kāi)觸點(diǎn),則另一端空置。
本次繼電器模塊的設(shè)計(jì)原理圖如圖4.8所示:

圖4.8 繼電器設(shè)計(jì)原理圖

4.5 LCD顯示模塊設(shè)計(jì)

4.5.1 LCD模塊概述

本次設(shè)計(jì)采用的是一塊1602LCD液晶模塊,其共可以顯示2 行×16 個(gè)字符,每個(gè)字符是由5×8點(diǎn)陣組成的字符塊集。字符型液晶顯示模塊由字符型液晶顯示屏(LCD),控制驅(qū)動(dòng)主芯片SPLC780C 及其擴(kuò)展驅(qū)動(dòng)芯片SPLC1OO,配以少量外圍阻﹑容元件結(jié)構(gòu)件等裝配在PCB 板上而成。YB1602A 采用COB 工藝制作,結(jié)構(gòu)穩(wěn)定,使用壽命長(zhǎng)。
其主要特性如下:
8位并行數(shù)據(jù)串口,適配M6800系列時(shí)序;
可選為并行數(shù)據(jù)方式;
具有字符發(fā)生器ROM,含10880位;
192中5*8點(diǎn)字符
64種5*10點(diǎn)字體字符
低功耗,高可靠性;

4.5.2 LCD模塊硬件說(shuō)明

1)接口說(shuō)明
表4.1 LCD1602接口說(shuō)明
管腳序
名稱
電平
功能描述
1
VSS
0V
電源地
2
VCC
5.0V
電源輸入
3
V0
LCD驅(qū)動(dòng)電壓輸入
4
RS
H/L
RS=H,表示DB0-DB7 為顯示數(shù)據(jù)
RS=L,表示DB0-DB7 為指令
5
R/W
H,H→L
R/W=H,數(shù)據(jù)被讀到DB9-DB7
R/W=L, 數(shù)據(jù)被寫到DB9-DB7
6
E
H/L
使能信號(hào)
7
DB0
H/L
數(shù)據(jù)線
8
DB1
H/L
數(shù)據(jù)線
9
DB2
H/L
數(shù)據(jù)線
10
DB3
H/L
數(shù)據(jù)線
11
DB4
H/L
數(shù)據(jù)線
12
DB5
H/L
數(shù)據(jù)線
13
DB6
H/L
數(shù)據(jù)線
14
DB7
H/L
數(shù)據(jù)線
15
BLA
5.0V
背光正極(LEDK﹑BLK)
16
BLK
0V
背光負(fù)極(LEDA﹑BLA)

備注:第3 腳V0 用來(lái)調(diào)節(jié)對(duì)比度,LCD 的驅(qū)動(dòng)電壓Vop=VDD-V0,YB1602 的Vop是4.8V,此時(shí)顯示最佳對(duì)比度,故在5.0V 供電模式下,可以在V0 與電源地(0V)之間接一個(gè)10K 的可調(diào)電位器來(lái)調(diào)節(jié)對(duì)比度。
2)最大工作范圍
邏輯工作電壓(VDD):4.5V~5.5V
電源地(VSS):0V
LCD驅(qū)動(dòng)電壓(Vop):-0.2V~+0.3V

4.5.3 內(nèi)部控制指令

表4.2 LCD內(nèi)部指令表
序號(hào)
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清顯示
0
0
0
0
0
0
0
0
0
1
2
光標(biāo)返回
0
0
0
0
0
0
0
0
1
*
3
置輸入模式
0
0
0
0
0
0
0
1
I/D
S
4
顯示開(kāi)/關(guān)控制
0
0
0
0
0
0
1
D
C
B
5
光標(biāo)或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符發(fā)生存貯器地址
0
0
0
1
字符發(fā)生存貯器地址
8
置數(shù)據(jù)存貯器地址
0
0
1
顯示數(shù)據(jù)存貯器地址
9
讀忙標(biāo)志或地址
0
1
BF
計(jì)數(shù)器地址
10
寫數(shù)到CGRAM或DDRAM)
1
0
要寫的數(shù)據(jù)內(nèi)容
11
從CGRAM或DDRAM讀數(shù)
1
1
讀出的數(shù)據(jù)內(nèi)容

4.5.4顯示硬件設(shè)計(jì)原理圖


根據(jù)設(shè)計(jì)要求與液晶控制方式,采用并行工作方式,將單片機(jī)的P0口作為數(shù)據(jù)傳輸口,而又由于單片機(jī)的P0口內(nèi)部沒(méi)有上拉功能,P0口作為I/O口輸出的時(shí)候時(shí) 輸出低電平為0 輸出高電平為高組態(tài)(并非5V,相當(dāng)于懸空狀態(tài))。也就是說(shuō)P0 口不能真正的輸出高電平,給所接的負(fù)載提供電流,因此必須接上拉電阻[4](即外接一排阻連接到VCC上,如圖4-8所示)。其硬件顯示模塊如圖4.9所示。[16]



圖4.9 液晶顯示模塊原理圖

4.6其余硬件模塊設(shè)計(jì)



蜂鳴器電路在輸入為低電平時(shí)導(dǎo)通,作為某些按鍵按下的指示音。
LED燈在繼電器斷開(kāi)即加熱工作時(shí)亮,在加熱電路斷開(kāi)時(shí),LED燈熄滅。



第五章系統(tǒng)軟件設(shè)計(jì)
根據(jù)系統(tǒng)所需要實(shí)現(xiàn)的功能,軟件設(shè)計(jì)主要分為如下的幾個(gè)模塊:主程序、溫度讀取模塊設(shè)計(jì)、實(shí)時(shí)時(shí)鐘模塊設(shè)計(jì)、LCD顯示模塊設(shè)計(jì)、鍵盤掃描程序以及按鍵消抖程序。
本系統(tǒng)的工作流程是:系統(tǒng)上電后,對(duì)電路板上的各部分初始化;然后按下按鍵2,對(duì)時(shí)間進(jìn)行設(shè)定;按下按鍵3之后,對(duì)燒水溫度進(jìn)行設(shè)定;按下按鍵4后,對(duì)燒水時(shí)間進(jìn)行設(shè)定,當(dāng)溫度超過(guò)設(shè)定的溫度之后,蜂鳴器工作,系統(tǒng)停止工作;在系統(tǒng)受到較強(qiáng)干擾時(shí),按下按鍵1可以對(duì)單片機(jī)進(jìn)行復(fù)位。

5.1主程序模塊

主程序主要完成的是對(duì)個(gè)全局變量進(jìn)行定義,對(duì)時(shí)鐘與時(shí)間的初始化,調(diào)用子函數(shù)功能。
具體流程圖如圖5.1所示。
主程序清單如下:
void main()
{
              bit bz=0;
              float ttt;         
              char we[6];
              unsigned int i;
              int te;
              delayms(1);
              chushishizhong();                //初始時(shí)鐘
              chushishijian();                 //初始時(shí)間

              //writetime();
kaishi:
    writecom(0x01);      //清零
              while(1)
              {
                            readtime();              //讀取時(shí)間
                            t[0]=shijian[4]/10+0x30;              //時(shí)間數(shù)據(jù)處理
                            t[1]=shijian[4]%10+0x30;


5.2 DS18B20測(cè)溫模塊

此模塊主要任務(wù)是對(duì)DS18B20進(jìn)行初始化,然后再進(jìn)行讀字節(jié)、寫字節(jié)的工作,最后將讀得的16進(jìn)制溫度傳送到處理器內(nèi)進(jìn)行處理。
DS18B20測(cè)溫流程圖如圖5.2所示

具體程序如下:

(具體程序詳見(jiàn)附件)

5.3實(shí)時(shí)時(shí)鐘模塊

實(shí)時(shí)時(shí)鐘模塊完成時(shí)間的設(shè)定與時(shí)間的讀取,包括年、月、日、時(shí)、分、秒。
具體流程圖如圖5.3所示

具體程序如下:
#define uchar unsigned char

sbit  res=                              P2^0;    //數(shù)據(jù)命令口選擇
sbit clo=              P2^2;        //脈沖信號(hào)口選擇
sbit io=P2^1;            //數(shù)據(jù)口選擇

#define miao               0x80//秒


5.4 LCD顯示模塊

LCD顯示模塊主要實(shí)現(xiàn)各個(gè)數(shù)據(jù)的顯示功能,包括時(shí)間的顯示與溫度以及提示字的顯示。
顯示模塊的流程圖如圖5.4所示。




具體程序如下:

#define port P0
#define uchar unsigned char
#define uint unsigned int

sbit rs=P2^7;        //將P2.0設(shè)置為數(shù)據(jù)選擇口
sbit rw=              P2^6;    //將P2.6設(shè)置為讀寫選擇口
sbit en=                            P2^5;   //將P2.5設(shè)置為使能信號(hào)口
(具體程序詳見(jiàn)附件)

5.5鍵址返回程序

鍵盤掃描程序的功能是逐個(gè)掃描各個(gè)功能鍵和“+”“—”鍵是否被按下,若按下某個(gè)按鍵,則返回相應(yīng)的鍵址。
其按鍵掃描程序如下:
sbit k1=P3^3;    //定義每個(gè)按鍵的數(shù)據(jù)口 P3.3為S1按鍵
sbit k2=P3^4;    //P3.4對(duì)應(yīng)S2按鍵
sbit k3=P3^5;    //P3.5對(duì)應(yīng)S3按鍵
sbit k4=P3^6;    //P3.6對(duì)應(yīng)S4按鍵
sbit k5=P3^7;   //P3.7對(duì)應(yīng)S5按鍵

unsigned char keyscan()    //定義鍵址返回程序
{
    if(k1==0)     //當(dāng)按鍵1按下
                 {
                 delayms(10);   //消抖 延時(shí)
                   if(k1==0)  
                            {
                            while(k1==0);
                            return 1;    //返回鍵址1
                            }
                 }
    else if(k2==0)  //當(dāng)按鍵2按下
                 {
                 delayms(10);
                   if(k2==0)
                            {
                            while(k2==0);
                            return 2;   //返回鍵址2
                            }
                 }
    else if(k3==0)    //當(dāng)按鍵3按下
                 {
                 delayms(10);
                   if(k3==0)
                            {
                            while(k3==0);
                            return 3;      //返回鍵址3
                            }
                 }
    else if(k4==0)    //當(dāng)按鍵4按下
                 {
                 delayms(10);
                   if(k4==0)
                            {
                            while(k4==0);
                            return 4;      //返回鍵址4
                            }
                 }
    else if(k5==0)    //當(dāng)按鍵5按下
                 {
                 delayms(10);
                   if(k5==0)
                            {
                            while(k5==0);
                            return 5;       //返回鍵址5
                            }
                 }
                 else
              return 0;        //若沒(méi)有按鍵按下則返回0

}

5.6測(cè)試及性能分析

實(shí)際硬件測(cè)試圖如下:
1)接通電源,系統(tǒng)正常顯示時(shí)鐘,如圖5.5所示
圖5.5
實(shí)時(shí)時(shí)鐘顯示
2)按下按鍵2,,光標(biāo)閃爍,進(jìn)入時(shí)鐘校準(zhǔn)模式,如圖5.6所示
圖5.6
時(shí)鐘校準(zhǔn)
3)按下按鍵3,系統(tǒng)顯示當(dāng)前溫度,按下按鍵5,按鍵6調(diào)節(jié)燒水溫度,當(dāng)水箱內(nèi)溫度低于目標(biāo)溫度時(shí),LED燈亮,表示繼電器斷開(kāi),加熱電路工作。,如圖5.7所示。
圖5 .7加熱模式
4)當(dāng)水箱內(nèi)溫度達(dá)到加熱溫度時(shí),LED燈熄滅,加熱電路停止工作,在溫度降到設(shè)定溫度以下,繼電器斷開(kāi),繼續(xù)加熱。如圖5.8所示

圖5.8 繼續(xù)燒水
5)按下按鍵4,進(jìn)入加熱時(shí)間設(shè)定,再按下按鍵4則進(jìn)入定時(shí)燒水模式。如圖5.9所示

圖5.9 定時(shí)燒水

6)按下按鍵1,則對(duì)系統(tǒng)進(jìn)行復(fù)位操作,系統(tǒng)初始化到時(shí)間顯示畫(huà)面,如圖5.10所示
圖5.10 復(fù)位操作

結(jié)論:成品經(jīng)實(shí)際測(cè)試,基本達(dá)到本次設(shè)計(jì)的各項(xiàng)要求。


第六章 結(jié)論
本文主要闡述了以51系列單片機(jī)為核心處理器完成電熱水器控制系統(tǒng)的設(shè)計(jì)。
本次設(shè)計(jì)主要完成的任務(wù)有:
1)51單片機(jī)最小系統(tǒng)的研究,了解了51系列單片機(jī)的兩種復(fù)位方式;
2)本文研究了兩種方式鍵盤設(shè)計(jì)的優(yōu)劣,并且了解了如何運(yùn)用軟件對(duì)抖動(dòng)現(xiàn)象的消除;
3)本文闡述了LCD液晶顯示屏的顯示原理,并且研究了液晶顯示屏的動(dòng)態(tài)數(shù)字的顯示方式;
4)本次設(shè)計(jì)詳細(xì)闡述了DS18B20溫度采集芯片的詳細(xì)參數(shù),工作原理與和單片機(jī)的連接電路,以及如何對(duì)其進(jìn)行軟件編程以完成所需要的操作編程方法。
本次設(shè)計(jì)在初期時(shí)曾由于設(shè)計(jì)經(jīng)驗(yàn)的不足,而導(dǎo)致在初步設(shè)計(jì)完成之后,編程與購(gòu)買各芯片進(jìn)行硬件組裝,制作實(shí)物時(shí),發(fā)現(xiàn)很多芯片價(jià)格過(guò)于昂貴,或者某些芯片由于型號(hào)過(guò)老而難以購(gòu)買,同時(shí)在對(duì)某些芯片進(jìn)行軟件模塊編程時(shí)發(fā)現(xiàn)某些芯片的編程相對(duì)有些困難,于是在后期又進(jìn)行一次設(shè)計(jì)方案的改變,但是由于時(shí)間過(guò)緊,此次設(shè)計(jì)還有定時(shí)開(kāi)關(guān)機(jī)功能沒(méi)有實(shí)現(xiàn)。并且由于設(shè)計(jì)經(jīng)驗(yàn)的不足,單片機(jī)在某些時(shí)候會(huì)由于不確定因素出現(xiàn)死機(jī)的狀況,在復(fù)位之后又能進(jìn)行正常的工作。
本次設(shè)計(jì)使我自己對(duì)所學(xué)的專業(yè)知識(shí)得到了進(jìn)一步的鞏固,也讓我發(fā)現(xiàn)了在之前的課程學(xué)習(xí)中所未掌握的部分,從而使得自己在專業(yè)知識(shí)方面得到了一次提高,同時(shí)也讓對(duì)自己的專業(yè)有了一個(gè)全新的認(rèn)識(shí),此次的設(shè)計(jì),不僅鍛煉了自己分析問(wèn)題與處理問(wèn)題的能力,還提高了自己的動(dòng)手能力,這次設(shè)計(jì)對(duì)于現(xiàn)在即將走上工作崗位的大學(xué)生來(lái)說(shuō),是一個(gè)十分寶貴的經(jīng)驗(yàn)。


附錄A 硬件設(shè)計(jì)原理圖與PCB圖



附錄B軟件程序清單
附錄C 實(shí)物圖

源碼:

  1. //ds1302 shuju shuru wei 0
  2. //數(shù)據(jù)輸出 最后一位為0
  3. //上升沿和下降沿的制造
  4. //寫數(shù)據(jù),數(shù)據(jù)輸入是從低位開(kāi)始 0位
  5. //讀數(shù)據(jù)從高位開(kāi)始

  6. #include<reg52.h>
  7. #include<stdio.h>
  8. #include"delay.h"
  9. #include"lcd.h"
  10. #include"dsds1302.h"
  11. #include"key.h"
  12. #include"ds18b20.h"

  13. sbit fm=P1^3;
  14. sbit jd=P1^2;
  15. sbit de=P1^1;

  16. unsigned char tt[]="2012-01-01";
  17. unsigned char  t[]="00:00:00";
  18. unsigned char fw[]="70 c    -> 00:30";
  19. unsigned char sj=70;
  20. unsigned char dfen,dmiao=30;


  21. unsigned char aj=0;                //按鍵返回值
  22. unsigned char gb=0;   //顯示光標(biāo)


  23. void main()
  24. {
  25.               bit bz=0;
  26.               float ttt;
  27.               char we[6];
  28.               unsigned int i;
  29.               int te;
  30.               delayms(1);
  31.               chushishizhong();                //初始時(shí)鐘
  32.               chushishijian();                    //初始時(shí)間

  33.               //writetime();
  34. kaishi:
  35.     writecom(0x01);
  36.               while(1)
  37.               {
  38.                             readtime();              //讀取時(shí)間
  39.                             t[0]=shijian[4]/10+0x30;              //時(shí)間數(shù)據(jù)處理
  40.                             t[1]=shijian[4]%10+0x30;
  41.                             t[3]=shijian[5]/10+0x30;
  42.                             t[4]=shijian[5]%10+0x30;
  43.                             t[6]=shijian[6]/10+0x30;
  44.                             t[7]=shijian[6]%10+0x30;
  45.                             tt[2]=shijian[1]/10+0x30;
  46.                             tt[3]=shijian[1]%10+0x30;
  47.                             tt[5]=shijian[2]/10+0x30;
  48.                             tt[6]=shijian[2]%10+0x30;
  49.                             tt[8]=shijian[3]/10+0x30;
  50.                             tt[9]=shijian[3]%10+0x30;
  51.                             writestr(0,0,tt);                              //顯示時(shí)間 處理
  52.                             writestr(0,10," >data");
  53.                             writestr(1,0,t);
  54.                             writestr(1,10," >time");



  55.                             aj=keyscan();                            //檢測(cè)按鍵函數(shù)
  56. /**********************按鍵2 按下表示進(jìn)入加熱控制模式*******************************/
  57.                               if(aj==2)
  58.                               {
  59.                                fm=0;   // 0  表示閉合繼電器 閉合
  60.                                de=0;
  61.                                delayms(100);
  62.                                fm=1;
  63.                                jd=0;   //打開(kāi)自動(dòng)燒水

  64.                                writecom(0x01);                 //清除屏幕
  65.                                while(1)
  66.                                  {
  67.                                              if(i==500)
  68.                                              {
  69.                                                 i=0;                                                        //溫度讀取函數(shù)  以及 溫度的處理
  70.                                                           te=duwendu();
  71.                                                           ttt=(float)te*0.0625;
  72.                                                           sprintf(we,"%6.2f",ttt);
  73.                                                           writestr(0,0,"Temp:");  //顯示 溫度值
  74.                                                           writestr(0,5,we);
  75.                                                           writestr(1,0,fw);
  76.                                              }
  77.                                                           i++;

  78.                                              aj=keyscan();                              //檢測(cè)按鍵

  79.                   if(aj==2)
  80.                                               {
  81.                                                            de=1; //熄滅led燈
  82.                                                            jd=1;//斷開(kāi)繼電器
  83.                                                            fm=0;
  84.                                                            delayms(100);                //蜂鳴器響一聲
  85.                                                            fm=1;
  86.                                                            writecom(0x01);

  87.                                                                       break;                 //用于 退出當(dāng)前的模式
  88.                                                         }

  89.                             if(aj==3)                                            //調(diào)節(jié)設(shè)定的溫度值
  90.                                     {
  91.                                              fm=0;
  92.                                              delayms(100);
  93.                                              fm=1;
  94.                                                                          jd=1;
  95.                                                                          de=1;
  96.                                                                          delayms(20);
  97.                                              writecom(0x0f);
  98.                                              writecom(0xc0+12);              //光標(biāo)顯示位子
  99.                                              while(1)
  100.                                                {
  101.                                                                         aj=keyscan();
  102.                                                                         if(aj==3)
  103.                                                                           {
  104.                                                                          writecom(0x0c);
  105.                                                                          delayms(20);
  106.                                                                          writecom(0x01);                                                                                                                                                
  107.                                                                          fm=0;
  108.                                                                          delayms(100);
  109.                                                                          fm=1;

  110.                                                                          jd=0;
  111.                                                                          de=0;
  112.                                                                          delayms(20);                                                                        
  113.                                                                                       while(1)      //開(kāi)始進(jìn)行倒計(jì)時(shí) 燒水
  114.                                                                                       {
  115.                                                                                                   if(dfen==0 && dmiao==0)
  116.                                                                                                   {
  117.                                                                                                      for(i=10;i;i--)
  118.                                                                                                       {
  119.                                                                                                                 fm=~fm;
  120.                                                                                                                 de=~de;
  121.                                                                                                                 delayms(100);
  122.                                                                                                                 }
  123.                                                                                                                 jd=1;
  124.                                                                                                                 de=1;
  125.                                                                                                                 writecom(0x80);
  126.                                                                                                                 delayms(20);
  127.                                                                                                                 writecom(0x01);delayms(20);
  128.                                                                                                                 writestr(0,0,"ALL ok");
  129.                                                                                                                 writestr(1,0,"press KEY3 back ");
  130.                                                                                                                 delayms(200);
  131.                                                                                                       while(1)
  132.                                                                                                                 {                              
  133.                                                                                                                               aj=keyscan();
  134.                                                                                                                               if(aj==3)
  135.                                                                                                                                  {
  136.                                                                                                                                  fm=0;
  137.                                                                                                                                  delayms(100);
  138.                                                                                                                                  fm=1;
  139.                                                                                                                                  goto  kaishi;              //返回函數(shù)開(kāi)始
  140.                                                                                                                 }                 }
  141.                                                                                                   }
  142.                                                                                                   delayms(200);delayms(200);delayms(200);delayms(200);  //1s
  143.                                                                                                 
  144.                                                                                                   if(dmiao==0)
  145.                                                                                                     {
  146.                                                                                                     if(dfen!=0)
  147.                                                                                                       {
  148.                                                                                                                 dfen--;
  149.                                                                                                                 dmiao=60;
  150.                                                                                                                 }
  151.                                                                                                     }
  152.                                                                                                     dmiao--;
  153.                                                                                                     fw[11]=dfen/10+0x30;
  154.                                                                                                     fw[12]=dfen%10+0x30;
  155.                                                                                                     fw[14]=dmiao/10+0x30;
  156.                                                                                                     fw[15]=dmiao%10+0x30;
  157.                                                                                                     writestr(0,0," ** boiling **  ");
  158.                                                                                                     writestr(1,0,fw);
  159.                                                                                                     writestr(1,0,"     ");
  160.                                                                                       }//開(kāi)始進(jìn)行倒計(jì)時(shí) 燒水

  161.                                                                                     }

  162.                                                                          if(aj==4)              //時(shí)間調(diào)節(jié)
  163.                                                                           {
  164.                                                                                     if(gb==0)
  165.                                                                                     if(dfen<60)
  166.                                                                                        dfen++;
  167.                                                                                     else
  168.                                                                                        {
  169.                                                                                                   fm=0;
  170.                                                                                                   delayms(100);
  171.                                                                                                   fm=1;
  172.                                                                                        }
  173.                                                                         fw[11]=dfen/10+0x30;              //顯示時(shí)間處理
  174.                                                                         fw[12]=dfen%10+0x30;
  175.                                                                         writestr(1,0,fw);
  176.                                                                         writecom(0xc0+12);
  177.                                                                                     }

  178.                                                                          if(aj==5)
  179.                                                                           {
  180.                                                                                     if(dfen>0)
  181.                                                                                        dfen--;
  182.                                                                                     else
  183.                                                                                        {
  184.                                                                                                   fm=0;
  185.                                                                                                   delayms(100);
  186.                                                                                                   fm=1;
  187.                                                                                        }
  188.                                                                         fw[11]=dfen/10+0x30;
  189.                                                                         fw[12]=dfen%10+0x30;
  190.                                                                         writestr(1,0,fw);

  191. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………

復(fù)制代碼

完整文檔下載(word格式 可編輯):
基于51單片機(jī)的電熱水器控制系統(tǒng)設(shè)計(jì).doc (6.57 MB, 下載次數(shù): 272)



評(píng)分

參與人數(shù) 3黑幣 +63 收起 理由
ZONE-9 + 8 共享資料的黑幣獎(jiǎng)勵(lì)!
Eleven_1ing + 5 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏16 分享淘帖 頂3 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:23303 發(fā)表于 2017-6-16 08:42 | 只看該作者
謝謝樓主分享!
回復(fù)

使用道具 舉報(bào)

板凳
ID:23303 發(fā)表于 2017-6-16 08:45 | 只看該作者
謝謝樓主分享!學(xué)習(xí)C程序
回復(fù)

使用道具 舉報(bào)

地板
ID:212410 發(fā)表于 2017-6-19 00:58 | 只看該作者
本帖最后由 djnodt 于 2017-6-22 22:11 編輯

請(qǐng)問(wèn)樓主,串口通訊模塊是用什么元件的,起什么作用
回復(fù)

使用道具 舉報(bào)

5#
ID:159139 發(fā)表于 2017-6-20 06:46 來(lái)自手機(jī) | 只看該作者
下載研究一下,謝謝樓主分享。
回復(fù)

使用道具 舉報(bào)

6#
ID:95509 發(fā)表于 2017-12-18 13:29 | 只看該作者
謝謝樓主分享!學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

7#
ID:263148 發(fā)表于 2017-12-18 15:31 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

8#
ID:241772 發(fā)表于 2018-4-16 22:34 | 只看該作者
謝謝樓主分享!
回復(fù)

使用道具 舉報(bào)

9#
ID:241772 發(fā)表于 2018-4-17 21:47 | 只看該作者
厲害��!學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

10#
ID:241772 發(fā)表于 2018-4-17 21:52 | 只看該作者
不過(guò)好像沒(méi)辦法下載哦~
回復(fù)

使用道具 舉報(bào)

11#
ID:344887 發(fā)表于 2018-6-4 20:42 | 只看該作者
挺不錯(cuò)的,就是沒(méi)有仿真
回復(fù)

使用道具 舉報(bào)

12#
ID:376301 發(fā)表于 2018-7-21 19:32 | 只看該作者
樓主太強(qiáng)大了,剛好借鑒一下,謝謝樓主
回復(fù)

使用道具 舉報(bào)

13#
ID:443101 發(fā)表于 2018-12-10 10:26 | 只看該作者
不錯(cuò)的
回復(fù)

使用道具 舉報(bào)

14#
ID:483909 發(fā)表于 2019-4-19 21:07 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

15#
ID:375715 發(fā)表于 2019-4-26 23:43 來(lái)自手機(jī) | 只看該作者
謝謝分享謝謝分享
回復(fù)

使用道具 舉報(bào)

16#
ID:770243 發(fā)表于 2020-6-16 13:42 | 只看該作者
201730645473 發(fā)表于 2018-4-17 21:52
不過(guò)好像沒(méi)辦法下載哦~

能下載嗎?我這下載了一半不動(dòng)了
回復(fù)

使用道具 舉報(bào)

17#
ID:788871 發(fā)表于 2020-6-26 22:41 | 只看該作者
可以下載嘛
回復(fù)

使用道具 舉報(bào)

18#
ID:875228 發(fā)表于 2021-3-28 17:03 | 只看該作者
謝謝大佬分享,我這個(gè)好難,還要預(yù)約定時(shí)加熱,自動(dòng)記錄主人使用習(xí)慣
回復(fù)

使用道具 舉報(bào)

19#
ID:385637 發(fā)表于 2021-3-29 11:34 | 只看該作者
謝謝大佬分享,很齊全的資料
回復(fù)

使用道具 舉報(bào)

20#
ID:537743 發(fā)表于 2021-3-29 13:35 | 只看該作者
樓主厲害,謝謝分享。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表