基于单片机的温湿度检测控制系统设计(新)

更新时间:2024-05-03 10:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业论文(设计)

设计(论文)题目:

基于单片机的温湿度监测控制系统设计

一、设计(论文)内容及要求: (一)设计(论文)内容

本系统所要完成的任务是:

1. 熟悉掌握AT89C51单片机的结构和特点

2. 熟练掌握温湿度传感器SHT11的主要特性及测温原理 3. 熟练掌握用LCD1602液晶显示屏的工作原理 4.系统各个功能模块硬件电路的设计; 5.系统软件设计; 6.系统调试,实现系统功能

7.能够实时、准确的显示采样温度值与湿度值。

8.通过采集温度及湿度值,准确的判断标准值与当前值之间的差异,及时的启动报警装置(包括警报灯的提示功能以及提示音等)进行报警,并采取相应的控制方案。) (二)要求

设计一个基于单片机的温湿度自动控制系统,具体要求如下: 1. 具有温湿度采集功能; 2. 对数据实时处理并能够显示;

3. 当温度或适度高于(低于)设定值时能够自动调节;

4. 超限报警电路,当环境温度或湿度高于(低于)极限值时,系统能够发出声光报警,

提示工作人员进行相应的应急处理;

5. 自动断电功能,当环境温度或湿度高于(低于)极限值时,系统能够自动切断电源; 6. 当检测电路电压低即供电不足时,电路发出报警,提示工作人员对检测电路电源进

行更换;

7.基本要求度参数的实时采集,测量空间的温度和湿度,由单片机对采集的温湿度值进行循环检测、数据处理、显示,实现温湿度的智能检测;

8. 实现超越数据的及时报警,并启动控制系统,实现温室的目的; 9. 现场检测设备应具有较高的灵敏度、可靠性、抗干扰能力; 要求达到的技术指标:

测温范围: 0。C -60。C 测温精度:+0.5。C 测湿范围:0-100%RH 测湿精度:+2.5%RH

10.要求单片机系统应具有可靠性高、操作维护方便、性价比高等特点 。

二、主要参考资料:

[1]林国汉.基于单片机的温度控制系统设计[J].微计算机信息,2009(25): 21~24 [2]易顺明.基于单片机的大棚温湿度控制系统设计[J].现代电子技术,2011 (7):7~15 [3]张毅刚.单片机原理及应用[M].北京:高等教育出版社2008.12~106 [4] Atmel. Atmel 89C51 Microcontrollers Hardware Manual,2010. 35~98 [5]陈桂友,柴远斌.单片机应用技术[M].北京:机械工业出版社,2008.10~88 [6]熊诗波.机械工程测试技术基础[M].4版.北京:机械工业出版社,2008. 60~102 [7]张新荣.基于单片机的多路温度监测系统设计[J].工业控制计算机,2010(7):13~21

目 录

摘 要 ........................................................................ 1 1 引言 ........................................................................ 1 1.1本系统主要研究内容 ......................................................... 1 2 系统总体设计 ................................................................ 2 2.1系统功能设计 ............................................................... 2 2.2系统设计原则 ............................................................... 2 2.3系统的组成和工作原理 ....................................................... 3 3 系统硬件设计 ................................................................ 5 3.1单片机系统设计 ............................................................. 5 3.2传感器的设计 ............................................................... 8 3.3 液晶显示装置设计 .......................................................... 11 3.4 光声报警系统与温湿度控制系统设计 .......................................... 14 4 软件系统设计 ............................................................... 14 4.1初始化模块 ................................................................ 15 4.2温湿度检测模块 ............................................................ 15 4.3 温湿度判断控制模块 ........................................................ 15 4.4 1602液晶显示模块 ......................................................... 16 4.5报警模块 .................................................................. 17 4.6 系统整体软件程序 .......................................................... 16 总 结 ........................................................................ 22 谢 辞 ........................................................................ 23

基于单片机的温湿度检测控制系统设计

摘要

随着大棚技术的普及,温室大棚数量不断增多,对于蔬菜大棚来说,最重要的一个管理因素是温湿度控制。温湿度太低,蔬菜就会被冻死或则停止生长,所以要将温湿度始终控制在适合蔬菜生长的范围内。传统的温度控制是在温室大棚内部悬挂温度计,工人依据读取的温度值来调节大棚内的温度。如果仅靠人工控制既耗人力,又容易发生差错。现在,随着农业产业规模的提高,对于数量较多的大棚,传统的温度控制措施就显现出很大的局性。为此,在现代化的蔬菜大棚管理中通常有温湿度自动控制系统,以控制蔬菜大棚温湿度适应生产需要。

本文利用89C51单片机设计一个温室大棚的温湿度检测控制系统,对湿室内的温湿度进行检测控制并实时显示。其中温湿度传感器采用AM2301数字温湿度传感器,通过89C51单片机的处理把温湿度值显示在1602液晶上。并实时判断温湿度值是否满足设定的温湿度范围,若超出设定范围,通过89C51启动温湿度控制系统,达到恒温恒湿的目的。

关键词 89C51单片机 AM2301传感器 1602液晶 控制系统

1

3.1.1 AT89C51单片机

MCS-51系列单片机主要包括基本型产品8031/8051/8751(对应的低功耗型80C31/80C51/87C51和增强型产品8032/8052/8752。虽然他们是8位的单片机,但是具有品种全、兼容性强性能价格比高等特点且软硬件应用设计资料丰富齐全,已为我国广大工程技术人员所熟悉和掌握。在20世纪80年代和90年代,MCS-51系列单片机是在我国应用最为广泛的单片机机型之一。

中央微处理器 AT89C51: AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

此外,AT89C51设计和配置了振荡频率,并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式。AT89S51单片机综合了微型处理器的基本功能。按照实际需要,同时也考虑到设计成本与整个系统的精巧性,所以在本系统中就选用价格较低、工作稳定的AT89C51单片机作为整个系统的控制器[3]。

图3 AT89C51单片机实物图

7

数据存储器RAMXTALP0P2程序存储器4KBFlash ROM特殊功能寄存器(SFR)XTALCPU运算器控制器看门狗定时器P1串行口定时器/计数器16位两个P3中断系统 图4 AT89C51 单片机的片内硬件组成结构

3.1.2 AT89C51引脚简单介绍

总线型 非总线型

P1.0 P1.1 P1.2 P1.3P1.4P1.5P1.6P1.7RST/VPDP3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1

P3.6/WRP3.7/RDXTAL2XTAL1VSS1 2 3 4 5 6 7 8 9 1011121314151617181920 I 40393837363534333231302928 27 26 25 24 23 22 21 VCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA/VPPALE/PROGPSENP2.7P2.6P2.5P2.4P2.3P2.2图5 89C51的引脚封装 P2.1P2.080C51/89C51RST P3.0/RXDP3.1/TXD XTAL2XTAL1P3.2/INT0P3.3/INT1 P3.4/T0P3.5/T1GND1 2 3 4 5 6 7 8 9 10201918 17 16 15 14 13 12 11 VCCP1.7P1.6P1.5P1.4P1.3P1.2P1.1/AIN1P1.0/AIN0P3.7注:类似的还有Philips公司的 87LPC64,20引脚 8XC748/750/(751),24引脚 8X749(752),28引脚 8XC754,28引脚 等等40个引脚按其功能可分为如下3类:

电源及时钟引脚——VCC、VSS;XTAL1、XTAL2。 控制引脚——PSEN、ALE/PROG、EA/VPP、RST。

I/O口引脚——P0、P1、P2、P3,为4个8位I/O口的外部引脚[4]。 3.1.3 时钟电路

AT89C51单片机各功能部件的运行都以时钟信号为准,有条不紊、一拍一拍地工作。因此时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。AT89C51单片机内部有一个用于构成震荡的高增益反相放大器,它的输入端为芯片引脚

89C20518

XTAL1,输出端为XTAL2。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自己振荡器。外部时钟方式时外部时钟电源直接接到XTAL1端,XTAL2端悬空。

图6时钟电路

3.1.4 复位电路

复位是单片机的初始化操作,只需给AT89C51的复位引脚RST加上大雨2个机器周期(即24个时钟震荡周期)的高电平就可使AT89C51复位。复位电路通常采用上自动复位和按钮复位两种方式。上电复位是通过外部复位电路给电容C充电加至RST引脚一个短的高电平信号,次信号随着VCC对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C的充电时间。因此为保证系统能可靠地复位,EST引脚上的高电平必须维持足够长的时间。按键手动复位有电平和脉冲两种形式[5]。

图7复位电路

3.2传感器的设计

3.2.1传感器的基本特性

传感器的静态特性是指对静态的输入信号,传感器的输出量与输入量之间所具有相互关系。不含时间变量的代数方程,或以输入量作横坐标,把与其对应的输出量作纵坐标而

9

画出的特性曲线来描述。表征传感器静态特性的主要参数有:线性度、灵敏度、分辨力和迟滞等。

传感器的动态特性:

所谓动态特性,是指传感器在输入变化时,它的输出的特性。在实际工作中,传感器的动态特性常用它对某些标准输入信号的响应来表示。这是因为传感器对标准输入信号的响应容易用实验方法求得,并且它对标准输入信号的响应与它对任意输入信号的响应之间存在一定的关系,往往知道了前者就能推定后者。最常用的标准输入信号有阶跃信号和正弦信号两种,所以传感器的动态特性也常用阶跃响应和频率响应来表示[6]。 3.2.2 AM2301数字温湿度传感器

图8 数字温湿度传感器

(1)AM2301产品概述

AM2301数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个AM2301传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。 (2)产品亮点

10

超低能耗、传输距离远、全部自动化校准、采用电容式湿敏元件、完全互换、标准数字单总线输出、卓越的长期稳定性、采用高精度测温元件。 (3)单总线接口定义

图10 AM2301引脚

引脚说明(VDD SDA GND):

AM2301的供电电压范围为 3.5V - 5.5V,建议供电电压为 5V。数据线 SDA 引脚为三态结构,用于读/写传感器数据。详细见单总线的通信协议说明。 (4)接口说明

建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。

图10 AM2301典型接口电路

3.3 液晶显示装置设计

3.3.1液晶简介

1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔 每行之间也有也有间隔 起到了字符间距和行间距的作用,正因为如此 所以他不能显示图形(用自定义CGRAM,显示效果也不好)1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶[8]。

11

图11 1602实物图

1602LCD主要技术参数: 显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H)mm 图12 1602LCD引脚图 引脚功能说明: 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下: 第1脚:VSS为地电源。 12

第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 3.3.2液晶显示原理

读写操作时序如图13和图14所示:

图13 读操作时序

13

3.4.1光声报警系统

3.4 光声报警系统与温湿度控制系统设计

图14 写操作时序

本系统采用蜂鸣器作为声报警提示,当系统检测到的数据符合给定的要求时,现场没有蜂本系统采用红绿LED灯作为光报警提示,当系统检测到的数据符合给定的要求时,现场始终绿灯显示;当系统检测到的数据不符合给定的要求时,现场转化为红灯报警提示;鸣器报警提示;当系统检测到的数据不符合给定的要求时,现场蜂鸣器报警提示[9]。如图 15 14

4 软件系统设计

3.4.2温湿度控制系统

· 风扇:负责系统的降温工作。

· 排潮设备:负责系统的去湿工作。

· 喷雾设备:负责系统的加湿工作。

· 加热设备:负责系统的加热工作。

图16 温湿度控制系统电路

图15 光声报警系统电路图

报警模块,温湿度判断控制模块。系统软件总体流程图如图17

到的数据不符合给定的要求时,系统启动温湿度控制系统实现恒温恒湿的目的。

本系统温湿度控制系统主要组成有:风扇、加热器 、喷雾器、除潮器。当系统检测

本系统软件系统设计包过:系统初始化模块,温湿度检测模块,1602LCD显示模块,

15

开始初始化温湿度检测单片机处理LCD显示范围判断YESNO光声报警温湿度控制终止 图17 系统流程图

4.1初始化模块

系统初始化模块的主要功能是完成系统的初始化以及设定系统的工作状态,初始化部分包括以下方面的内容:

4.1.1 单片机初始化以及各种引脚定义。 4.1.2 1602液晶初始化及工作方式。 4.1.3 系统进入正常工作状态。

4.2温湿度检测模块

温湿度检测模块是本系统中的核心模块之一,它负责完成温度和湿度的测量及模拟量转换为数字量的全过程,这也是它为什么重要的原因。数字式温湿度传感器AM2301直接把检测到的模拟量转化为数字量送给单片机,在经过单片机的处理,把温湿度值显示在1602液晶上。温湿度传感器的精确度值直接影响到整个系统的检测与控制,所以本系统采用数字式温湿度传感器AM2301采集温室内的温湿度[10]。

4.3 温湿度判断控制模块

温湿度判断控制模块也是系统的核心模块之一,所谓判断控制模块,就是对当前温室内的实际温湿度与给定的温湿度范围进行比较,先进行判断,然后再进行控制,控制模块是决定系统将要进行什么工作的。如温度高于上限时需要降温,低于下限时需要升温,如湿度高于上限时需要降湿,低于下限时需要増湿,同时还要启动警报等等。

16

温湿度判断控制部分的程序整体思路如图18

实际值与给定值比较调用控制声光报警是否在给定范围内返回 图18 温湿度判断控制程序整体思路

4.4 1602液晶显示模块

本系统采用1602液晶显示温湿度值,当系统刚开始上电时1602液晶不显示任何数据,等待AM2301的监测数据,双行显示在1602液晶上。第一行显示:Temperature:--。C,第二行显示:Humidity: --%

4.5报警模块

报警模块具备两项功能,即为报警灯和声音报警。报警灯模块是完成LED有规律的转换,以便从视觉上提醒用户。LED是由单片机控制2个双色LED灯组成的,其转换规律为:

1 系统温湿度值在给定的范围时,绿色LED亮。 2 系统温湿度值超出给定的范围时,红色LED亮。

在LED灯转换的同时,声音报警也会同时启动,可采用延时的方式来延长声音报警的声音。

警报灯由2个双色的LED灯组成,一共需要2根数据线,使用单片机控制。要实现的功能是使2个双色LED灯有规律的转换,当系统上电后,系统进行实时的采样,并判断出当前温湿度与给定温湿度之间的差异,如果当前温湿度低于用户给定的下限温湿度值,则说明当前温湿度过低,系统自动启动红色警报灯,同时开始加温増湿,直至加到所需温湿度值时警报灯熄灭。反之,如果当前温湿度高于用户设定的上限温湿度值,则说明当前温湿度过高,系统也会自动启动警报灯,同时开始降温减湿,直至降到所需温湿度值时警报

17

灯熄灭。

4.6 系统整体软件程序

本系统采用C语言编程,使用单片机编程软件:Keil软件[11]。

#include

#define uchar unsigned char #define uint unsigned int

uint hum,temp; //定义湿度、温度(全局)

uchar hum_h,hum_l,temp_h,temp_l,check; //湿度高、低8位,温度高、低8位,校验位 uchar num,num1, bai,shi,ge,bai1,shi1,ge1,cnt=0; // sbit dht=P1^0; sbit fine=P1^1; sbit hot=P1^2; sbit pwq=P1^3; sbit ccq=P1^4; sbit beef=P2^7; sbit redled=P2^6; sbit greedled=P2^5; sbit lcden=P3^4; sbit lcdrs=P3^5;

uchar code table[]=%uchar code table1[]=\void write_com(uchar com); void write_data(uchar date); void delay_us(uint i); void delay(uint z); void dht_init(); void interrupt_init(); void lcd_int(); uchar read_byte(); void read_hum_temp(); void zhuanhuan(); void warm_control(); void main()//主函数 { interrupt_init(); lcd_int(); delay(200); while(1) { read_hum_temp();

zhuanhuan();

18

warm_control();

delay(3000); //此处的时间不能小于3000,否则读不出! //

hum_h=hum_l=temp_h=temp_l=check=temp=hum=0;

}

}

/*--------------------延时(10us级)------------------*/ void delay_us(uint i) {

while(i--);

}

/*--------------------延时(ms级)------------------*/ void delay(uint z) { uint i,j; for(i=z;i>0;i--)

for(j=110;j>0;j--);

}

/*--------------温湿度初始化(准备传送数据)----------*/ void dht_init() {

// delay(1000); //延时一会,避开不稳定区域 dht=0; //拉低延时500微秒,发送开始信号 delay_us(50);

dht=1; //释放总线,延时30微秒 delay_us(4);

while(!dht); //拉低等待

while(dht); //拉高等待,即将传送数据 }

uchar read_byte() { uchar n,byte=0,dat; for(n=0;n<8;n++) {

while(!dht); delay_us(4); //理论上28us<延时<70us,此处写2--6都可以 dat=0;

if(dht) dat=1; while(dht);

byte=(byte<<=1)|dat; //0

}

return byte;

19

}

/*----------------------读40位数据---------------------*/ void read_hum_temp()

{ dht_init();

hum_h=read_byte(); //读湿度 hum_l=read_byte();

temp_h=read_byte(); //读温度 temp_l=read_byte(); check=read_byte(); //读校验 while(!dht); //等待低电平结束 dht=1;

//最后拉高总线

}

void zhuanhuan() //提取各位数字

{ uchar a;

a=hum_h+hum_l+temp_h+temp_l; if(a==check) {

//

P1=temp_l; hum=temp=0;

hum=((hum|hum_h)<<8)|hum_l; temp=((temp|temp_h)<<8)|temp_l; bai=temp/100;

shi=temp0/10; ge=temp; bai1=hum/100; shi1=hum0/10; ge1=hum; }

else bai=shi=ge=bai1=shi1=ge1=0;

}

/*----------------------中断初始化---------------------*/ void interrupt_init() { TMOD=0X01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%6; EA=1; ET0=1;

TR0=1;

20

}

/*----------------------中断处理液晶显示函数---------------------*/ void timer0() interrupt 1 { TH0=(65536-10000)/256; TL0=(65536-10000)%6; if(cnt==2) {

for(num=0;num<13;num++) { write_data(table[num]); delay(20);

}

write_data(bai); write_data(shi); write_data(ge); write_data('C'); write_com(0x80+0x40); for(num1=0;num1<10;num1++) { write_data(table1[num1]); delay(20);

}

write_data(bai1); write_data(shi1); write_data(ge1);

write_data('%');

cnt=0;

}cnt++;

}

/*--------------------液晶控制------------------*/ void lcd_int()//lcd初始化 { lcden=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x80); }

void write_com(uchar com) // lcd写指令 {

lcdrs=0; 21

P0=com; delay(5); lcden=1; delay(5); lcden=0;

}

void write_data(uchar date) // lcd写数据 { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0;

}

/*--------------------控制报警------------------*/ void warm_control()//判断控制报警 { if((temp<10||temp>30)||(hum<20||hum>60) )//判断温湿度值是否符合要求 {

redled=0; greedled=1; beef=0; //声光报警

delay(2000); beef=1;

} else { greedled=0; redled=1; }

if(temp<10) hot=0; //加热器加热

if(temp>30) fine=0; //风扇降温 if(hum<20) pwq=0; //喷雾器增湿 if(hum>60) ccq=0;

//除潮器除潮 }

22

总 结:

虽然这个设计做的比较简单,但能完成给定的设计内容。很多东西考虑的不是很细,也有一些特别情况没有做,但是用了很多精力用来完成这个论文,鉴于个人水平和时间的关系,所以并没有把自己当初设想的所有情况都考虑进去。这两个月的毕业论文让我学会的很多,觉得自己学的太少还有很多需要认真学习,学无止境,所以要更努力。

23

谢辞

历时将近两个月的时间终于将这篇论文写完,在论文的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。尤其要强烈感谢我的论文指导老师—吉武庆老师,他对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。学生在此向帮助和指导过我的各位老师表示最中心的感谢!感谢这篇论文所涉及到的各位学者。本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。感谢我的同学和朋友,在我写论文的过程中给予我了很多你问素材,还在论文的撰写和排版灯过程中提供热情的帮助。由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!在此再次向你们表示感谢。

24

本文来源:https://www.bwwdw.com/article/tljg.html

Top