引言
在当下经济不断发展,科学不断进步,人类不断进化的今时今日,人们对生活品质 的要求也随之发生变化。而空气质量对人们生活的影响越来越深,湿度作为影响空气质 量的重要指标之一,对人们的生活有重要的影响,如若不注意可能会引发皮肤病和免疫 力下降以及流失水分加速衰老等一系列问题。因此,有效的洁净加湿已经成为人们生活 当中重要的要求。选用单片机为核心设计一个简易的智能加湿控制器系统,是因为单片 机应用在检测、控制领域中,成本较低,可靠性较好、适应范围较广,且具有高精度的 检测及显示,更重要的是单片机可以构成各种各样的控制系统、数据采集系统。如此设 计出一个以单片机为核心的智能加湿控制器系统,以单片机作为系统的核心控制部分, 能构造出一个结构简单,功能完善的电路,设计出能满足人体健康舒适度的基本要求的 系统,具有较好的应用价值。 研究发现,虽然市面上的加湿器应用范围广泛,但大多数加湿器的工作状态都是依 靠人们手动调节的,有些还未能达到对空气中温湿度的精确检测,毕竟人力有限,不可 能做到面面俱到,所以加湿器在应用领域中难免出现意料之外的问题。既不能过度干燥, 也不能过度加湿,像一柄双刃剑,因为有一些生物体适应一定程度的湿度环境,一些木 质产品需要保证一定的干燥程度才不会腐烂,合理应用加湿器的功能它才能有所作为。 因此,智能控制加湿系统的出现就决定了加湿器未来可观的发展方向。 国内加湿器虽然研究得较晚,产品占比人均比不上国外,但在研发加湿器的种类和 技术上已经不落后于任何国外产品,在较为干燥的地域的人们非常欢迎加湿器的到来, 这也大大的激励国内产业对其的研究。 如今,伴随着国内外发展趋势,在一定程度的科学技术加持下,研究成功的加湿器 已经深入人们的生活当中,为人们的健康提供保障,设计智能加湿控制器系统为人类服 务也是顺应趋势。加湿器本就是国内外发展前景较好的一个产品,提升空间很大,适用 范围很广,古往今来给予人们的帮助不在少数。持续研究之后,加湿器必定会成为改变 人类生活的一个重要的家用电器。
-
系统概述
1.1本课题的目的及研究意义
日常生活中,合适的相对湿度会使人感觉非常舒适,对于维护人体的健康、提高工作效率、提升生活质量,都有重要的影响。本毕设要求广泛查阅和收集资料,综合运用所学的模拟电子技术、数字逻辑电路、C语言、单片机原理及应用、传感器等专业知识,设计并制作一个智能加湿控制器系统,要求对室内湿度进行测量,并根据事先设定的湿度值控制加湿器工作,当室内湿度太大时给出警示。
课题的具体任务可概括为:要求用DXP或Protel设计硬件原理图和制板图;制作硬件电路板、编写相关程序进行调试;演示预期要求的功能;完成论文。
1.2 任务要求
课题要求设计并制作的智能加湿控制器系统,包括硬件电路的设计和软件的编写。要求达到的性能指标如下:
1、利用单片机和湿度传感器进行设计;
2、选取合适的液晶显示屏,对测得的室内湿度进行显示;
3、当湿度低于人体健康舒适度时,启动加湿器工作,当高于时,停止工作;
4、满足人体健康舒适度的湿度可以设置;
5、当室内湿度太大时给出警示。
1.3 主要研究内容
本课题的主要研究内容是按照要求设计电路,制作硬件电路板和编写软件程序,实现一个以单片机为控制核心的智能加湿器。课题完成的主要内容:
-
学习并掌握超声波测距原理;
-
熟悉掌握单片机、C语音、传感器等相关知识;
-
通过温湿度传感器进行距离测量并在LCD显示屏上显示相关参数;
2 设计方案及元器件介绍
2.1 系统设计方案
2.1.1主控模块选择
方案(一):
选用80C51作为系统的主控芯片,80C51也是MCS-51系列一种单片机,有2个外部中断,2个定时器中断,两个16位定时计数器,四个8位并行输入口。51单片机如今也是我国目前使用得比较多的一款单片机,也是一种最基础的单片机。我们学习用的教材上也是选用51单片机作为讲解。尽管51单片机也在不停的提升其功能,但是在数字信号处理(DSP)能力方面比较弱,并且还需要进一步改善处理复杂数据的能力,同时51单片机集成化的程度也不高。
方案(二):
选用STC89C52作为系统的主控制芯片。STC89C52是一种低功耗、高性能的CMOS 8位微控制器。闪存有8KB和512字节的RAM。3个16位定时器/计数器和4个外部中断、32个通用I/O端口、存储空间极大,且存储速度快。STC89C52在以MCS-51为核心的基础上做了大量的改善后使得其具备了更加丰富的的功能。
针对两种主控芯片的比较,STC89C52涵盖了80C51的功能并且两者是相互兼容的,闪存和RAM都比后者要大,还多了一个定时器,也增加了中断源。80C51也早已停止生产,而STC89C52较为容易买到,为此选用了方案二,把STC89C52作为主要控制的芯片。
2.1.2系统总体设计
2.2 主要器件介绍
2.2.2LCD1602液晶显示
在考虑了多种显示器件之后,打算使用LCD1602进行系统功能信息的显示,价格比较实惠也容易买得到。可以显示两行信息,每行可显示16个字符,但不能很好的显示图形和汉字。系统设计所需要显示的内容能用英文字母和数字进行表示,能满足设计要求,因此使用LCD1602足矣。现在通常使用有16 x 1、16 x 2、20 x 2和40 x 2等模块。1602字符型液晶显示器实物如图2-4如下。
#include"lcd.h"
/*******************************************************************************
* 函 数 名 : Lcd1602_Delay1ms
* 函数功能 : 延时函数,延时1ms
* 输 入 : c
* 输 出 : 无
* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/
void Lcd1602_Delay1ms(uint c) //误差 0us
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
/*******************************************************************************
* 函 数 名 : LcdWriteCom
* 函数功能 : 向LCD写入一个字节的命令
* 输 入 : com
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
void LCD_Write_Com(uchar com) //写入命令
{
LCD1602_E = 0; //使能
LCD1602_RS = 0; //选择发送命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //放入命令
Lcd1602_Delay1ms(1); //等待数据稳定
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5); //保持时间
LCD1602_E = 0;
}
#else
void LCD_Write_Com(uchar com) //写入命令
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 0; //选择写入命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
// Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdWriteData
* 函数功能 : 向LCD写入一个字节的数据
* 输 入 : dat
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LCD_Write_Data(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //写入数据
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5); //保持时间
LCD1602_E = 0;
}
#else
void LCD_Write_Data(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择写入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdInit()
* 函数功能 : 初始化LCD屏
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdInit() //LCD初始化子程序
{
LCD_Write_Com(0x38); //开显示
LCD_Write_Com(0x0c); //开显示不显示光标
LCD_Write_Com(0x06); //写一个指针加1
LCD_Write_Com(0x01); //清屏
LCD_Write_Com(0x80); //设置数据指针起点
}
#else
void LcdInit() //LCD初始化子程序
{
LCD_Write_Com(0x32); //将8位总线转为4位总线
LCD_Write_Com(0x28); //在四位线下的初始化
LCD_Write_Com(0x0c); //开显示不显示光标
LCD_Write_Com(0x06); //写一个指针加1
LCD_Write_Com(0x01); //清屏
LCD_Write_Com(0x80); //设置数据指针起点
}
#endif
文章借鉴于此纷传