久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 45973|回復(fù): 19
收起左側(cè)

基于單片機(jī)的太陽能熱水器控制系統(tǒng) 帶仿真 源碼下載

  [復(fù)制鏈接]
ID:137190 發(fā)表于 2016-9-3 19:31 | 顯示全部樓層 |閱讀模式
仿真原理圖如下:
51hei.gif

下面是文檔的部分內(nèi)容預(yù)覽:
目錄
摘要
ABSTRACT
第一章  概述
1.1  設(shè)計(jì)背景
1.2  設(shè)計(jì)任務(wù)
第二章  太陽能熱水器及控制系統(tǒng)簡介
2.1  熱水器及系統(tǒng)工作原理
2.2  控制系統(tǒng)設(shè)計(jì)原則
2.3  主控方案
2.4  溫度檢測方案
2.5  水位檢測方案
2.6  顯示方案
2.7  時(shí)鐘方案
第三章  控制系統(tǒng)硬件設(shè)計(jì)
3.1  總體設(shè)計(jì)
3.2  主控模塊
3.2.1  單片機(jī)接口配置
3.2.2  復(fù)位電路
3.2.3  時(shí)鐘電路
3.3  溫度測量模塊
3.3.1  DS18B20簡介
3.3.2 溫度測量電路接線圖
3.4  水位檢測模塊
3.5  顯示模塊
3.5.1  LCD1602電氣接線圖
3.5.2  LCD1602技術(shù)參數(shù)及接口說明
3.6  實(shí)時(shí)時(shí)鐘
3.6.1  DS1302簡介
3.6.2  時(shí)鐘電路電氣原理圖
3.7  驅(qū)動(dòng)模塊
3.6.1  上水電磁閥驅(qū)動(dòng)電路
3.6.2  自動(dòng)加熱驅(qū)動(dòng)電路
3.8  按鍵模塊
3.8.1 按鍵模塊簡介
3.8.2 按鍵抖動(dòng)處理
第四章  控制系統(tǒng)軟件設(shè)計(jì)
4.1  實(shí)時(shí)時(shí)鐘軟件設(shè)計(jì)
4.1.1  DS1302時(shí)鐘地址及數(shù)據(jù)格式
4.1.3  DS1302軟件流程
4.1.4  時(shí)間讀取子程序
4.1.5  時(shí)間設(shè)置子程序
4.1.6  日期BCD轉(zhuǎn)字符程序
4.1.7  時(shí)間BCD轉(zhuǎn)字符程序
4.2  水溫檢測軟件設(shè)計(jì)
4.2.1  傳感器操作指令
·4.2.2  DS18B20軟件流程
4.2.3  獲取溫度子程序
4.3  顯示模塊軟件設(shè)計(jì)
4.3.1  LCD1602指令及說明
4.3.2  LCD1602RAM地址映射
4.3.3  初始化過程
4.3.4  顯示子程序
4.4  水位檢測軟件設(shè)計(jì)
4.5  按鍵模塊軟件設(shè)計(jì)
4.5.1  讀取鍵值子程序
4.5.2  鍵值處理子程序
第五章  控制系統(tǒng)調(diào)試與仿真
5.1 總體仿真結(jié)果展示
5.2  自動(dòng)加熱仿真
5.3  水位檢測及上水仿真
第六章  總結(jié)與展望
參考文獻(xiàn)

摘要

隨著社會(huì)的發(fā)展和科技的不斷進(jìn)步,人們的生活水平也在逐漸提高。與之而來的問題也很多,例如能源危機(jī)與環(huán)境污染,綠色環(huán)保理念因而開始深入人心。太陽能作為新興的清潔能源得到了大家的普遍認(rèn)可,首先太陽能取之不盡、用之不竭,其次干凈無污染又是一大特點(diǎn),因此積極推廣太陽能的應(yīng)用具有重大意義。本設(shè)計(jì)將研發(fā)一款高性能的太陽能熱水器控制系統(tǒng),產(chǎn)品具有智能化的特點(diǎn)。本篇文檔的設(shè)計(jì)可以作為單獨(dú)的控制系統(tǒng)銷售也可以安裝在普通的太陽能熱水器上使之作為智能型熱水器來出售。這一設(shè)計(jì)會(huì)更廣泛地推動(dòng)太陽能的使用,在將來還可以與物聯(lián)網(wǎng)系統(tǒng)結(jié)合,吸引消費(fèi)者的眼球,同時(shí)符合國家當(dāng)前的發(fā)展理念。

本文檔在介紹單片機(jī)、傳感器、實(shí)時(shí)時(shí)鐘的特點(diǎn)基礎(chǔ)之上,詳盡地說明了太陽能熱水器控制系統(tǒng)的工作原理與方案設(shè)計(jì)。根據(jù)本設(shè)計(jì)的要求,采用STC89C52作為主控芯片。其他硬件部分包括:水溫采集模塊、水位監(jiān)測模塊、按鍵輸入部分、LCD顯示窗口及繼電器控制模組,繼電器控制模組有自動(dòng)上水和程控加熱部分構(gòu)成。在軟件方面,本設(shè)計(jì)采用模塊化方式對系統(tǒng)進(jìn)行分組設(shè)計(jì),使得設(shè)計(jì)工作穩(wěn)步展開,并且經(jīng)過仿真驗(yàn)證,本系統(tǒng)的各個(gè)模塊均正常工作,符合設(shè)計(jì)要求


ABSTRACT

With the development of society and the progress of science and technology, people's living standards are gradually improving. However, problems come with it, such as the energy crisis and environmental pollution, thus green development ideas gained ground. Solar energy as a new clean energy has been widely recognized, due to that it’s inexhaustible and clean, and followed by a major feature. So, promoting the use of solar energy actively is of great significance. This article will set out to design an intelligent, high-performance solar water heater control system which was designed with intelligent automation features. This design can be used as a separate control system sales also it can be installed on ordinary solar water heater to make it as a smart water heater to sell. The design will be more beneficial to promote the use of solar energy. Combined with the internet of things will attract the attention of consumers in the future and be in line with the country's current development concept.

This paper describes the basic features of the microcontroller, sensors, real-time clock, and a detailed illustration of the working principle and design of solar water heater control system. According to the design requirements, STC89C52 used here as a master chip. Other hardware includes: temperature acquisition module, water level monitoring module, key input section, LCD display window and relay control module, relay control module has automatic pumping water part and programming heating part. On the software side, using modular design makes the works steady progress. After simulation, each module of the system is working properly, which meeting to the design requirements.



第一章  概述

1.1  設(shè)計(jì)背景

能源對于人類的發(fā)展至關(guān)重要。每一次人類文明的進(jìn)步,都可以看到舊能源的落幕與新能源的成長。近代工業(yè)起源于英國,當(dāng)時(shí)蒸汽機(jī)的發(fā)明與改進(jìn)使得煤炭資源取代了木材,成為主導(dǎo)能源。到20世紀(jì)初,石油得到大規(guī)模開采與使用,全世界對石油的需求激增,石油逐步取代煤炭成為主導(dǎo)能源。根據(jù)Statistical Review of World Energy 2015[3]估算,在2014年的能源消費(fèi)結(jié)構(gòu)中,石油仍然是主導(dǎo)燃料,約占全球能源消費(fèi)的33.3%;煤炭和天然氣資源分別占全球能源消費(fèi)的30.1%和24.0%。作為化石燃料,三者合計(jì)達(dá)到全球能源消費(fèi)的87.4%,傳統(tǒng)燃料依然支撐起現(xiàn)代商業(yè)文明主導(dǎo)力量。

自從傳統(tǒng)能源作為主導(dǎo)能源以來,兩大安全問題便顯現(xiàn)出來。一是傳統(tǒng)化石燃料的供應(yīng)問題,其越來越難以滿足市場的需要。因?yàn)榛剂鲜遣豢稍偕哪茉矗邢薜膬α繀s要應(yīng)付世界經(jīng)濟(jì)和人口的飛速增長。二是傳統(tǒng)能源的安全問題。一方面,由于開采技術(shù)的問題,煤礦事故頻繁發(fā)生;再者,資源的肆意無須開采,對地下水、地表生態(tài)環(huán)境造成了難以恢復(fù)的破壞。另一方面,傳統(tǒng)能源的使用還會(huì)產(chǎn)生廢氣廢渣,特別是燃燒未經(jīng)處理的煤炭會(huì)排放SO2、粉塵等污染物。

應(yīng)對傳統(tǒng)化石能源日益嚴(yán)峻的安全形勢,世界各國開始調(diào)整戰(zhàn)略政策,采取多元化供應(yīng)策略,積極引導(dǎo)開發(fā)新能源,以降低對傳統(tǒng)能源的依賴性。

就我國的發(fā)展來說,積極推廣新能源,以節(jié)約和代替部分化石能源,這是保障我國能源安全、優(yōu)化能源結(jié)構(gòu)、促進(jìn)社會(huì)與經(jīng)濟(jì)可持續(xù)發(fā)展、保護(hù)環(huán)境、應(yīng)對氣候生態(tài)變化、調(diào)整產(chǎn)業(yè)結(jié)構(gòu)的戰(zhàn)略部署。近年來,新能源的發(fā)展受到政府的大力支持。自2011年起,可再生能源發(fā)展的脈絡(luò)日漸清晰,我國政府將在推廣新能源和提高傳統(tǒng)能源效率兩方面加速能源結(jié)構(gòu)調(diào)整。未來新興能源開發(fā)利用的戰(zhàn)略定位是:到2020年,核能、風(fēng)能、太陽能等新興能源要成為能源總需求中增量部分的主力軍,加上水能共提供約6億噸標(biāo)準(zhǔn)煤,占一次能源消費(fèi)總量的15%;到2030年,新興能源要成為主流能源之一,加上水能共提供20%以上的一次能源消費(fèi)量[1]。

作為一個(gè)幅員遼闊的國家,中國有著豐富的太陽能資源。雖然我國在太陽能熱水器累計(jì)安裝量居世界第一位,但是由于中國龐大的人口數(shù)量,意味著中國人均占有的太陽能熱水器還少于像塞浦路斯、以色列、希臘和奧地利等國家。

根據(jù)我國可再生能源發(fā)展規(guī)劃,太陽能熱水器累計(jì)安裝應(yīng)在2010年達(dá)3億平方米和在2020年達(dá)到1億7000萬平方米,每千人擁有量達(dá)128平方米到203平方米。根據(jù)這一計(jì)劃,在2020年中國太陽能熱水器的持有率只相當(dāng)于2000年奧地利的水平,仍遠(yuǎn)低于2000年的塞浦路斯和以色列的太陽能熱水器安裝量[2]。

目前,中國正處于快速發(fā)展階段,城鄉(xiāng)居民對生活熱水的需求急劇增加[5]。而在農(nóng)村地區(qū)和中小城市,太陽能熱水器已經(jīng)成為提高人民生活質(zhì)量、全面建設(shè)小康社會(huì)的一個(gè)快捷的技術(shù)方法[2]。隨著傳統(tǒng)能源價(jià)格的持續(xù)上漲,社會(huì)上的環(huán)保意識日益提高。另外由于太陽能熱水器產(chǎn)業(yè)的升級改進(jìn)和太陽能熱水器與建筑一體化技術(shù)的發(fā)展,使得太陽能熱水器將保持增長勢頭。中國太陽熱水器市場自上世紀(jì)90年代以來,保持了十多年的快速增長。我國太陽能熱水器的年鋪設(shè)量由2000年的610萬平方米,快速增長到2009年的4200萬平方米,年平均增長速度24%[6]。太陽能熱水器運(yùn)行保有量由2000年的2600萬平方米,增長至2009年的14500萬平方米,年平均增長速度為21%[6]。尤其是2006年《可再生能源法》實(shí)施以來,國家可再生能源開發(fā)政策進(jìn)一步加強(qiáng),更是由于新農(nóng)村建設(shè)的開展和地方政府開始實(shí)施新建建筑強(qiáng)制安裝政策,對太陽能熱水器的應(yīng)用和推廣起到了極大的推動(dòng)作用。2006年至2009年太陽能熱水器銷售量年均增長率為33%,總保有量年均增長率為17%,太陽能熱水器應(yīng)用又進(jìn)入了一個(gè)新的高潮[2]。

面對巨大的市場,對太陽能熱水器也提出了新的技術(shù)要求。目前太陽能熱水器普遍都沒有自動(dòng)控制系統(tǒng),這讓太陽能的推廣工作達(dá)到了技術(shù)瓶頸。因此設(shè)計(jì)一個(gè)智能化的太陽能熱水器控制系統(tǒng)迫在眉睫。


1.2  設(shè)計(jì)任務(wù)

本課題旨在設(shè)計(jì)一個(gè)小成本、低功耗、多用途的太陽能熱水器控制系統(tǒng)。熱水系統(tǒng)采用單片機(jī)芯片作為微型控制器,該系統(tǒng)是設(shè)計(jì)目標(biāo)有:

  • 通過傳感器,將水位水溫采樣信號傳送給單片機(jī)進(jìn)行處理,并進(jìn)行水位及溫度的顯示;
  • 當(dāng)水位到達(dá)低限,系統(tǒng)自動(dòng)上水,高限停止上水;
  • 可調(diào)預(yù)置水溫設(shè)計(jì),用戶可以自主設(shè)置溫度保持范圍,以應(yīng)對不同地區(qū)不同季節(jié);
  • 可以設(shè)定時(shí)段監(jiān)控溫度,如果在時(shí)段內(nèi),溫度過低系統(tǒng)將循環(huán)加熱;
  • 允許自動(dòng)/手動(dòng)進(jìn)行上水、加熱設(shè)置。

在設(shè)計(jì)系統(tǒng)的過程中,同時(shí)學(xué)習(xí)了單片機(jī)的開發(fā)與程序編制以及電路的設(shè)計(jì)與仿真等操作。本科階段的知識得到了進(jìn)一步提高,另外有自學(xué)了Proteus和Keil等軟件的使用。在下文,提供了不同滿足設(shè)計(jì)要求的方案,最終選擇最優(yōu)設(shè)計(jì)。


第二章  太陽能熱水器及控制系統(tǒng)簡介

2.1  熱水器及系統(tǒng)工作原理

目前市場上太陽能熱水器的主要分類有:玻璃真空管熱水器、平板型熱水器、陶瓷中空平板型熱水器以及熱管式熱水器等。而在國內(nèi),太陽能熱水器市場份額的90%是全玻璃真空管太陽能[2],因此本設(shè)計(jì)采用真空管太陽能熱水器作為控制對象。太陽能熱水器基本構(gòu)造如圖所示,包括有:水箱、集熱管、進(jìn)出水接口、排氣孔、安裝架等組件。陽光照射在真空式的集熱管上,集熱管吸收熱量,管內(nèi)冷水被加熱成熱水。由于熱水比重低于冷水,熱水上浮冷水下沉進(jìn)行冷熱交替加熱,最終熱水被收集到儲水箱內(nèi),以上是太陽能熱水器的基本原理。

0.002.jpg 圖2.1  太陽能原理圖

在光照良好的情況下,上述過程比較順利。如果遇到連續(xù)陰雨天氣,則不能收集熱水,因此需要加熱電輔加熱功能。當(dāng)單片機(jī)采集到溫度低于設(shè)定值,并且在預(yù)設(shè)時(shí)間段內(nèi),將開啟加熱,保持水溫在程序設(shè)置的范圍內(nèi)。水位監(jiān)測模塊安裝在水箱中,監(jiān)測水位的變化并發(fā)出水位報(bào)警信息。當(dāng)水位低于設(shè)定位置,單片機(jī)發(fā)出指令停止加熱同時(shí)開始上水;水位被監(jiān)測到達(dá)高水位時(shí),停止上水。實(shí)時(shí)時(shí)鐘為系統(tǒng)提供時(shí)間信息,既可以顯示日期時(shí)間等信息,又能讓用戶自主設(shè)置水溫保持時(shí)間段。在該時(shí)間段內(nèi)開啟輔助加熱功能,其他時(shí)間只顯示溫度而不加熱以節(jié)約能源。系統(tǒng)還提供有手動(dòng)按鈕,允許用戶自主控制上水電磁閥、加熱器等器件。在手動(dòng)模式下系統(tǒng)依然監(jiān)控水位水溫信息,防止發(fā)生上水溢出、干燒等事故。


2.2 控制系統(tǒng)設(shè)計(jì)原則

本控制系統(tǒng)將單片機(jī)及外圍電路與太陽能熱水器結(jié)合起來。運(yùn)用溫度、水位監(jiān)測技術(shù),將水溫、水位信息進(jìn)行處理、控制。該系統(tǒng)設(shè)計(jì)遵循的原則如下:

1)可靠性。本太陽能熱水器控制系統(tǒng)是基于單片機(jī)的系統(tǒng),在設(shè)計(jì)單片機(jī)的硬件與軟件方案時(shí),要考慮到各種因素了來保證系統(tǒng)的高可靠性。例如在測量溫度時(shí),如何保持溫度數(shù)據(jù)地準(zhǔn)確傳輸;如何保證單片機(jī)工作不被電磁干擾等等。因此系統(tǒng)需要綜合考慮,保證采集、傳輸以及處理過程中的可靠性,才能使得系統(tǒng)能夠應(yīng)對各種復(fù)雜的環(huán)境與使用習(xí)慣。

2)準(zhǔn)確性。本系統(tǒng)使用的測量電路較為先進(jìn),能夠精確地反映被測量的變化。

3)經(jīng)濟(jì)性。本設(shè)計(jì)針對的是廣大民用客戶,所以在選用電路器件時(shí)要考察其性價(jià)比如何,盡可能控制成本以提高競爭力。

4)人性化。由于本系統(tǒng)要面向廣大客戶,所以在進(jìn)行軟硬件設(shè)計(jì)時(shí),要充分考慮諸多因素。

2.3  主控方案

選擇單片機(jī)芯片有以下兩種方案:

方案一: 選用STC89C52芯片作為主控制器。

STC89C52RC單片機(jī)是STC宏晶電子公司生產(chǎn)的兼容MCS-51的高性能/低功耗單片機(jī)。該型號單片機(jī)性價(jià)比高、抗干擾能力強(qiáng),工作電壓:5.5V~3.3V(5V 單片機(jī))/3.8V~2.0V(3V 單片機(jī))。工作頻率范圍:0~40MHz,相當(dāng)于普通8051 的0~80MHz,實(shí)際工作頻率可達(dá)48MHz。用戶應(yīng)用程序空間為8K 字節(jié),片上集成512 字節(jié)RAM。

方案二:采用AT89S52。

AT89S52是Atmel 公司制造,也和MCS-51系列單片機(jī)兼容,片內(nèi)具有8K字節(jié)程序存儲空間,256字節(jié)的數(shù)據(jù)存儲空間,具有在線編程可擦除技術(shù)。

兩種單片機(jī)都完全能夠滿足設(shè)計(jì)需要,STC89C52相對ATS89C52價(jià)格便宜,且抗干擾能力強(qiáng)。考慮到成本因素,因此選用STC89C52。


2.4 溫度檢測方案

溫度是整個(gè)太陽能熱水器工作狀態(tài)的核心指標(biāo),系統(tǒng)根據(jù)采集到的儲水箱溫度判斷接下來的動(dòng)作,溫度測量的準(zhǔn)確性直接關(guān)系到控制系統(tǒng)能否正常工作。

設(shè)計(jì)溫度測量方案時(shí),有以下備選方案:熱敏電阻+模數(shù)轉(zhuǎn)換器,數(shù)字式溫度測量器件。其中第一個(gè)方案從設(shè)計(jì)角度考慮較為復(fù)雜,測量過程如圖3.4所示[4]。而后一方案有眾多的溫度傳感器芯片可供選擇,常見的有LM355Z、DS18B20等等,使用方便。 0.003.jpg

圖3.4 溫度測量流程圖

其中DS18B20是一款高性能的數(shù)字式溫度測量芯片,可以將溫度量直接轉(zhuǎn)化為數(shù)字量,因此單片機(jī)可以方便的通過總線讀取數(shù)據(jù)。綜上,本設(shè)計(jì)采用DS18B20傳感器。

2.5  水位檢測方案

              在考慮水位檢測模塊時(shí),有以下幾種傳感器可以實(shí)現(xiàn):超聲波傳感器、液壓傳感器、電容液位傳感器、以及電子液位檢測器。具體如表所示:

表 水位檢測傳感器

分類

超聲波

液壓式

電容式

電子式

器件

超聲波探測器

壓力傳感器

電容液位器

電極式液位器

描述

價(jià)格貴

使用不便,價(jià)格貴

抗干擾性差

使用方便精度不高


電極式水位檢測電路結(jié)構(gòu)簡單,其精度也足夠控制系統(tǒng)的使用。利用導(dǎo)電液體開關(guān)電路的原理,適用于單片機(jī)等邏輯控制器。當(dāng)水漫過電極,電路接通,電平發(fā)生改變,主控芯片依靠電平的狀態(tài)判斷液位。采用電極式液位檢測電路控制了成本,降低了系統(tǒng)復(fù)雜度,也方便自主選擇安裝位置。這里注意電極在水箱中容易生銹或被電化學(xué)腐蝕,影響檢測的準(zhǔn)確性。為了防止這種現(xiàn)象發(fā)生,本設(shè)計(jì)擬采用石墨涂層包裹電極,這樣既不影響檢測,也不會(huì)發(fā)生腐蝕等不良結(jié)果。

壓敏式傳感器精度高,與此同時(shí)帶來成本的問題;電容式傳感器具有精度高的特點(diǎn)但是熱水箱內(nèi)極易產(chǎn)生水垢,會(huì)影響測量精度;電極式電路成本低、應(yīng)用方便、適用性強(qiáng),是本次設(shè)計(jì)控制系統(tǒng)所采用的。

2.6 顯示方案

顯示輸出模塊要求能夠顯示水溫、水位,日期、時(shí)間以及以上信息的設(shè)置選項(xiàng)。有如下三種方案可供選擇:一、LED指示燈顯示水位,占用4個(gè)I/O口,數(shù)碼管顯示水溫以及時(shí)間等信息,占用12個(gè)I/O口;二、LCD1602顯示以上全部信息,但是不能同時(shí)顯示,占用11個(gè)I/O口;三、采用LCD12864液晶,可以同時(shí)輸出全部設(shè)計(jì)要求的信息,但是成本較高。

本設(shè)計(jì)顯示的信息量較多但是實(shí)時(shí)更新速度要求較低,并因此選取LCD1602液晶屏作為顯示輸出器件。

2.7  時(shí)鐘方案

本控制系統(tǒng)需要時(shí)間信息進(jìn)行控制驅(qū)動(dòng)電路,目前市場上有多種時(shí)鐘芯片可供選擇,而且單片機(jī)本身也有定時(shí)功能,因此考慮以下兩種方案:

一是直接使用單片機(jī)的定時(shí)計(jì)數(shù)器提供信號:用程序計(jì)算年、月、日、星期、時(shí)、分、秒等計(jì)數(shù)信息。此種方案雖然減少芯片的使用,成本低,但是,實(shí)現(xiàn)的時(shí)間誤差較大。二是采用DS1302時(shí)鐘芯片:DS1302是一款高性能的時(shí)鐘芯片,其特點(diǎn)有:計(jì)時(shí)準(zhǔn)確、接口簡單、使用方便以及功耗較低。所以采用DS1302芯片提供時(shí)鐘信息具有較多的優(yōu)點(diǎn)。


第三章  控制系統(tǒng)硬件設(shè)計(jì)

3.1  總體設(shè)計(jì)

太陽能熱水器控制系統(tǒng)主要功能的實(shí)現(xiàn)有STC89C52RC單片機(jī)控制水溫、水位等信息的采集與輸出、控制繼電器開通與關(guān)斷,進(jìn)而使用戶在消耗少量能源的情況下獲取更多的熱水。如圖3.1所示,控制系統(tǒng)主要包括溫度檢測模塊、水位檢測模塊、實(shí)時(shí)時(shí)鐘模塊、按鍵輸入模塊、LCD顯示模塊以及繼電器驅(qū)動(dòng)電路,驅(qū)動(dòng)電路包括有輔助加熱模塊和自動(dòng)上水模塊。

0.004.jpg 0.005.jpg 0.006.jpg

水溫水位檢測模塊負(fù)責(zé)溫度與水位的檢測工作,溫度檢測傳感器采用達(dá)拉斯半導(dǎo)體公司生產(chǎn)的DS18B20,通過與單片機(jī)的I/O口相連;水位檢測電路采用電極式的測量方法;實(shí)時(shí)時(shí)鐘為整個(gè)系統(tǒng)提供實(shí)時(shí)時(shí)間,用戶可以設(shè)置自動(dòng)加熱的時(shí)間段,其他時(shí)間可以手動(dòng)加入以節(jié)約能源;鍵盤輸入模塊實(shí)現(xiàn)對系統(tǒng)控制信息的輸入;LCD顯示模塊采用LCD1602器件輸出控制系統(tǒng)的信息;驅(qū)動(dòng)電路有繼電器負(fù)責(zé)通斷電磁閥上水,用雙向晶閘管接通加熱器件電路可以避免繼電器啟動(dòng)時(shí)產(chǎn)生電弧帶來的危險(xiǎn)。電氣原理圖如圖3.2所示。

0.007.jpg
圖3. 2控制系統(tǒng)電氣原理圖


3.2  主控模塊

3.2.1 單片機(jī)接口配置

水溫檢測模塊:P1.7;水位檢測電路:P3.4~P3.7;鍵盤輸入模塊:P1.0~P1.6;實(shí)時(shí)時(shí)鐘模塊: P2.5~P2.7;自動(dòng)上水模塊:P2.3輔助加熱模塊:P2.4;水溫水位顯示模塊:數(shù)據(jù)口P0、使能等等P2.0~P2.2(LCD1602)。

0.008.jpg

圖3.3 單片機(jī)接口配置圖

3.2.2  復(fù)位電路

單片機(jī)在運(yùn)行時(shí)難免會(huì)遇到各種問題,快速的解決方案是進(jìn)行系統(tǒng)復(fù)位,使CPU和其他器件處于初始狀態(tài)。

0.009.jpg

圖3.4 復(fù)位電路

3.2.3  時(shí)鐘電路

時(shí)鐘電路是單片機(jī)CPU的心臟,它控制著CPU的工作節(jié)拍,可以通過提高時(shí)鐘頻率來提高CPU的計(jì)算速度[5]。

0.010.jpg

圖3.5 89C52時(shí)鐘震蕩電路

3.3  溫度測量模塊

3.3.1  DS18B20簡介

本設(shè)計(jì)采用DALLAS (Maxim)公司出產(chǎn)的DS18B20芯片,該產(chǎn)品特點(diǎn)有:獨(dú)特的1-Wire接口僅僅占用一個(gè)通信端口;內(nèi)置溫度傳感器和EEPROM減少外部元件的數(shù)量;測量溫度范圍:-55°C至+125°C (-67°F至+257°F),-10°C至+85°C范圍內(nèi)測量精度為±0.5°C;9位至12位可編程分辨率;無需另接外部元件;寄生供電模式下只需要2個(gè)操作引腳(DQ和GND);多點(diǎn)通信以簡化分布式溫度測量工作;每個(gè)器件具有唯一64位序列號,存儲在器件的ROM內(nèi);用戶可以靈活地定義溫度報(bào)警門限,通過報(bào)警搜索指令來找到溫度超出門限的器件;提供8引腳SO,8引腳μSOP,3引腳TO-92多種封裝形式,如圖3-7展示了DS18B20.各種封裝及引腳圖。

0.011.jpg
圖3.7 DS18B20封裝形式
1



本設(shè)計(jì)中采用的是TO-92形式的封裝,其尺寸形狀便于安裝在熱水器中。通過屏蔽雙絞線與單片機(jī)相連,可以實(shí)現(xiàn)長距離測量工作。各種封裝的引腳定義見下表。

表3.1DS18B20管腳說明

SO*
SOP*
TO-92
符號
描述
備注:
NC引腳為懸空標(biāo)識
標(biāo)號
5
4
1
GND
接地引腳
4
1
2
DQ
數(shù)據(jù)輸入輸出引腳 單總線開漏引腳 當(dāng)使用寄生電路供電模式時(shí)也可以為器件提供電力
3
8
3
VDD
可選電力引腳

3.3.2 溫度測量電路接線圖

DS18B20采用的獨(dú)特的一線式結(jié)構(gòu),其僅需一根線就能夠?qū)崿F(xiàn)通信。溫度傳感器一共有三條線:電源線、電源底線及數(shù)據(jù)線,其電源即可通過電源供電如圖3-5所示,但使用外部電源可以提高測量速度。以上所述特點(diǎn)表明DS18B20非常適合用于長距離多點(diǎn)溫度檢測系統(tǒng)。

0.012.jpg

圖3.6 DS18B20外部供電電路圖

溫度測量模塊的組成器件有:DS18B20和4.7k上拉電阻。注意在長距離傳輸時(shí)使用屏蔽類雙絞線,應(yīng)該適當(dāng)減少上拉電阻阻值,以補(bǔ)償線阻。

0.013.jpg

圖 3.8  DS18B20接線圖

DS18B20檢測的溫度經(jīng)單片機(jī)處理、判斷,可以進(jìn)行LCD輸出顯示和控制加熱器件工作。對于加熱溫度,我國目前沒有相關(guān)行業(yè)標(biāo)準(zhǔn)。出于安全考慮,最高加熱溫度控制在55°C,最低加熱溫度為40°C。

3.4  水位檢測模塊

水位監(jiān)測模塊采用的電極式測量電路原理如圖所示。電極A對應(yīng)10%水位下限,電極B對應(yīng)40%水位,電極C對應(yīng)70%水位,電極D對應(yīng)95%水位上限。水箱底部放置公共地線,每當(dāng)水位到達(dá)某一個(gè)電極位置,比如在70%水位,水將電極A、B、C與公共地線短接。根據(jù)原理圖所示,電極A、B、C接地,電信號經(jīng)74LS04反相,P3.7 ,P3.6,P3.5將采集到高電平,P3.4保持低電平。此時(shí)單片機(jī)僅需查詢數(shù)據(jù)便可判斷出水位的信息。

對于水位監(jiān)測模塊的設(shè)計(jì)要注意電極在水箱中容易生銹或被電化學(xué)腐蝕,影響檢測的準(zhǔn)確性。為了防止這種現(xiàn)象發(fā)生,本設(shè)計(jì)擬采用石墨涂層包裹電極,這樣既不影響檢測,也不會(huì)發(fā)生腐蝕等不良結(jié)果。

0.014.jpg

圖3.9水位檢測模塊電氣原理圖


3.5  顯示模塊

3.5.1  LCD1602電氣接線圖

顯示電路有排阻、電位器以及LCD1602構(gòu)成,電位器調(diào)節(jié)顯示對比度。STC89C52的P0口和排阻、LCD1602的數(shù)據(jù)I/O口相連,P2^0接RS引腳,P2^1接R/W引腳,P2^2接E引腳。

0.015.jpg

圖3.10 LCD1602電氣原理圖

3.5.2  LCD1602技術(shù)參數(shù)及接口說明

LCD1602主要性能指標(biāo)有:16X2個(gè)字符顯示容量;4.5~5.5V的工作電壓;2.0mA工作電流;字符尺寸為2.95X4.35mm。引腳說明見下表

[td]
表3.2  LCD引腳說明

編號

符號

引腳說明

編號

符號

引腳說明

1

VS S

電源地

9

D2

數(shù)據(jù)I/O

2

VDD

電源正

10

D3

數(shù)據(jù)I/O

3

VL

液晶偏壓信號

11

D4

數(shù)據(jù)I/O

4

RS

數(shù)據(jù)/命令選擇(H/L)

12

D5

數(shù)據(jù)I/O

5

R/W

讀/寫選擇(H/L)

13

D6

數(shù)據(jù)I/O

6

E

使能

14

D7

數(shù)據(jù)I/O

7

D0

數(shù)據(jù)I/O

15

BLA

背光燈正極

8

D1

數(shù)據(jù)I/O

16

BLK

背光燈負(fù)極


3.6  實(shí)時(shí)時(shí)鐘

3.6.1  DS1302簡介

DS1302 是DALLAS (Maxim)公司推出的涓流充電時(shí)鐘芯片。片內(nèi)包含有實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM ,通過簡單的串行接口與單片機(jī)進(jìn)行通信。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、日、星期、月、年的信息,每月天數(shù)和閏年天數(shù)可實(shí)現(xiàn)自動(dòng)調(diào)整,時(shí)鐘操作可通過AM/PM 指示決定采用24或12小時(shí)格式。DS1302 與單片機(jī)之間采用同步串行的方式進(jìn)行通訊,僅需用到三根線:RST復(fù)位、 I/O 數(shù)據(jù)線、 SCLK串行時(shí)鐘。時(shí)鐘/RAM 的讀/寫數(shù)據(jù)可以一個(gè)字節(jié)或多達(dá)31個(gè)字節(jié)的字符組方式通信。DS1302 工作時(shí)功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW。

3.6.2  時(shí)鐘電路電氣原理圖

實(shí)時(shí)時(shí)鐘模塊由電池、晶振、電容以及DS1302時(shí)鐘芯片組成。RST引腳與單片機(jī)的P2.5相連,SCLK與P2.6相連,I/O與P2.7相連。

0.016.jpg

圖3.11 實(shí)時(shí)時(shí)鐘電路圖

3.7  驅(qū)動(dòng)模塊

驅(qū)動(dòng)模塊包括上水電磁閥驅(qū)動(dòng)電路和加熱元件驅(qū)動(dòng)電路。

3.6.1 上水電磁閥驅(qū)動(dòng)電路

上水電磁閥驅(qū)動(dòng)電路主要元件有:兩個(gè)1k電阻、一個(gè)二極管1N4007、一個(gè)三極管2N3905,一個(gè)5V的LED以及繼電器。

該驅(qū)動(dòng)電路控制信號低電平有效,這時(shí)三極管導(dǎo)通,繼電器工作,電磁閥開啟實(shí)現(xiàn)低水位自動(dòng)上水。當(dāng)水位檢測模塊監(jiān)測水位到達(dá)高水位時(shí),P2.3置1,三極管關(guān)斷,繼電器停止工作,電磁閥閉合。 0.017.jpg

圖3.11 自動(dòng)上水驅(qū)動(dòng)電路

3.6.2  自動(dòng)加熱驅(qū)動(dòng)電路

自動(dòng)加熱驅(qū)動(dòng)電路由雙向晶閘管Q4015N5、光電耦合器件MOC3022、以及一個(gè)47歐姆的電阻構(gòu)成。

該電路設(shè)計(jì)構(gòu)想是:電熱元件功率比較高,普通繼電器在開通、關(guān)斷瞬間會(huì)產(chǎn)生電弧。由于電弧會(huì)損壞器件,因而普通繼電器難以勝任開關(guān)工作,即使可以,成本也比較高。這里采用固態(tài)繼電器的原理,用雙向晶閘管當(dāng)作交流開關(guān)。雙向晶閘管的門極控制電路的開通與關(guān)斷:當(dāng)單片機(jī)程序判斷需要開啟加熱功能時(shí),I/O口信號經(jīng)光耦產(chǎn)生門極電流使晶閘管導(dǎo)通;當(dāng)加熱到指定溫度,光耦關(guān)斷門極電路,流過雙向晶閘管的工作電流最多在一個(gè)周期內(nèi),就會(huì)低于晶閘管的最小導(dǎo)通電流,晶閘管關(guān)斷。 0.018.jpg

圖3.12 自動(dòng)加熱驅(qū)動(dòng)電路


3.8  按鍵模塊

3.8.1 按鍵模塊簡介

本熱水器控制系統(tǒng)涉及到一些功能設(shè)置鍵和一個(gè)系統(tǒng)復(fù)位鍵,功能鍵分別是:“加”鍵、“減”鍵、“設(shè)置”鍵、“選項(xiàng)”鍵、“返回”鍵、“加熱”鍵以及“上水”鍵。

0.019.jpg

圖3.13  按鍵模塊原理圖

在顯示模式中,按下設(shè)置鍵,進(jìn)入設(shè)置模式;設(shè)置模式中按下返回鍵,退出到顯示模式。在設(shè)置模式中,按下選項(xiàng)鍵選擇設(shè)置選項(xiàng)。在特定選項(xiàng)中,由加、減鍵上下設(shè)置數(shù)值。加熱鍵和上水鍵可以手動(dòng)運(yùn)行加熱及上水功能,方便客戶多樣性地使用本控制系統(tǒng)。

3.8.2 按鍵抖動(dòng)處理

按鍵模塊是操作人員輸入系統(tǒng)信息的入口,所以精確識別每個(gè)按鍵的動(dòng)作是決定系統(tǒng)能否正常工作的關(guān)鍵。現(xiàn)在市場上的按鍵多采用機(jī)械彈性開關(guān),電信號在機(jī)械觸點(diǎn)的閉合和斷開過程中,完成高低電平的轉(zhuǎn)換。但是按鍵在閉合及斷開瞬時(shí)間由于彈性作用,必然產(chǎn)生一連串的抖動(dòng)。

0.020.jpg

圖3.14  按鍵抖動(dòng)示意圖

為了穩(wěn)定操作,我們要防止抖動(dòng)的發(fā)生,為了消除抖動(dòng)的影響,可以從硬件和軟件兩方面解決:1)硬件延時(shí)消抖:計(jì)算好電容放電時(shí)間,利用放電延時(shí)不失為一個(gè)方案。但本設(shè)計(jì)選用的單片機(jī)程序存儲空間足夠放下軟件消抖的函數(shù),且考慮到批量生產(chǎn)增加電容的成本,故采用下一方案。2)軟件延時(shí)消抖:如果按鍵較多,常用軟件延時(shí)的方法去抖動(dòng)。流程如下:檢測到按鍵閉合→延時(shí)5-10ms→再次檢測按鍵狀態(tài),如果再次檢測仍是閉合狀態(tài),則認(rèn)為確實(shí)有按鍵按下。


第四章  控制系統(tǒng)軟件設(shè)計(jì)

4.1  實(shí)時(shí)時(shí)鐘軟件設(shè)計(jì)

4.1.1  DS1302時(shí)鐘地址及數(shù)據(jù)格式

對DS1302的時(shí)鐘操作需要的數(shù)據(jù)地址及格式如下表所示[12]。

表4.1時(shí)鐘地址及數(shù)據(jù)格式
1



0.021.jpg

下面介紹使用到的寄存器含義:

CH(時(shí)鐘停止位):CH=0振蕩器工作允許;CH=1振蕩器停止。

寄存器2第5位(AM/PM定義):AP=0   上午模式;AP=1   下午模式。

WP(寫保護(hù)位):WP=0數(shù)據(jù)能夠?qū)懭耄籛P=1 數(shù)據(jù)不能寫入。

寄存器2第7位 (12/24 小時(shí)標(biāo)志):bit7=0:24 小時(shí)模式;bit7=1:12 小時(shí)模式。


4.1.3  DS1302軟件流程

0.022.jpg

圖4.1 DS1302軟件控制流程圖

4.1.4  時(shí)間讀取子程序

void ds_get_time(systemtime *time)
{
              unsigned char readvalue;
              //second
              readvalue=dsread(dssecond);
              time->second=((readvalue&0x70)>>4)*10+(readvalue&0x0F);
              //minute
              readvalue=dsread(dsminute);
              time->minute=((readvalue&0x70)>>4)*10+(readvalue&0x0F);
              //hour
              readvalue=dsread(dshour);
              time->hour=((readvalue&0x70)>>4)*10+(readvalue&0x0F);
              //day
              readvalue=dsread(dsday);
              time->day=((readvalue&0x70)>>4)*10+(readvalue&0x0F);
              //week
              readvalue=dsread(dsweek);
              time->week=((readvalue&0x70)>>4)*10+(readvalue&0x0F);
              //month
              readvalue=dsread(dsmonth);
              time->month=((readvalue&0x70)>>4)*10+(readvalue&0x0F);
              //year
              readvalue=dsread(dsyear);
              time->year=((readvalue&0x70)>>4)*10+(readvalue&0x0F);


}

4.1.5 時(shí)間設(shè)置子程序

voiddssettime(unsigned char addr,unsigned char byte)
{
              dsprotect(0);
              dswrite(addr,((byte/10)<<4|(byte%10)));
}

4.1.6  日期BCD轉(zhuǎn)字符程序

voiddatezstr(systemtime *time,char *datestr)
{
              *datestr=time->year/10+'0';
              *(datestr+1)=time->year%10+'0';

              *(datestr+2)='-';

              *(datestr+3)=time->month/10+'0';
              *(datestr+4)=time->month%10+'0';

              *(datestr+5)='-';
              *(datestr+6)=time->day/10+'0';
              *(datestr+7)=time->day%10+'0';
              *(datestr+8)='';
}

4.1.7  時(shí)間BCD轉(zhuǎn)字符程序

voidtimezstr(systemtime *time,char *timestr)
{
              *timestr=time->hour/10+'0';
              *(timestr+1)=time->hour%10+'0';

              *(timestr+2)='-';

              *(timestr+3)=time->minute/10+'0';
              *(timestr+4)=time->minute%10+'0';

              *(timestr+5)='-';
              *(timestr+6)=time->second/10+'0';
              *(timestr+7)=time->second%10+'0';
              *(timestr+8)='';
}


4.2  水溫檢測軟件設(shè)計(jì)

4.2.1 傳感器操作指令

本小節(jié)介紹DS18B20的數(shù)據(jù)操作指令,為程序設(shè)計(jì)提供原理性指導(dǎo)。首先要了解DS18B20的內(nèi)部存儲空間,內(nèi)部存儲器由一個(gè)高速暫存器和一個(gè)非易失性E2PROM構(gòu)成,其原理如表3.2所示。

表4.2 DS18B20溫度傳感器內(nèi)存空間


高速暫存器SCRATCHPAD




Byte 0
溫度值低八位LSB
(85°C)




Byte 1
溫度值高八位MSB


E2PROM

Byte 2
TH寄存器或用戶數(shù)據(jù)1*
0.023.jpg
TH寄存器或用戶數(shù)據(jù)1*
Byte 3
TL寄存器或用戶數(shù)據(jù)2*
0.024.jpg
TL寄存器或用戶數(shù)據(jù)2*
Byte 4
控制字寄存器*
控制字寄存器*
Byte 5
保留




Byte 6
保留




Byte 7
保留




Byte 8
CRC*





由于DS18B20的單總線設(shè)計(jì),在數(shù)據(jù)傳輸是要滿足一定格式要求的方能進(jìn)行操作。根據(jù)芯片的通信協(xié)議,主機(jī)與DS18B20的通信要具有初始化、ROM操作指令、功能操作指令三個(gè)步驟。下表列出本設(shè)計(jì)需要使用的一些指令及其說明。


表4.3 ROM操作指令表和功能指令表

描述
指令字
備注
ROM操作指令
忽略ROM
忽略ROM命令允許主機(jī)不提供64位ROM編碼以提高訪問存儲器的速度。
CCh
總線上只有一個(gè)DS18B20時(shí)方可使用,否則會(huì)發(fā)生沖突。
功能指令
溫度轉(zhuǎn)換
啟動(dòng)溫度轉(zhuǎn)換
44h
DS18B20發(fā)送溫度轉(zhuǎn)換狀態(tài)給主機(jī)
讀暫存器
讀取整個(gè)暫存器包括CRC 字節(jié)
BEh
DS18B20發(fā)送最多9個(gè)字節(jié)的數(shù)據(jù)給主機(jī),主機(jī)可以隨時(shí)停止讀取數(shù)據(jù)。
寫暫存器
寫數(shù)據(jù)到暫存器中的第二、第三、第四字節(jié)空間(TH,TL和控制字寄存器)
4Eh
主機(jī)發(fā)送三個(gè)字節(jié)的數(shù)據(jù)到DS18B20.
復(fù)制暫存器
復(fù)制暫存器中TH, TL和控制字寄存器的數(shù)據(jù)到E2PROM。
48h

調(diào)取E2PROM
復(fù)制E2PROM中的數(shù)據(jù)到暫存器的TH, TL和控制字寄存器。
B8h
DS18B20發(fā)送調(diào)取狀態(tài)給主機(jī)

·4.2.2  DS18B20軟件流程

0.025.jpg

圖4.2  DS18B20軟件流程

4.2.3  獲取溫度子程序

void dsgettemp(unsigned char *integer,unsigned char *decimal,unsigned char *symbol)
{
              unsigned char high,low,temp,tempth,temptl,tempconfig;
              sendChangeCmd();              //發(fā)送溫度轉(zhuǎn)換指令
              delay_ms(800);
              sendReadCmd();  //發(fā)送讀取暫存器指令


              low=readByte();
              high=readByte();
              tempth=readByte();
temptl=readByte();
              tempconfig=readByte();
              sendChangeCmd(); //為下一次溫度采集做準(zhǔn)備

temp=high>>4;   //溫度計(jì)算
              if(0==temp)
              {
                            (*symbol)=0;
                            (*integer)=(high<<4)|(low>>4);
                            (*decimal)=(low&0x0f)*0.625;

              }
              else
              {
                            (*symbol)=1;
                            (*integer)=~(high<<4)|(low>>4);
         (*decimal)=10-(low&0x0f)*0.625;
                            if(10==*decimal)
                            {
                                          (*integer) += 1;
                                          (*decimal) = 0;
                            }
              }
}


4.3  顯示模塊軟件設(shè)計(jì)

4.3.1  LCD1602指令及說明

0.026.jpg

4.3.2 LCD1602RAM地址映射

LCD1602液晶控制器內(nèi)部RAM有80x8的緩沖空間,注意數(shù)據(jù)地址還應(yīng)與上0x80h。

0.027.jpg

4.3.3  初始化過程

延時(shí)15mS;
寫指令38H(不檢測忙信號);
延時(shí)5mS;
寫指令38H(不檢測忙信號);
延時(shí)5mS;
寫指令38H(不檢測忙信號);
以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號;
寫指令38H:顯示模式設(shè)置;
寫指令08H:顯示關(guān)閉;
寫指令01H:顯示清屏;
寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置;
寫指令0CH:顯示開及光標(biāo)設(shè)置;

4.3.4  顯示子程序

voidlcdoutput(unsigned char x,unsigned char y,unsigned char *str)
{
              if(y)//此由有坐標(biāo)x,y值計(jì)算地址y=1則顯示在第二行
                            x|=0x40;
              x|=0x80;//LCD1602存儲地址第七位為1,所以地址要與上0x80

              lcdwrite(command,x);//寫入地址

              while(*str!='')//寫入數(shù)據(jù)
              {
                            lcdwrite(data,*str);
                            str++;

              }
}


4.4  水位檢測軟件設(shè)計(jì)

水位檢測程序比較簡單,有圖3.9 水位檢測模塊電氣原理圖所示,僅需讀取P3口,在屏蔽低四位就可判斷水位信息。水位檢測模塊的原理是:讀取水位檢測接口,然后進(jìn)行查表,再根據(jù)預(yù)設(shè)的關(guān)鍵水位信息操作繼電器驅(qū)動(dòng)電路。部分程序如下:
unsigned char depthprocess()
{

              unsigned char depth;
              unsigned char depthvalue;
              P3=0xff;
              depth=P3;
              depth&=0xf0;
              P3=0xff;
              switch(depth)
              {
                            case 0xf0:
                            {
                                          water=1;
                                          depthvalue=100;
                                          break;
                            }
                            case 0x70:
                            {

                                          depthvalue=70;
                                          break;
                            }
                            case 0x30:
                            {

                                          depthvalue=40;
                                          break;
                            }
                            case 0x00:
                            {
                                          water=0;
                                          depthvalue=10;
                                          break;
                            }
                            default:
                            break;
              }
              return depthvalue;
}

4.5  按鍵模塊軟件設(shè)計(jì)

4.5.1  讀取鍵值子程序

unsigned char readkeys()
{
              unsigned char keystemp,keysvalue;
              do
              {
                            P1=0xff;
                            keystemp=P1;
                            delay_ms(8);
                            P1=0xff;
                            keysvalue=P1;

              }
              while(keystemp!=keysvalue);
              returnkeysvalue;
}

4.5.2  鍵值處理子程序

由于鍵值處理子程序較長,這里摘錄一段修改日期的程序:

voidkeysprocess()
{

              unsigned char x;//零時(shí)變量
              chardatestring[9],timestring[9];
              charyearnum[1];
              charmonthnum[1];
              chardaynum[1];
              charhournum[1];
              charminnum[1];
              charthnum[1];
              chartlnum[1];
              systemtimedatetime;
              unsigned char keys;
              unsigned char pagcount=1;//計(jì)次移動(dòng)
              charaddnum[7];            

              unsigned char set,add,sub,hea,wat,mov,sav;
              //設(shè)置,加鍵,減鍵,加熱,上水,移動(dòng),保存
              keys=readkeys();
              set=keys&0x01;
              add=keys&0x02;
              sub=keys&0x04;
              hea=keys&0x08;
              wat=keys&0x10;
              mov=keys&0x20;
              sav=keys&0x40;

              if(set==0)
              {
                            dsgettime1(&datetime);
                  datezstr1(&datetime,datestring);//獲取時(shí)間
                            timezstr1(&datetime,timestring);
                            if(mov==0)
                            {

                                          pagcount++;
                                          if(pagcount>8)//要設(shè)置的項(xiàng)目共有7個(gè)最后一次復(fù)使
                                          {
                                                        pagcount=1;
                                          }
                                          switch(pagcount)
                                          {
                                                        case 1:
                                                        {
                                                                      dssettime1(dssecond,0x80);//stop ds1302 CH置高
                                                                      lcdwrite1(command,0x80+6);//設(shè)置年閃爍
                                                                      lcdwrite1(command,0x0f);//閃爍

                                                                      if(add==0)
                                                                      {

                                                                                    yearnum[0]=datestring[0]+datestring[1];//年

                                                                                    yearnum[0]++;

                                                                                    if(yearnum[0]>99)
                                                                                    {yearnum[0]=0;}
                                                                                    lcdoutput1(5,0,yearnum);//顯示修改結(jié)果
                                                                                    dssettime1(dsyear,numtobcd(yearnum[0],1));//寫入年
                                                                      }
                                                                      if(sub==0)
                                                                      {
                                                                                    yearnum[0]=datestring[0]+datestring[1];//年

                                                                                    yearnum[0]--;

                                                                                    if(yearnum[0]<=0)
                                                                                    {
                                                                                                  if(yearnum[0]==0)
                                                                                                  {lcdoutput1(6,0,"0");}            
                                                                                                  else
                                                                                                  {yearnum[0]=99;}

                                                                          }
                                                                                    lcdoutput1(5,0,yearnum);//顯示修改結(jié)果
                                                                                    dssettime1(dsyear,numtobcd(yearnum[0],1));//寫入年

                                                                      }

                                                                      dssettime1(dssecond,0);//啟動(dòng)ds1302CH置低CH置低                                                      
                                                                      break;
                                                        }
                                                        case 2:
                                                        {
                                                        ……
                                                        }
                                          }


第五章  控制系統(tǒng)調(diào)試與仿真

0.028.jpg
5.1  總體仿真結(jié)果展示

圖5.1  總體仿真效果圖

5.2  自動(dòng)加熱仿真

由于在Proteus中雙向晶閘管無法仿真,這里使用繼電器驅(qū)動(dòng)電路替代加熱驅(qū)動(dòng)電路,同樣是低電平有效,程序不變。

0.029.jpg

圖5.2  加熱模塊原理圖

水溫低于40°C開啟加熱:

0.030.jpg

圖5.3開啟加熱仿真結(jié)果

水溫高于55°C關(guān)閉加熱:

0.031.jpg

圖5.4  關(guān)閉加熱仿真結(jié)果

0.032.jpg

圖5.5  溫度傳感器狀態(tài)

綜上顯示,模塊正常工作


5.3  水位檢測及上水仿真

水位檢測模塊原理如下。當(dāng)水位出于電極3、4之間,電極1、2、3相當(dāng)于開關(guān)閉合。此時(shí)P3口的狀態(tài)為0xe0(用0xf0屏蔽低四位),LED4、5、6.燈亮。

0.033.jpg 0.034.jpg
圖5.6  水位檢測模塊原理圖及仿真

當(dāng)水位低于10%,上水驅(qū)動(dòng)電路動(dòng)作,繼電器打開電磁閥上水;水位到達(dá)高水位繼電器關(guān)閉電磁閥,停止上水。

0.035.jpg
圖5.7  低水位開始上水仿真結(jié)果
0.036.jpg
圖5.8  高水位停止上水仿真結(jié)果


第六章  總結(jié)與展望

我國正處于“十三五”時(shí)期,在十三五規(guī)劃中寫到:深入推進(jìn)能源革命,著力推動(dòng)能源生產(chǎn)利用方式變革,優(yōu)化能源供給結(jié)構(gòu),提高能源利用效率,建設(shè)清潔低碳、安全高效的現(xiàn)代能源體系,維護(hù)國家能源安全。為相應(yīng)國家號召,應(yīng)當(dāng)積極開發(fā)和利用太陽能等清潔可再生能源。在生活中,太陽能熱水器得到廣泛而又普遍的運(yùn)用。為方便用戶的個(gè)性化、人性化使用太陽能熱水器,積極推廣太陽能的利用,開發(fā)一款控制系統(tǒng)的任務(wù)放在了我們的面前。本設(shè)計(jì)通過STC89C52作為核心主控制器,采用時(shí)鐘芯片DS1302,溫度傳感器DS18B20組成控制系統(tǒng)              。制作了一款可以智能加熱、自動(dòng)上水等功能的熱水器控制器,并且控制器有精度高、抗干擾性強(qiáng)等諸多優(yōu)點(diǎn)。

通過大量閱覽參考資料和歷經(jīng)半年的不斷調(diào)試,控制系統(tǒng)終于達(dá)到了設(shè)計(jì)要求。本設(shè)計(jì)進(jìn)行電路硬件設(shè)計(jì)、軟件設(shè)計(jì),通過了仿真調(diào)試。由于工作量較大,本系統(tǒng)的設(shè)計(jì)還有一些不足:

  • 溫度測量反映速度較慢,有待進(jìn)一步優(yōu)化軟件設(shè)計(jì)。
  • 按鍵的中斷方式未完成調(diào)試,功能是通過查詢方式實(shí)現(xiàn)的,效率較低。
  • 控制器與太陽能熱水器結(jié)合的優(yōu)化設(shè)計(jì)沒有作進(jìn)一步闡述。

部分源碼如下:


  1. #include
  2. #include

  3. #include
  4. #include
  5. #include
  6. #include

  7. sbit heater = P2^3;

  8. unsigned char x;
  9. /************更新***************/
  10. void updatatime()
  11. {  systemtime datetime;
  12.    
  13.    
  14.    
  15.            lcdwrite(command,clear_screen);
  16.         dsgettime(&datetime);         //獲取時(shí)間
  17.         lcdoutput(0,0,"DATE:");                    //日期
  18.         datezstr(&datetime,datestring);
  19.         lcdoutput(5,0,"20");
  20.         lcdoutput(7,0,datestring);
  21.         lcdoutput(0,1,"TIME:");
  22.         for(x=8;x>0;x--)                        //循環(huán)顯示時(shí)間
  23.         {
  24.         converttemp();
  25.         dsgettime(&datetime);
  26.     timezstr(&datetime,timestring);
  27.     lcdoutput(5,1,timestring);
  28.         delay_ms(300);
  29.     }



  30. }
  31. void updatatemp()
  32. {

  33. lcdwrite(command,clear_screen);                 
  34. lcdoutput(0,0,"SWEN:");                        //水溫
  35. lcdoutput(0,1,"SWEI:");                        //水位

  36. for(x=8;x>0;x--)                        //循環(huán)顯示時(shí)間
  37.         {
  38.         converttemp();
  39.         lcdoutput(5,0,tempstr);
  40. depthprocess();
  41.         delay_ms(300);
  42.     }
  43. }


  44. /************主函數(shù)***************/
  45. void main()
  46. {        
  47.         unsigned char integer,symbol,decimal;
  48.         
  49.     ds1302init();
  50.         lcdini();
  51.         while(1)
  52.         {
  53.                  dsgettemp(&integer,&decimal,&symbol);        //獲取溫度
  54.                  if(integer<40)         //自動(dòng)加熱
  55.                          {
  56.                                  heater=0;
  57.                          }
  58.                          else if(integer>55)
  59.                          {
  60.                                  heater=1;
  61.                          }
  62.                   //關(guān)鍵顯示部分
  63.                 updatatime();
  64.                 updatatemp();
  65.                         
  66.                         
  67.                                                                         
  68.         }         
  69.          
  70. }
復(fù)制代碼
51hei.png
本人初學(xué),僅供參考,存在錯(cuò)誤和不足之處,請大家回帖多多指教,切勿照搬
顯示部分已經(jīng)調(diào)試好了,目前按鍵部分還沒有加入,大家有時(shí)間可以自行補(bǔ)充完善:
仿真程序.7z (929.87 KB, 下載次數(shù): 942)
如果有朋友補(bǔ)全了此程序,可以上傳到論壇大家一起學(xué)習(xí)

評分

參與人數(shù) 2黑幣 +10 收起 理由
光陰程序 + 5 回帖助人的獎(jiǎng)勵(lì)!
浪子knight + 5 贊一個(gè)!

查看全部評分

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:156776 發(fā)表于 2016-12-29 18:28 | 顯示全部樓層
模塊化的程序不會(huì)用啊 能不能給我一個(gè)綜合的
回復(fù)

使用道具 舉報(bào)

ID:315500 發(fā)表于 2018-4-24 16:52 | 顯示全部樓層

鍵盤功能誰能補(bǔ)上去啊
回復(fù)

使用道具 舉報(bào)

ID:325268 發(fā)表于 2018-5-8 18:31 | 顯示全部樓層
大哥能給個(gè)源程序么
回復(fù)

使用道具 舉報(bào)

ID:328659 發(fā)表于 2018-5-13 12:28 | 顯示全部樓層
沒有鍵值處理子程序啊  求分享
回復(fù)

使用道具 舉報(bào)

ID:330599 發(fā)表于 2018-5-15 18:12 | 顯示全部樓層
太厲害了啊
回復(fù)

使用道具 舉報(bào)

ID:510728 發(fā)表于 2019-5-13 19:36 | 顯示全部樓層
內(nèi)容很詳細(xì) 步驟很清晰 點(diǎn)贊
回復(fù)

使用道具 舉報(bào)

ID:510728 發(fā)表于 2019-5-23 21:17 | 顯示全部樓層
內(nèi)容很詳細(xì) 贊一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:630336 發(fā)表于 2019-11-1 13:18 來自觸屏版 | 顯示全部樓層
樓主,鍵程序誰弄好了啊,能發(fā)給大家學(xué)習(xí)一下嗎?感謝
回復(fù)

使用道具 舉報(bào)

ID:454639 發(fā)表于 2020-2-24 17:46 | 顯示全部樓層
同求鍵盤處理程序
回復(fù)

使用道具 舉報(bào)

ID:695166 發(fā)表于 2020-4-18 23:59 | 顯示全部樓層
很好,有用,愛了
回復(fù)

使用道具 舉報(bào)

ID:732695 發(fā)表于 2020-4-19 13:55 | 顯示全部樓層
模塊程序沒有區(qū)分啊
回復(fù)

使用道具 舉報(bào)

ID:620287 發(fā)表于 2020-5-8 12:50 來自觸屏版 | 顯示全部樓層
有整理好的原理圖和hex程序嗎?分享出來可以嗎
回復(fù)

使用道具 舉報(bào)

ID:921285 發(fā)表于 2021-5-30 20:02 | 顯示全部樓層
22583596 發(fā)表于 2020-5-8 12:50
有整理好的原理圖和hex程序嗎?分享出來可以嗎

你找到了嗎
回復(fù)

使用道具 舉報(bào)

ID:921285 發(fā)表于 2021-5-30 20:03 | 顯示全部樓層

HEX文件有碼
回復(fù)

使用道具 舉報(bào)

ID:987436 發(fā)表于 2021-12-2 23:10 | 顯示全部樓層
樓主可以發(fā)一下完整程序嗎
回復(fù)

使用道具 舉報(bào)

ID:987436 發(fā)表于 2021-12-4 17:12 來自觸屏版 | 顯示全部樓層
仿真不對,液晶屏不亮
回復(fù)

使用道具 舉報(bào)

ID:137190 發(fā)表于 2021-12-4 18:39 | 顯示全部樓層
啊S 發(fā)表于 2021-12-4 17:12
仿真不對,液晶屏不亮

重新下載,hex文件在objects目錄里面,Keil工程已經(jīng)重建了 原來那個(gè)工程缺文件,還有其他問題 大家一起研究改進(jìn)
回復(fù)

使用道具 舉報(bào)

ID:1024174 發(fā)表于 2022-5-26 05:42 | 顯示全部樓層
51黑ff 發(fā)表于 2021-12-4 18:39
重新下載,hex文件在objects目錄里面,Keil工程已經(jīng)重建了 原來那個(gè)工程缺文件,還有其他問題 大家一起研究 ...

按鍵處理程序如何加上去?
回復(fù)

使用道具 舉報(bào)

ID:1070414 發(fā)表于 2023-4-7 20:40 | 顯示全部樓層
仿真圖特別好
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级免费 | 涩涩视频在线观看 | 羞羞网站在线免费观看 | 极品在线 | 欧美精品久久 | 拍戏被cao翻了h承欢 | av一二三区 | 免费国产成人av | 国产一区精品 | 日韩成人在线视频 | 午夜视频免费在线观看 | 亚洲欧美综合精品另类天天更新 | 久久成人国产精品 | 色视频在线免费观看 | av黄色在线观看 | 日韩影院在线观看 | 国产欧美一区二区三区另类精品 | 国产精久久久 | 91新视频| 青草久久免费视频 | 台湾佬久久| 中文字幕一区二区三区四区五区 | 亚洲精品久久视频 | 中文字幕久久精品 | 一区二区高清不卡 | 欧美自拍视频 | 国产精品久久久久久久久久久久久久 | 欧美xxxx在线| 高清黄色毛片 | 9久久精品| 亚洲国产精品久久久久秋霞不卡 | 国产a爽一区二区久久久 | 天天影视网天天综合色在线播放 | 综合网中文字幕 | 综合久久综合久久 | 蜜桃视频一区二区三区 | 欧美最猛性xxxxx亚洲精品 | 亚洲欧美精品久久 | 天堂资源 | 亚洲一区二区在线 | 精品欧美一区二区在线观看视频 |