基于AT89C51单片机的智能浇花系统设计

目 录
摘 要 I
ABSTRACT I
1 绪论 1
1.1 课题背景和意义 1
1.1.1选题背景 1
1.1.2研究意义 1
1.2 国内外发展现状及趋势 2
1.3研究主要内容 3
2 总体设计方案 5
2.1 浇灌系统设计的需求 5
2.2 总体设计方案选定 5
3 系统硬件设计 6
3.1 LCD1602显示接口线路 6
3.2 ADC0832简介 6
3.3 湿度传感器介绍 7
3.4 报警器模块 7
3.5 按键模块 8
4 软件设计 9
4.1 主程序模块 9
4.2 湿度传感器模块 9
4.3 显示模块 10
4.4 报警器模块 11
5 系统测试 13
5.1 硬件调试 13
5.2 硬件测试问题 13
5.3 软件调试 13
5.4 系统的测试 14
6 结论 15
参考文献 16
致 谢 18
附 录 19
附件1 实物图 19
附件2 原理图 20
附件3 PCB图 21
附件4 源代码 22
1.硬件模块包括按键参数设置模块、温湿度采集模块、液晶显示模块、继电控制模块以及报警模块。单片机通过采集 DHT11 温湿度传感器信息,完成室内环境信息的采集与处理,同时土壤湿度传感器采集的信息经过 AD 转换后传人单片机,并经过单片机分析处理后通过 LCD1602 进行显示。参数设置模块能够完成系统参数的设置,通过按键输入实现土壤湿度值上下限设置,单片机能够根据相应参数设置以及土壤湿度信息,及时控制继电装置工作,从而有效控制相关执行机构。
2.系统软件程序设计主要实现对环境温湿度信息以及土壤 湿度信息的采集与处理,并通过 LCD1602 进行显示,同时通 过控制单片机的相应引脚状态实现对继电器的控制以及声光报警的功能。软件程序设计主要包括系统主程序,液晶显示子程序,土壤湿度检测子程序等。
2 总体设计方案
2.1 浇灌系统设计的需求
此次设计是为了方便人们在繁忙的时候也能对盆栽、花圃进行浇灌,要求土壤的湿度、温度以数值的形式显示在LED屏上。具备报警功能,在检测到需要浇水的时候能报警提醒,并把该时刻的温度、湿度显示在LED屏上。需要浇灌的条件可以由人自己修改确定,通过按键调试,达到用户的浇灌需求。能达到抽水浇灌的功能,在湿度传感器(yl-69)检测到湿度,报警系统提醒以后,能抽水浇灌。 本文转载自http://www.biyezuopin.vip/onews.asp?id=13982按键能够调节浇灌的湿度、温度额定值,并且显示在LED屏上。
2.2 总体设计方案选定
本次设计采用的是STC89C51单片机,利用单片机编程灵活的特性实现了设计要达到的喷灌功能。在单片机的外围电路外接输入键盘用于设定喷灌的湿度值、温度值和一些功能的控制,外接LCD1602显示器用于显示湿度和温度。其原理如下图2-2所示。

图2-2 单片机控制原理图

#include <reg52.h>	         
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535

#include <intrins.h>

sbit SCL=P1^4;		//SCL定义为P1口的第3位脚,连接ADC0832SCL脚
sbit DO=P1^5;		//DO定义为P1口的第4位脚,连接ADC0832DO脚
sbit CS=P1^3;		//CS定义为P1口的第4位脚,连接ADC0832CS脚

sbit beep = P3^3;   //蜂鸣器IO口定义
uint temperature,s_temp ;  //温度的变量
uchar shidu;     //湿度等级
uchar s_high = 70,s_low = 25;	//湿度报警参数

sbit dianji = P1^6;     //电机IO定义

bit flag_300ms ;
uchar key_can;		 //按键值的变量
uchar menu_1;        //菜单设计的变量

#define RdCommand 0x01 //定义ISP的操作命令
#define PrgCommand 0x02
#define EraseCommand 0x03 
#define Error 1
#define Ok 0
#define WaitTime 0x01 //定义CPU的等待时间
sfr ISP_DATA=0xe2;  //寄存器申明
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
sfr ISP_CMD=0xe5;
sfr ISP_TRIG=0xe6;
sfr ISP_CONTR=0xe7;
uchar a_a;

//这三个引脚参考资料
sbit rs=P1^0;	 //1602数据/命令选择引脚 H:数据      	L:命令
sbit rw=P1^1;	 //1602读写引脚	         H:数据寄存器  	L:指令寄存器
sbit e =P1^2;	 //1602使能引脚          下降沿触发
uchar code table_num[]="0123456789abcdefg";

/********************************************************************
* 名称 : delay_uint()
* 功能 : 小延时。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay_uint(uint q)
{
	while(q--);
}

/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
	e=0;
	rs=0;
	rw=0;
	P0=com;
	delay_uint(3);
	e=1;
	delay_uint(25);
	e=0;
}













物联沃分享整理
物联沃-IOTWORD物联网 » 基于AT89C51单片机的智能浇花系统设计

发表评论