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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 45473|回復: 19
收起左側

基于單片機的太陽能熱水器控制系統 帶仿真 源碼下載

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

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

摘要

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

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


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  設計背景

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

自從傳統能源作為主導能源以來,兩大安全問題便顯現出來。一是傳統化石燃料的供應問題,其越來越難以滿足市場的需要。因為化石燃料是不可再生的能源,有限的儲量卻要應付世界經濟和人口的飛速增長。二是傳統能源的安全問題。一方面,由于開采技術的問題,煤礦事故頻繁發生;再者,資源的肆意無須開采,對地下水、地表生態環境造成了難以恢復的破壞。另一方面,傳統能源的使用還會產生廢氣廢渣,特別是燃燒未經處理的煤炭會排放SO2、粉塵等污染物。

應對傳統化石能源日益嚴峻的安全形勢,世界各國開始調整戰略政策,采取多元化供應策略,積極引導開發新能源,以降低對傳統能源的依賴性。

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

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

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

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

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


1.2  設計任務

本課題旨在設計一個小成本、低功耗、多用途的太陽能熱水器控制系統。熱水系統采用單片機芯片作為微型控制器,該系統是設計目標有:

  • 通過傳感器,將水位水溫采樣信號傳送給單片機進行處理,并進行水位及溫度的顯示;
  • 當水位到達低限,系統自動上水,高限停止上水;
  • 可調預置水溫設計,用戶可以自主設置溫度保持范圍,以應對不同地區不同季節;
  • 可以設定時段監控溫度,如果在時段內,溫度過低系統將循環加熱;
  • 允許自動/手動進行上水、加熱設置。

在設計系統的過程中,同時學習了單片機的開發與程序編制以及電路的設計與仿真等操作。本科階段的知識得到了進一步提高,另外有自學了Proteus和Keil等軟件的使用。在下文,提供了不同滿足設計要求的方案,最終選擇最優設計。


第二章  太陽能熱水器及控制系統簡介

2.1  熱水器及系統工作原理

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

0.002.jpg 圖2.1  太陽能原理圖

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


2.2 控制系統設計原則

本控制系統將單片機及外圍電路與太陽能熱水器結合起來。運用溫度、水位監測技術,將水溫、水位信息進行處理、控制。該系統設計遵循的原則如下:

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

2)準確性。本系統使用的測量電路較為先進,能夠精確地反映被測量的變化。

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

4)人性化。由于本系統要面向廣大客戶,所以在進行軟硬件設計時,要充分考慮諸多因素。

2.3  主控方案

選擇單片機芯片有以下兩種方案:

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

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

方案二:采用AT89S52。

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

兩種單片機都完全能夠滿足設計需要,STC89C52相對ATS89C52價格便宜,且抗干擾能力強。考慮到成本因素,因此選用STC89C52。


2.4 溫度檢測方案

溫度是整個太陽能熱水器工作狀態的核心指標,系統根據采集到的儲水箱溫度判斷接下來的動作,溫度測量的準確性直接關系到控制系統能否正常工作。

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

圖3.4 溫度測量流程圖

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

2.5  水位檢測方案

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

表 水位檢測傳感器

分類

超聲波

液壓式

電容式

電子式

器件

超聲波探測器

壓力傳感器

電容液位器

電極式液位器

描述

價格貴

使用不便,價格貴

抗干擾性差

使用方便精度不高


電極式水位檢測電路結構簡單,其精度也足夠控制系統的使用。利用導電液體開關電路的原理,適用于單片機等邏輯控制器。當水漫過電極,電路接通,電平發生改變,主控芯片依靠電平的狀態判斷液位。采用電極式液位檢測電路控制了成本,降低了系統復雜度,也方便自主選擇安裝位置。這里注意電極在水箱中容易生銹或被電化學腐蝕,影響檢測的準確性。為了防止這種現象發生,本設計擬采用石墨涂層包裹電極,這樣既不影響檢測,也不會發生腐蝕等不良結果。

壓敏式傳感器精度高,與此同時帶來成本的問題;電容式傳感器具有精度高的特點但是熱水箱內極易產生水垢,會影響測量精度;電極式電路成本低、應用方便、適用性強,是本次設計控制系統所采用的。

2.6 顯示方案

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

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

2.7  時鐘方案

本控制系統需要時間信息進行控制驅動電路,目前市場上有多種時鐘芯片可供選擇,而且單片機本身也有定時功能,因此考慮以下兩種方案:

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


第三章  控制系統硬件設計

3.1  總體設計

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

0.004.jpg 0.005.jpg 0.006.jpg

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

0.007.jpg
圖3. 2控制系統電氣原理圖


3.2  主控模塊

3.2.1 單片機接口配置

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

0.008.jpg

圖3.3 單片機接口配置圖

3.2.2  復位電路

單片機在運行時難免會遇到各種問題,快速的解決方案是進行系統復位,使CPU和其他器件處于初始狀態。

0.009.jpg

圖3.4 復位電路

3.2.3  時鐘電路

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

0.010.jpg

圖3.5 89C52時鐘震蕩電路

3.3  溫度測量模塊

3.3.1  DS18B20簡介

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

0.011.jpg
圖3.7 DS18B20封裝形式
1



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

表3.1DS18B20管腳說明

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

3.3.2 溫度測量電路接線圖

DS18B20采用的獨特的一線式結構,其僅需一根線就能夠實現通信。溫度傳感器一共有三條線:電源線、電源底線及數據線,其電源即可通過電源供電如圖3-5所示,但使用外部電源可以提高測量速度。以上所述特點表明DS18B20非常適合用于長距離多點溫度檢測系統。

0.012.jpg

圖3.6 DS18B20外部供電電路圖

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

0.013.jpg

圖 3.8  DS18B20接線圖

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

3.4  水位檢測模塊

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

對于水位監測模塊的設計要注意電極在水箱中容易生銹或被電化學腐蝕,影響檢測的準確性。為了防止這種現象發生,本設計擬采用石墨涂層包裹電極,這樣既不影響檢測,也不會發生腐蝕等不良結果。

0.014.jpg

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


3.5  顯示模塊

3.5.1  LCD1602電氣接線圖

顯示電路有排阻、電位器以及LCD1602構成,電位器調節顯示對比度。STC89C52的P0口和排阻、LCD1602的數據I/O口相連,P2^0接RS引腳,P2^1接R/W引腳,P2^2接E引腳。

0.015.jpg

圖3.10 LCD1602電氣原理圖

3.5.2  LCD1602技術參數及接口說明

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

[td]
表3.2  LCD引腳說明

編號

符號

引腳說明

編號

符號

引腳說明

1

VS S

電源地

9

D2

數據I/O

2

VDD

電源正

10

D3

數據I/O

3

VL

液晶偏壓信號

11

D4

數據I/O

4

RS

數據/命令選擇(H/L)

12

D5

數據I/O

5

R/W

讀/寫選擇(H/L)

13

D6

數據I/O

6

E

使能

14

D7

數據I/O

7

D0

數據I/O

15

BLA

背光燈正極

8

D1

數據I/O

16

BLK

背光燈負極


3.6  實時時鐘

3.6.1  DS1302簡介

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

3.6.2  時鐘電路電氣原理圖

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

0.016.jpg

圖3.11 實時時鐘電路圖

3.7  驅動模塊

驅動模塊包括上水電磁閥驅動電路和加熱元件驅動電路。

3.6.1 上水電磁閥驅動電路

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

該驅動電路控制信號低電平有效,這時三極管導通,繼電器工作,電磁閥開啟實現低水位自動上水。當水位檢測模塊監測水位到達高水位時,P2.3置1,三極管關斷,繼電器停止工作,電磁閥閉合。 0.017.jpg

圖3.11 自動上水驅動電路

3.6.2  自動加熱驅動電路

自動加熱驅動電路由雙向晶閘管Q4015N5、光電耦合器件MOC3022、以及一個47歐姆的電阻構成。

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

圖3.12 自動加熱驅動電路


3.8  按鍵模塊

3.8.1 按鍵模塊簡介

本熱水器控制系統涉及到一些功能設置鍵和一個系統復位鍵,功能鍵分別是:“加”鍵、“減”鍵、“設置”鍵、“選項”鍵、“返回”鍵、“加熱”鍵以及“上水”鍵。

0.019.jpg

圖3.13  按鍵模塊原理圖

在顯示模式中,按下設置鍵,進入設置模式;設置模式中按下返回鍵,退出到顯示模式。在設置模式中,按下選項鍵選擇設置選項。在特定選項中,由加、減鍵上下設置數值。加熱鍵和上水鍵可以手動運行加熱及上水功能,方便客戶多樣性地使用本控制系統。

3.8.2 按鍵抖動處理

按鍵模塊是操作人員輸入系統信息的入口,所以精確識別每個按鍵的動作是決定系統能否正常工作的關鍵,F在市場上的按鍵多采用機械彈性開關,電信號在機械觸點的閉合和斷開過程中,完成高低電平的轉換。但是按鍵在閉合及斷開瞬時間由于彈性作用,必然產生一連串的抖動。

0.020.jpg

圖3.14  按鍵抖動示意圖

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


第四章  控制系統軟件設計

4.1  實時時鐘軟件設計

4.1.1  DS1302時鐘地址及數據格式

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

表4.1時鐘地址及數據格式
1



0.021.jpg

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

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

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

WP(寫保護位):WP=0數據能夠寫入;WP=1 數據不能寫入。

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


4.1.3  DS1302軟件流程

0.022.jpg

圖4.1 DS1302軟件控制流程圖

4.1.4  時間讀取子程序

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 時間設置子程序

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

4.1.6  日期BCD轉字符程序

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  時間BCD轉字符程序

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  水溫檢測軟件設計

4.2.1 傳感器操作指令

本小節介紹DS18B20的數據操作指令,為程序設計提供原理性指導。首先要了解DS18B20的內部存儲空間,內部存儲器由一個高速暫存器和一個非易失性E2PROM構成,其原理如表3.2所示。

表4.2 DS18B20溫度傳感器內存空間


高速暫存器SCRATCHPAD




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




Byte 1
溫度值高八位MSB


E2PROM

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




Byte 6
保留




Byte 7
保留




Byte 8
CRC*





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


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

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

調取E2PROM
復制E2PROM中的數據到暫存器的TH, TL和控制字寄存器。
B8h
DS18B20發送調取狀態給主機

·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();              //發送溫度轉換指令
              delay_ms(800);
              sendReadCmd();  //發送讀取暫存器指令


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

temp=high>>4;   //溫度計算
              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  顯示模塊軟件設計

4.3.1  LCD1602指令及說明

0.026.jpg

4.3.2 LCD1602RAM地址映射

LCD1602液晶控制器內部RAM有80x8的緩沖空間,注意數據地址還應與上0x80h。

0.027.jpg

4.3.3  初始化過程

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

4.3.4  顯示子程序

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

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

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

              }
}


4.4  水位檢測軟件設計

水位檢測程序比較簡單,有圖3.9 水位檢測模塊電氣原理圖所示,僅需讀取P3口,在屏蔽低四位就可判斷水位信息。水位檢測模塊的原理是:讀取水位檢測接口,然后進行查表,再根據預設的關鍵水位信息操作繼電器驅動電路。部分程序如下:
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  按鍵模塊軟件設計

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;//零時變量
              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;//計次移動
              charaddnum[7];            

              unsigned char set,add,sub,hea,wat,mov,sav;
              //設置,加鍵,減鍵,加熱,上水,移動,保存
              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);//獲取時間
                            timezstr1(&datetime,timestring);
                            if(mov==0)
                            {

                                          pagcount++;
                                          if(pagcount>8)//要設置的項目共有7個最后一次復使
                                          {
                                                        pagcount=1;
                                          }
                                          switch(pagcount)
                                          {
                                                        case 1:
                                                        {
                                                                      dssettime1(dssecond,0x80);//stop ds1302 CH置高
                                                                      lcdwrite1(command,0x80+6);//設置年閃爍
                                                                      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);//顯示修改結果
                                                                                    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);//顯示修改結果
                                                                                    dssettime1(dsyear,numtobcd(yearnum[0],1));//寫入年

                                                                      }

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


第五章  控制系統調試與仿真

0.028.jpg
5.1  總體仿真結果展示

圖5.1  總體仿真效果圖

5.2  自動加熱仿真

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

0.029.jpg

圖5.2  加熱模塊原理圖

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

0.030.jpg

圖5.3開啟加熱仿真結果

水溫高于55°C關閉加熱:

0.031.jpg

圖5.4  關閉加熱仿真結果

0.032.jpg

圖5.5  溫度傳感器狀態

綜上顯示,模塊正常工作


5.3  水位檢測及上水仿真

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

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

當水位低于10%,上水驅動電路動作,繼電器打開電磁閥上水;水位到達高水位繼電器關閉電磁閥,停止上水。

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


第六章  總結與展望

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

通過大量閱覽參考資料和歷經半年的不斷調試,控制系統終于達到了設計要求。本設計進行電路硬件設計、軟件設計,通過了仿真調試。由于工作量較大,本系統的設計還有一些不足:

  • 溫度測量反映速度較慢,有待進一步優化軟件設計。
  • 按鍵的中斷方式未完成調試,功能是通過查詢方式實現的,效率較低。
  • 控制器與太陽能熱水器結合的優化設計沒有作進一步闡述。

部分源碼如下:


  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);         //獲取時間
  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--)                        //循環顯示時間
  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--)                        //循環顯示時間
  37.         {
  38.         converttemp();
  39.         lcdoutput(5,0,tempstr);
  40. depthprocess();
  41.         delay_ms(300);
  42.     }
  43. }


  44. /************主函數***************/
  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)         //自動加熱
  55.                          {
  56.                                  heater=0;
  57.                          }
  58.                          else if(integer>55)
  59.                          {
  60.                                  heater=1;
  61.                          }
  62.                   //關鍵顯示部分
  63.                 updatatime();
  64.                 updatatemp();
  65.                         
  66.                         
  67.                                                                         
  68.         }         
  69.          
  70. }
復制代碼
51hei.png
本人初學,僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬
顯示部分已經調試好了,目前按鍵部分還沒有加入,大家有時間可以自行補充完善:
仿真程序.7z (929.87 KB, 下載次數: 942)

評分

參與人數 2黑幣 +10 收起 理由
光陰程序 + 5 回帖助人的獎勵!
浪子knight + 5 贊一個!

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

鍵盤功能誰能補上去啊
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:510728 發表于 2019-5-13 19:36 | 顯示全部樓層
內容很詳細 步驟很清晰 點贊
回復

使用道具 舉報

ID:510728 發表于 2019-5-23 21:17 | 顯示全部樓層
內容很詳細 贊一個
回復

使用道具 舉報

ID:630336 發表于 2019-11-1 13:18 來自手機 | 顯示全部樓層
樓主,鍵程序誰弄好了啊,能發給大家學習一下嗎?感謝
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

你找到了嗎
回復

使用道具 舉報

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

HEX文件有碼
回復

使用道具 舉報

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

使用道具 舉報

ID:987436 發表于 2021-12-4 17:12 來自手機 | 顯示全部樓層
仿真不對,液晶屏不亮
回復

使用道具 舉報

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

重新下載,hex文件在objects目錄里面,Keil工程已經重建了 原來那個工程缺文件,還有其他問題 大家一起研究改進
回復

使用道具 舉報

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

按鍵處理程序如何加上去?
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区在线观看视频 | 请别相信他免费喜剧电影在线观看 | 婷婷久久久久 | 欧美爱爱视频网站 | а√中文在线8 | 国产亚洲欧美日韩精品一区二区三区 | 免费一区二区 | 久久精品网 | 国产精品电影在线观看 | 久久国产一区二区 | 鲁一鲁资源影视 | 中文区中文字幕免费看 | 中文字幕亚洲在线 | 涩涩导航 | 成人欧美一区二区三区黑人孕妇 | 日韩美香港a一级毛片免费 国产综合av | caoporn视频在线 | 日韩中文一区 | 凹凸日日摸日日碰夜夜 | 国产精品国产三级国产aⅴ无密码 | 午夜免费网 | 日韩欧美三级电影在线观看 | 国产一区二区在线免费观看 | 特黄一级| 国产精品久久久久久亚洲调教 | 日韩1区| 91精品久久久久久久久99蜜臂 | 激情一区二区三区 | 精品欧美乱码久久久久久1区2区 | 免费一级片 | 97国产精品视频人人做人人爱 | 亚洲a在线观看 | 亚洲香蕉 | 国产成人自拍一区 | 91精品中文字幕一区二区三区 | 久久国产美女视频 | 国产xxxx搡xxxxx搡麻豆 | 中文字幕 欧美 日韩 | 久久91精品国产一区二区三区 | 日本二区在线观看 | 亚洲精品电影在线观看 |