基于单片机89C52的温湿度调节系统.docx
- 文档编号:30405887
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:40
- 大小:188.59KB
基于单片机89C52的温湿度调节系统.docx
《基于单片机89C52的温湿度调节系统.docx》由会员分享,可在线阅读,更多相关《基于单片机89C52的温湿度调节系统.docx(40页珍藏版)》请在冰豆网上搜索。
基于单片机89C52的温湿度调节系统
摘要
随着人们的生活及其生产水平的不断提高,对生活环境和生产环境的要求就显的尤为重要,温湿度的控制就是一个典型的例子,因此温湿度检测系统就是现代生产生活中应运而生的一种智能、快捷、方便可靠的检测系统,特别是在工业生产中如果检测得不准确就会发生许多的生产事故。
要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计是以单片机为核心,配合温湿度传感器,以及相关的外围电路组成的检测系统,可以接收所测环境的温度和湿度信号,检测人员可以通过LCD显示的数据,实时监控环境的温度和湿度情况。
所有的测量操作都可以通过主机控制软件来实现,温度和湿度传感器得到的测量信号,经电路转换为电信号,然后通过转换送到单片机进行数据处理,经软件分析处理后送显示装置。
本系统包括系统硬件和软件设计,可靠性高,结构简单,实现了对温湿度的自动调节。
系统还应用RS232与上位机相连接,可以设置自动记录温度、湿度的相关的参数,也可以设置每隔一定的时间自动记录,可用在气象的观察方面。
关键词:
STC89C52单片机,温湿度传感器,LCD显示
一、概述
1.1课题的研究背景
工业生产中有些场合需要使用精密的机台设备,这些设备的精密度高、价格高,因此为了保证产品的质量及机台的使用寿命,对其环境的要求也很高,尤其的是对温度、湿度的控制。
例如在我工作的生产发光二极管LED的工业现场,前面的两道工序固晶片和焊线要求的精度非常高,晶片必须固到碗杯的中心点,偏差不可超过1/5晶片的宽度,且对胶量的控制也有严格的要求,只有这道工序做好了,下一个工序焊线才会顺利,否则焊线将会出现很多异常,不仅会降低产量也会造成质量问题,因此要求每三个小时记录一次室内的温湿度,且要保证其温度在18℃--23℃之间,湿度不可超过60%。
随着信息产业的发展及工业化的进步,温度和湿度不仅仅表现在以上几个方面直接或间接影响着人类基本生活条件,还表现在对工生物制品、医药卫生、科学研究、国防建设等方面的影响。
针对以上情况,研制可靠且实用的温湿度控制器显得非常重要。
常用温湿度传感器的非线性输出及一致性较差,使温湿度的测量方法和手段相对较复杂,且给电路的调试带来很大的困难。
传统的温湿度测量多采用模拟小信号传感器,不仅信号调理电路复杂,且温湿度值的标定过程也极其复杂,并需要使用昂贵的标定仪器设备。
因此对于温湿度控制器的设计有着很大的现实生产意义。
本文设计的是基于单片机STC89C52的温湿度检测和控制系统,主要以广泛应用的DHT11作为温度和湿度的检测,该仪器具有测量精度较高、硬件电路简单、并能很好的进行显示,可测试不同环境温湿度的特点。
另外和控制电路相连,可以进行加湿电路和除湿电路的控制,使温度和湿度参数在预先设定的范围内,不需要人的直接参与。
本系统还通过RS232和上位机相连,可以设置每隔一定的时间进行温度和湿度的采集,上传到上位机,以供查询。
1.2本课程设计的主要内容
单片机是系统的控制核心,所以单片机的性能关系到整个系统的好坏。
因此单片机的选择,对所设计系统的实现以及功能的扩展有着很大的影响。
单片机种类很多,在众多51系列单片机中,较为常用的是ATMEL公司的AT89C51和AT89S52单片机,AT89C51片内4KROM是Flash工艺的,使用专用的编程器自己就可以随时对单片机进行电擦除和改写,片内有128字节的RAM。
而AT89S52含有在系统可编程的Flash存储器,片内有8K闪存,RAM的容量也较AT89C51大,为256字节。
显然这种单片机优点更多,开发时间也大为缩短。
在本次设计中选用了STC89C52单片机。
键盘接口电路较为简单,而显示部分有两种方案供选择:
一种为LCD,一种为LED。
LCD液晶显示的像素单元是整合在同一块液晶版当中分隔出来的小方格。
通过数码控制这些极小的方格进行显像。
显示非常细腻但是造价很高。
而LED数码显示中每一个像素单元就是一个发光二极管,如果是单色,一般是红色发光二极管。
如果是彩色,一般是三个三原色小二极管组成的一个大二极管。
这些二极管组成的矩阵由数码控制实时显示文字或图象,造价相对低廉,显示效果也较好。
本设计中,最终选用的集成温度传感器DHT11,采集到的温湿度信号送至单片机,实现温湿度的显示与控制。
系统主要由以上元器件组成,通过硬件电路和软件程序的设计,实现系统的基本功能。
二、系统总体方案设计
本设计是基于单片机对数字信号的高敏感和可控性、温湿度传感器可以产生模拟信号,和A/D模拟数字转换芯片的性能,此设计以STC89C52基本系统为核心的一套检测系统,其中包括单片机、复位电路、温湿度检测、键盘及显示、系统软件等部分的设计。
系统总体方框图如图2.1。
系统重点及组成:
温湿度的检测
温湿度的显示
单片机与PC机间的通信
通过开关量控制实现温湿度上下限调节
图2系统总体框图
2.1温湿度传感器
DHT11产品概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为4针单排引脚封装。
连接方便,特殊封装形式可根据用户需求而提供。
2.2RS232接口
RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。
它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。
该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。
随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9。
2.3单片机STC89C52
STC89C52是一种低功耗、高性能CMOS八位微控制器,具有8K在系统可编程Flash存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许ROM在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使其为众多嵌入式控制应用系统提供灵活的解决方案。
2.4LCD1602
工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
引脚
符号
功能说明
1
VSS
一般接地
2
VDD
接电源(+5V)
3
V0
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4
RS
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5
R/W
R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
低4位三态、双向数据总线0位(最低位)
8
DB1
低4位三态、双向数据总线1位
9
DB2
低4位三态、双向数据总线2位
10
DB3
低4位三态、双向数据总线3位
11
DB4
高4位三态、双向数据总线4位
12
DB5
高4位三态、双向数据总线5位
13
DB6
高4位三态、双向数据总线6位
14
DB7
高4位三态、双向数据总线7位(最高位)(也是busyflag)
15
BLA
背光电源正极
16
BLK
背光电源负极
三、系统的硬件设计和连接
3.1主控模块
采用STC89C52单片机作为系统的控制器。
Pl口控制数码管显示温度和湿度值。
P2口与DHT11连接.实现湿度模拟电压量转换为数字量便于单片机处理。
键盘控制采用PO口.其中PO.O是温度的设置,PO.1是湿度的设置,PO.2/PO.3是分别对温度与湿度的上/下限值进行设置。
3.2显示模块
3.3温度和湿度采集模块
1.通讯过程如图1所示
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。
DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。
3.5与上位机相连电路的设计
通过和MAX232和上位机相连接,如图3-9所示。
在大气气候的检测中需要做记录时,可以通过设置单片机的参数,每隔一定的时间进行自动的做记录,省去人工的记录麻烦。
Max232的T1IN和单片机的P3.2相连,R1OUT和单片机的P3.1相连。
图3.5单片机系统与上位机的连接
四、系统软件方案的设计
温度控制主程序的设计应考虑以下问题:
(1)温湿度采样,数字滤波;
(2)越限报警和处理;(3)温度标度转换;(4)温湿度显示。
通常,符合上述功能的温度控制程序由主程序和T0中断服务程序两部分组成。
在该软件系统中,定时器T0为工作方式1,定时周期为125ms,8次定时器中断为1S,由于实际环境温度和湿度变化是连续和平缓的,故这里采用分段定值平缓滤波算法处理每次测得的温度和湿度值,有效防止了突发干扰使测得值波动很大,导致反馈系统关启工作,影响系统的稳定,提高了系统的抗干扰性。
4.1程序流程图
LCD1602头文件
#ifndef__LCD_1602_CLIMBERWIN__
#define__LCD_1602_CLIMBERWIN__
#defineucharunsignedchar
#defineuintunsignedint
#include
#include"lcd1602define.h"
/******PortDefinitions*****/
#defineLCD_DataP0//LCD的数据口
sbitLCD_BF=LCD_Data^7;//LCD忙信号位
sbitLCD_RS=P2^7;
sbitLCD_RW=P2^6;
sbitLCD_EN=P2^5;
unsignedchardis_buf[3];//数值显示缓冲区
unsignedchartable[11]="0123456789";//字码
/*定义子程序*/
voidLCD_ClrAll(void);//清屏
voidJudge_LCD_busy(void);//检测是否忙碌
voidLCD_Write(ucharWriteData);//写控制字
voidLCD_write_data(ucharLCD_data);//写数据显示
voidLCD_cursor(ucharx);//光标起始地址
voidLCD_printc(unsignedcharlcd_data);//输出一个字符
voidLCD_prints(unsignedchar*lcd_string);//输出字符串
voiddelay_ms(unsignedchari);//1ms延时
//************************************************************************
/*LCD1602忙碌判断子程序*/
voidJudge_LCD_busy(void)//判断LCD1602是否忙状态
{
while
(1)
{
LCD_EN=0;
LCD_RS=0;
LCD_RW=1;
LCD_Data=0xff;
LCD_EN=1;//EN是1—0使能
if(!
LCD_BF)break;//LCD_BF=1表示忙碌,需要等待。
}
LCD_EN=0;
}
/******LCD清屏***************/
voidLCD_ClrAll(void)
{
Judge_LCD_busy();//判断是否忙碌
LCD_RS=0;
LCD_RW=0;
LCD_Data=0x01;
LCD_EN=1;
LCD_EN=0;
}
/*******LCD写数据定义各种模式*********/
voidLCD_Write(ucharWriteData)//写指令到LCD
{
Judge_LCD_busy();
LCD_RS=0;
LCD_RW=0;
LCD_Data=WriteData;//把WriteData的数据送到数据口
LCD_EN=1;
LCD_EN=0;
}
/********LCD显示数据***********/
voidLCD_write_data(ucharLCD_data)//输出一个字节数据到LCD
{
Judge_LCD_busy();
LCD_RS=1;
LCD_RW=0;
LCD_Data=LCD_data;
LCD_EN=1;
LCD_EN=0;
}
/****光标位置的确定***/
voidLCD_cursor(ucharx)//LCD光标定位到x处
{
LCD_Write(0x80+x);//第一行地址是0x80
}
/*输出一个字符*/
voidLCD_printc(unsignedcharlcd_data)
{
LCD_write_data(lcd_data);
}
/*输出字符串*/
voidLCD_prints(unsignedchar*lcd_string)
{
unsignedchari=0;
while(lcd_string[i]!
=0x00)
{
LCD_write_data(lcd_string[i]);
i++;
}
}
/*显示整数*/
voidLCD_ints(unsignedcharnum)
{
signedchari=0;
for(i=0;i<3;i++)//拆分bcd
{
dis_buf[i]=num%10;;
num=num/10;
}
for(i=2;i>0;i--)//灭零
{
if(dis_buf[i]==0)dis_buf[i]=10;
elsebreak;
}
for(i=2;i>=0;i--)//逐个显示
{
LCD_write_data(table[dis_buf[i]]);
}
}
/*初始化程序*/
voidLCD_initial(void)//初始化LCD
{
LCD_Write(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
LCD_Write(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
LCD_Write(LCD_DISPLAY_DOUBLE_LINE);
LCD_ClrAll();
}
#endif
UART头文件
bitflag_uart=0;//字符串接受完成后标志位置位,须软件复位
unsignedcharS_LEN=4;
unsignedcharRes_buf[20]={0};
voidUart_init()
{
ES=1;//setES
SCON=0x52;//setSM1、RENandTI;
TMOD=0x20;//setM1,方式2;
TH1=0xf3;
TL1=0xf3;//baudrate2400b/s
TR1=1;//计数使能
}
voidUart_sc(unsignedcharbyte)//发送单字符
{
while(!
TI);
SBUF=byte;
TI=0;
}
voidUart_ss(unsignedchar*p,bitflag)//发送字符串
{
while(*p)
{
Uart_sc(*p++);
}
if(flag==1)
{
Uart_sc(0x0D);
Uart_sc(0x0A);//结尾发送回车换行
}
}
KEY头文件
unsignedcharcoderow_scan[4]={0xef,0xdf,0xbf,0x7f};
voiddelay_1ms(unsignedinti)//1ms延时
{
unsignedcharx,j;
for(j=0;j
for(x=0;x<=40;x++);
}
unsignedcharkey_scan()
{
unsignedchari,j;
unsignedchartemp,key_vaul;
for(i=0;i<4;i++)
{
P1=row_scan[i];
temp=0x01;
for(j=0;j<4;j++)
{
if(!
(P1&temp))
{
key_vaul=i*4+j+1;
while(!
(P1&temp));
returnkey_vaul;
}
temp<<=1;
}
}
}
bitkey_check()//检测有无键按下
{
bitkey_flag=0;//键标志。
有键按下时为1
P1=0x0f;
if(P1!
=0x0f)
{
delay_1ms
(1);
if(P1!
=0x0f)
{
key_flag=1;//有键按下
}
elsekey_flag=0;//为抖动
}
returnkey_flag;
}
DHT11头文件
#ifndef__DHT11_H__
#define__DHT11_H__
sbitDT0=P2^0;
sbitDT1=P2^1;
sbitBEEP=P2^3;
#defineOK1
#defineERROR0
#defineNUMBER20
#defineSIZE5
staticunsignedcharstatus;//存放五字节数据的数组
staticunsignedcharvalue_array_0[SIZE];
staticunsignedcharvalue_array_1[SIZE];
inthumi_value0,temp_value0,humi_value1,temp_value1;
voiddelay_ms(unsignedchari)//ms延时
{
unsignedcharx,j;
for(j=0;j
for(x=0;x<=140;x++);
}
voiddelay(unsignedcharx)//x*0.14MS
{
unsignedchari;
while(x--)
{
for(i=0;i<13;i++){}
}
}
voiddelay_1(unsignedcharx)//x*1.4MS
{
unsignedchari;
while(x--)
{
for(i=0;i<130;i++){}
}
}
voidbeep()
{
unsignedchari;
BEEP=0;
for(i=0;i<6;i++)
{
BEEP=!
BEEP;
delay_1(5000);
delay_1(5000);
}
}
voiddelay_10us()
{unsignedchari;
i--;i--;i--;i--;i--;i--;
}
voidNode_sensor_0(unsignedintTEP,unsignedintDAM,intflag_send)
{
unsignedchari,j,N=0;
unsignedcharbuf[5]={0};
unsignedchartem,teml=10,temh=40;
DT0=0;
delay_ms(30);
DT0=1;
delay_10us();
delay_10us();
delay_10us();
delay_10us();
DT0=1;
if(DT0==0)//是否响应信号
{
while(DT0==0);//跳过80usDHT响应信号
while(DT0==1);//跳过80usDHT拉高信号
//准备接受温湿度数据
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
N=0;
while(DT0==0);//bit数据头
while(DT0==1)
{
delay_10us();//适当延时
N++;
}
buf[i]<<=1;
if(N>3)buf[i]++;
}
}
DT0=1;
//接受完成,准备校验数据
tem=buf[0]+buf[1]+buf[2]+buf[3];
if(tem==buf[4])
{
//buf[2]=buf[2]-5;
LCD_cursor(0);
LCD_prints("");
LCD_cursor(0);
LCD_prints("N1");
LCD_prints("T:
");
LCD_cursor(0x04);
LCD_ints(buf[2]);
LCD_cursor(0x07);
LCD_write_data(0xDF);
LCD_write_data(0x43);
LCD_cursor(0x0A);
LCD_prints("HU:
%");
LCD_cursor(0x0C);
LCD_ints(buf[0]);
if(flag_send=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 89 C52 温湿度 调节 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)