首页 > 分享 > 单片机DHT11温湿度模块智能浇花系统制作 1602显示附源码

单片机DHT11温湿度模块智能浇花系统制作 1602显示附源码

这是一个我做出来的51单片机的浇花系统,带有DHT11温湿度检测模块,以及土壤湿度检测模块,可以设置触发浇花的临界值,并且改进了浇水判断程序,避免在临界值抖动达不到浇水效果

这个1602显示、带DHT11的浇花系统的程序我们借鉴了51黑电子论坛上许多大佬的作品,在此对他们表示感谢٩(๑>◡<๑)۶,同时我们也对程序做了许多优化与更改,使得整个系统更具实用性,比如改进了浇水判断程序,避免在临界值抖动达不到浇水效果(〃'▽'〃)。但是时间紧,有一些地方并没有完善,比如没有加1602背光控制。还需要各位继续完善(*/ω\*),然后,成品我们已经测试过可以正常使用,如果出现异常请检查一下接线是否有误~  
还有还有,水泵如果和单片机使用同一个电源,要滤波否则会影响1602的正常显示,最好使用独立的电源。原理图没画1602的对比度调节,大家可以自己加上!

制作出来的实物图如下:

正面

正面

设置状态

设置状态

反面

反面

电路原理图如下:

0.png

单片机源程序如下:

/**************************
制作:华南农业大学   LSR
***************************/
//程序头函数                                 
#include <reg52.h>
#include <intrins.H>
#include <math.H>


//宏定义
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1

//管脚声明
sbit Feng = P3^0;
sbit DQ=P3^1;    //DTH11
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^4;
sbit OE=P3^2;
//按键
sbit Key1=P3^5;
sbit Key2=P3^6;
sbit Key3=P3^7;

sbit rs=P2^2;
sbit lcden=P2^0;
sbit rw=P2^1;



uchar code table_num[]="0123456789abcdefg"; //定义数组
uchar tem;
uchar hum;

//函数声明

extern uchar ADC0809();
bit Init_DTH11() ;
void delay_ms(uint z);
void delay(uint t);
void write_com(uchar com) ;
void write_data(uchar dat)         ;
void write_sfm2(uchar hang,uchar add,uint date);
void write_string(uchar hang,uchar add,uchar *p);
void init()         ;
void Display(uchar X,uchar Data);
void  DTH11_DUSHU();        
void Display_DTH11();
  
uchar DTH11_RD_CHAR();


//湿度变量
uchar temp=0;
//蜂鸣器变量
uchar FF=60;
//显示模式
uchar Mode=0;
int  F=0;

void main()
{
        tem=0;hum=0;
         init();
        write_string(2,0,"T:00'C  RH:00%");
        while(1)
        {        

                //正常模式
                if(Mode==0)
                {
                        //读取AD值
                        bit Init_DTH11()  ;
                        DTH11_DUSHU();
                Display_DTH11();
                        delay(500);
                        temp=ADC0809();
                        delay(10);
                        Display(0,temp);  
                        delay(100);
                        //判断是否报警
                        if(temp>FF)
                        {
                                F=1;
                                Feng=0;
                        }
                        else if(temp<=FF&&temp>=(FF-20)&&F==1) {Feng=0;} //这里是当湿度下降20时停止浇水的程序,若想改变浇水多少,改20即可。
                        
                        else
                        {
                                Feng=1;F=0;
                        }
                 }

                //调整模式
                else
                {
                        Display(1,FF);
                }
                //功能键
                if(Key3==0)
                {
                        Feng=1;
                        delay(10);
                        while(Key3==0)
                        {
                                if(Mode==0)
                                        Display(0,temp);        
                                else
                                        Display(1,FF);                                                                        
                        }
                        if(Mode==0)
                                Mode=1;
                        else
                                Mode=0;
                        Feng=1;
                }
                //增加
                if(Key2==0&&Mode==1)
                {
                        Feng=1;
                        delay(10);
                        while(Key2==0)
                        {
                                        Display(1,FF);
                                        delay(100);                                                                        
                        }
                        FF++;
                        if(FF==256)        
                                FF=255;        
                        Feng=1;
                }
                //减少
                if(Key1==0&&Mode==1)
                {
                        Feng=1;
                        delay(10);
                        while(Key1==0)
                        {
                                        Display(1,FF);                                                                        
                        }
                        FF--;
                        if(FF==-1)        
                                FF=0;        
                        Feng=1;
                }  
               
        }
}
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=114;y>0;y--);
}

void write_com(uchar com)                                //写命令函数
{
        delay(5);
        lcden=0;
        rs=0;
        rw=0;
        delay(5);
        P0=com;
        delay(5);
        lcden=1;
        delay(25);
        lcden=0;
}

void write_data(uchar dat)                                //写数据函数
{
         delay(5);
        lcden=0;
        rs=1;
        rw=0;
        delay(5);
        P0=dat;
        delay(5);
        lcden=1;
        delay(25);
        lcden=0;        
}

/********************************************************************
* 名称 : write_sfm2(uchar hang,uchar add,uchar date)
* 功能 : 显示3位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下
                  write_sfm1(1,5,23)
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无                                                                !!!还需测试的!!!!
***********************************************************************/
void write_sfm2(uchar hang,uchar add,uint date)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
                delay(5);
        write_data(0x30+date/100%10);
        delay(5);
        write_data(0x30+date/10%10);
        delay(5);
        write_data(0x30+date%10);        
}

/********************************************************************
* 名称 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
                  write_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
                while(1)
                {
                        if(*p == '')  break;
                        write_data(*p);
                        p++;
                }        
}

void init()
{
//        uchar num;
        rw=0;
        lcden=0;

        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        delay(1000);
        write_string(1,0,"shidu:")        ;
        write_string(2,0,"T:00'C  RH:00%");
        
}
//ADC0809读取信息
uchar ADC0809()
{
        uchar temp_=0x00;
        //初始化高阻太
        OE=0;
        //转化初始化
        ST=0;
        delay(5);
        //开始转换
        ST=1;
        ST=0;
        //外部中断等待AD转换结束
        while(EOC==0)
        //读取转换的AD值
        OE=1;
        temp_=Data_ADC0809;
        OE=0;
        return temp_;
}
bit Init_DTH11()
{
bit flag;
uchar num;
DQ=0;
delay_ms(19);   // >18ms
DQ=1;
for(num=0;num<10;num++);   // 20-40us    34.7us
for(num=0;num<12;num++);
flag=DQ;
for(num=0;num<11;num++); //DTH响应80us
for(num=0;num<24;num++);    //DTH拉高80us
return flag;
}
//****************************读DTH11数据
uchar DTH11_RD_CHAR()
{
uchar byte=0;
uchar num;
uchar num1;
while(DQ==1);
for(num1=0;num1<8;num1++)
{
  while(DQ==0);
  byte<<=1;     //高位在前
  for(num=0;DQ==1;num++);
  if(num<10)
   byte|=0x00;
  else
   byte|=0x01;
}
return byte;
}
//******************************读取DTH11温度和湿度
void  DTH11_DUSHU()
{
uchar num;
if(Init_DTH11()==0)
{
  hum=DTH11_RD_CHAR();   //比正常值高7度左右
  DTH11_RD_CHAR();
  tem=DTH11_RD_CHAR();
  DTH11_RD_CHAR();
  DTH11_RD_CHAR();
  for(num=0;num<17;num++);  //最后BIT输出后拉低总线50us
  DQ=1;
}
}


//**************显示函数
  
……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

复制代码


QQ截图20181125114259.png
所有资料51hei提供下载:
浇花系统.rar (19.19 MB, 下载次数: 261)

相关知识

基于51单片机的智能浇花系统设计
智能浇花自动灌溉控制系统:让植物护理更智能、更便捷
基于AT89C51单片机的智能浇花系统设计
基于stm32单片机智能浇花自动灌溉控制系统Proteus仿真和程序源码全套资料
基于51单片机的智能浇花系统(可做毕设)
毕业论文盆花自动浇水系统
8个经典智慧灌溉电路方案精选汇总
基于51单片机土壤湿度检测及自动浇花浇灌系统
基于单片机的智能浇花(灌溉)系统设计
《基于单片机智能花卉浇水系统的设计和实现 机械制造专业》.doc

网址: 单片机DHT11温湿度模块智能浇花系统制作 1602显示附源码 https://m.huajiangbk.com/newsview478074.html

所属分类:花卉
上一篇: 一种智能浇花系统的制作方法
下一篇: 智能浇花控制系统的制作方法