图10 主程序流程图
3.2 子程序流程图
3.2.1 LCD显示的流程图
主程序运行后,当要调用显示子程序时,先对显示模块进行初始化,初始化结束后,要将LCD显示的内容和LCD的地址发送到单片机,由单片机发出信号,检测显示设备LCD是否忙碌。若LCD空闲,则单片机将信息发送给LCD并将数据显示出来。若LCD处于忙碌状态,则需要等待,当完成当前数据处理后,再将单片机发出的数据显示出来。显示子程序的流程图如图11所示。
图11 LCD显示流程图
3.2.2 温湿度采集的流程图
DHT11 上电后,首先测试环境温湿度数据,并记录数据,DATA数据线由上拉电阻拉高一直保持高电平,处于输入状态,时刻检测外部信号。微处理器的I/O输出低电平(保持时间大于等于18ms),由于上拉电阻,微处理器的 I/O即 DHT11的 DATA数据线变高,等待 DHT11作出回答信号,DHT11的DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后DHT11 的DATA引脚处于输出状态,输出80us的低电平作为应答信号,紧接着输出80us的高电平通知外设准备接收数据,微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11回应信号)后,等待80us的高电平后的数据接收,由DHT11的 DATA引脚输出40位数据,微处理器根据 I/O电平的变化接收40 位数据,位数据0的格式为:50us的低电平和 26-28us的高电平,位数据1的格式为:50us的低电平加70微秒的高电平。DHT11 的DATA引脚输出 40 位数据后,继续输出低电平50 微秒后转为输入状态,由于上拉电阻随之变为高电平,接下来DHT11内部重测环境温湿度数据,开始记录数据,重新等待外部信号的到来[9]。
相应的流程图如图12所示。
图12 温湿度采集流程图
3.3 程序设计
本设计采用C语言编程,下面介绍main.c主程序编写,其他程序略
3.3.1 头文件和一些宏定义
#include <reg52.h>
#include "1602.h"
#include "dht.h"
#include "2402.h"
3.3.2 管脚定义
//定义三个LED灯
sbit L2=P1^3;
sbit L3=P1^4;
sbit L4=P1^5;
sbit L5=P1^6;
sbit Key_SET = P3^2; //设置键
sbit Key_UP= P3^3; //加 键
sbit Key_DOWN = P3^4; //减 键
sbit Key_SAVE = P3^5; //保存键
sbit Relay = P2^0;
3.3.3 常量、变量定义
//定义标识
volatile bit FlagStartRH = 0; //开始温湿度转换标志
volatile bit FlagKeyPress = 0; //有键按下
//定义温湿度传感器用外部变量
extern U8 U8FLAG,k;
extern U8 U8count,U8temp;
extern U8 U8comdata;
extern U8 count, count_r;
U16 temp;
S16 temperature, humidity;
S16 idata TH, TL, HH, HL; //温度上限和湿度上限
char * pSave;
U8 keyvalue, keySET, keySAVE, keyUP, keyDOWN;
//定义变量
U16 RHCounter;
U8 FlagSet,hide. STC89C52单片机温室在线监控系统设计+流程图(6):http://www.youerw.com/zidonghua/lunwen_1916.html