59、基于51单片机DHT11温湿度4个继电器控制 LCD1602系统设计(proteus仿真+原理图+PCB图+程序+开题报告+参考论文)

一、设计简介:

本设计是基于51单片机DHT11温湿度4个继电器控制 LCD1602系统设计,主要实现以下功能:

1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51 都可通用
 
2.产品自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。
 
3.采集LCD1602液晶显示温度和湿度值,报警参数可以同时显示出来,直观明了。

4.有4个报警指示灯,分别代表温度过高、温度过低、湿度过高、湿度过低。

5.可以设置温度和湿度的上下限报警范围,并具有掉电保存功能,保存在STC单片机内部,上电无需重新设置。

6.当DHT11测出来的温湿度超出设置的范围时,蜂鸣器会报警,同时对应的报警指示灯会变亮。

7.DHT11传感器湿度测量范围:10%~95%RH;温度测量范围:0~50℃

主要硬件组成:

51单片机+液晶LCD1602显示屏+DHT11温湿度传感器+按键+继电器+蜂鸣器+LED灯

二、原理图

三、PCB图

四、Proteus仿真 

五、程序源码 

部分代码:

/********************独立按键程序*****************/
uchar key_can;     //按键值
 
void key()     //独立按键程序
{
    key_can = 0;                //按键值还原成0
     if(key1 == 0 || key2 == 0 || key3 == 0)        //有按键按下 
    {
        delay_1ms(1);             //按键延时消抖动
        if(key1 == 0)        //确认是按键按下
            key_can = 3;     //得到按键值 
        if(key2 == 0)        //确认是按键按下
            key_can = 2;     //得到按键值 
        if(key3 == 0)        //确认是按键按下
            key_can = 1;     //得到按键值 
    }
}
 
/****************按键设置函数***************/
void key_with()
{
    if(key_can == 1)       //设置键
    {
        menu_1 ++;
        if(menu_1 > 4)
        {
            menu_1 = 0;      //menu_1 = 0 退出设置了,在正常显示界面下
            init_1602();  //lcd1602初始化显示             
        }
    }
    if(menu_1 == 1)            //设置温度上限报警值 
    {
        if(key_can == 2)   //加键 
        {
            t_high ++ ;        //设置温度上限报警值 加1     
            if(t_high > 99)
                t_high = 99;
        }
        if(key_can == 3)    //减键 
        {
            t_high -- ;        //设置温度上限报警值 减1     
            if(t_high <= t_low)
                t_high = t_low + 1;     //限制温度上限不能低于温度下限
        }
        write_lcd2(1,8,t_high);       //显示上限报警值
        write_com(0x80+8);         //将光标移动到第1行第8位
        write_com(0x0f);           //显示光标并且闪烁    
    }    
    if(menu_1 == 2)            //设置温度下限报警值 
    {
        if(key_can == 2)    //加键
        {
            t_low ++ ;            //设置温度下限报警值 加1 
            if(t_low >= t_high)
                t_low = t_high - 1;      //限制温度下限不能高于温度上限
        }
        if(key_can == 3)    //减键          
        {
            t_low -- ;            //设置温度下限报警值 减1 
            if(t_low <= 1)
                t_low = 1;
        }
        write_lcd2(1,13,t_low);   //显示温度下限报警值    
        write_com(0x80+13);         //将光标移动到第1行第13位
        write_com(0x0f);          //显示光标并且闪烁    
    }
    if(menu_1 == 3)            //设置湿度上限报警值
    {
        if(key_can == 2)    //加键
        {
            s_high ++ ;        //设置湿度上限报警值加1     
            if(s_high > 99)
                s_high = 99;
        }
        if(key_can == 3)    //减键 
        {
            s_high -- ;        //设置湿度上限报警值减1     
            if(s_high <= s_low)
                s_high = s_low + 1;       //限制湿度上限不能低于湿度下限
        }
        write_lcd2(2,8,s_high);       //显示湿度上限报警值
        write_com(0x80+0x40+8);    //将光标移动到第2行第8位
        write_com(0x0f);           //显示光标并且闪烁    
    }    
    if(menu_1 == 4)            //设置湿度下限报警值
    {
        if(key_can == 2)    //加键
        {
            s_low ++ ;            //设置湿度下限报警值 加1 
            if(s_low >= s_high)
                s_low = s_high - 1;      //限制湿度下限不能高于湿度上限
        }
        if(key_can == 3)    //减键        
        {
            s_low -- ;             //设置湿度下限报警值 减1 
            if(s_low <= 1)
                s_low = 1;
        }
        write_lcd2(2,13,s_low);         //显示湿度下限报警值
        write_com(0x80+0x40+13);     //将光标移动到第2行第13位
        write_com(0x0f);             //显示光标并且闪烁    
    }        

 
/*****************读温湿度传感器程序****************/
void dht11_dis()
{
    uchar i,j;             
    dht11 = 0;       //DHT11端口复位,发出起始信号 
    delay_1ms(20);
    dht11 = 1;
    delay_uint(4);      
    if(dht11 == 0)      //判断是否响应    
    {
        while(dht11 == 0);      //等待低电平时间过完
        while(dht11 == 1);      //等待高电平时间过完
        for(i=0;i<5;i++)
        {
            for(j=0;j<8;j++)
            {
                table_dht11[i] <<= 1;  //数据左移一位低位自动补0
                while(dht11 == 0);  //等待低电平时间过完
                delay_uint(4);        //数据1的高电平时间 
                if(dht11 == 1)
                {
                    table_dht11[i] |= 0x01;
                    while(dht11 == 1);      //等待高电平时间过完

六、资源获取

本项目包含的所有文件都可以点击下面的名片,发送 “ 59、基于51单片机DHT11温湿度4个继电器控制 LCD1602系统设计 ” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值