基于51单片机的智能加湿控制器设计

引言

在当下经济不断发展,科学不断进步,人类不断进化的今时今日,人们对生活品质 的要求也随之发生变化。而空气质量对人们生活的影响越来越深,湿度作为影响空气质 量的重要指标之一,对人们的生活有重要的影响,如若不注意可能会引发皮肤病和免疫 力下降以及流失水分加速衰老等一系列问题。因此,有效的洁净加湿已经成为人们生活 当中重要的要求。选用单片机为核心设计一个简易的智能加湿控制器系统,是因为单片 机应用在检测、控制领域中,成本较低,可靠性较好、适应范围较广,且具有高精度的 检测及显示,更重要的是单片机可以构成各种各样的控制系统、数据采集系统。如此设 计出一个以单片机为核心的智能加湿控制器系统,以单片机作为系统的核心控制部分, 能构造出一个结构简单,功能完善的电路,设计出能满足人体健康舒适度的基本要求的 系统,具有较好的应用价值。 研究发现,虽然市面上的加湿器应用范围广泛,但大多数加湿器的工作状态都是依 靠人们手动调节的,有些还未能达到对空气中温湿度的精确检测,毕竟人力有限,不可 能做到面面俱到,所以加湿器在应用领域中难免出现意料之外的问题。既不能过度干燥, 也不能过度加湿,像一柄双刃剑,因为有一些生物体适应一定程度的湿度环境,一些木 质产品需要保证一定的干燥程度才不会腐烂,合理应用加湿器的功能它才能有所作为。 因此,智能控制加湿系统的出现就决定了加湿器未来可观的发展方向。 国内加湿器虽然研究得较晚,产品占比人均比不上国外,但在研发加湿器的种类和 技术上已经不落后于任何国外产品,在较为干燥的地域的人们非常欢迎加湿器的到来, 这也大大的激励国内产业对其的研究。 如今,伴随着国内外发展趋势,在一定程度的科学技术加持下,研究成功的加湿器 已经深入人们的生活当中,为人们的健康提供保障,设计智能加湿控制器系统为人类服 务也是顺应趋势。加湿器本就是国内外发展前景较好的一个产品,提升空间很大,适用 范围很广,古往今来给予人们的帮助不在少数。持续研究之后,加湿器必定会成为改变 人类生活的一个重要的家用电器。

  1. 系统概述

1.1本课题的目的及研究意义

日常生活中,合适的相对湿度会使人感觉非常舒适,对于维护人体的健康、提高工作效率、提升生活质量,都有重要的影响。本毕设要求广泛查阅和收集资料,综合运用所学的模拟电子技术、数字逻辑电路、C语言、单片机原理及应用、传感器等专业知识,设计并制作一个智能加湿控制器系统,要求对室内湿度进行测量,并根据事先设定的湿度值控制加湿器工作,当室内湿度太大时给出警示。

课题的具体任务可概括为:要求用DXP或Protel设计硬件原理图和制板图;制作硬件电路板、编写相关程序进行调试;演示预期要求的功能;完成论文。

1.2 任务要求

课题要求设计并制作的智能加湿控制器系统,包括硬件电路的设计和软件的编写。要求达到的性能指标如下:

1、利用单片机和湿度传感器进行设计;

2、选取合适的液晶显示屏,对测得的室内湿度进行显示;

3、当湿度低于人体健康舒适度时,启动加湿器工作,当高于时,停止工作;

4、满足人体健康舒适度的湿度可以设置;

5、当室内湿度太大时给出警示。

1.3 主要研究内容

本课题的主要研究内容是按照要求设计电路,制作硬件电路板和编写软件程序,实现一个以单片机为控制核心的智能加湿器。课题完成的主要内容:

  1. 学习并掌握超声波测距原理;

  2. 熟悉掌握单片机、C语音、传感器等相关知识;

  3. 通过温湿度传感器进行距离测量并在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

image.png

image.png

image.png

image.png

 文章借鉴于此纷传

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值