当前位置:   article > 正文

基于51单片机的衣柜鞋柜湿度控制系统proteus仿真原理图PCB_基于单片机的智能衣柜仿真

基于单片机的智能衣柜仿真

功能介绍:
0.本系统采用STC89C52作为单片机
1.LCD1602液晶实时显示当前湿度值
2.当湿度超过设定湿度阈值范围时,启动加热和风机控制继电器,否则关闭
3.按键可设定湿度阈值
4.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:
在这里插入图片描述

PCB:
在这里插入图片描述

主程序:

#include "main.h"


unsigned char dispFlag = 0; //更新显示标志

enum _MODE_DF_ dispMode;
unsigned char num = 0;
int temp = 0;
int humidity = 0;
int hmMax = 60;
unsigned char setIndex = 0;
bit ctrlFlag = 0; //自动控制开关
bit ctrlFlag1 = 0; //手动控制开关

char dis0[16]; //定义显示区域临时存储数组

void main(void)
{
    char channel = 0;

    Timer0_Init();
    LCD_Init();   //初始化液晶
    DelayMs(200); //延时有助于稳定
    LCD_Clear();  //清屏

    LCD_DispStr(0, 0, "    Welcome    ");
    DelayS(1);
    LCD_Clear();  //清屏

    DispNormal();

    while (1) //主循环
    {
        if (dispFlag == 1)
        {
            dispFlag = 0;
            
            if (dispMode == NORMAL)
            {
                TR0 = 0;
                DHT11_0_ReadData();
                temp = U8T_data_H;
                humidity = U8RH_data_H;
                TR0 = 1;

                DispNormal();
                if (humidity > hmMax) //湿度大于预设值
                {
                    ctrlFlag = 1; //控制开关标志
                }
                else
                {
                    ctrlFlag = 0;
                }
            }
        }
        KeyProcess();
    }
}

void DispNormal(void)
{
    sprintf(dis0, "Hm:%2d%% Temp:%2d", humidity, temp); //打印温度值
    LCD_DispStr(0, 0, dis0);
    LCD_DispOneChar(14, 0, 0xdf);  //写入温度右上角点
    LCD_DispOneChar(15, 0, 'C');  //写入温度的C

    if (ctrlFlag || ctrlFlag1) //控制开关打开
    {
        RELAY_HEAT = ON; //开启加热
        RELAY_FAN = ON;  //开启通风
        LCD_DispStr(0, 1, "Heat:ON  Fan:ON ");
    }
    else
    {
        RELAY_HEAT = OFF; //关闭加热
        RELAY_FAN = OFF;  //关闭通风
        LCD_DispStr(0, 1, "Heat:OFF Fan:OFF");
    }
}

void DispSetHm(unsigned char setIndex)
{
    LCD_DispStr(0, 0, "  Set Hm Limit  "); 
    sprintf(dis0, "       %2d%%      ", hmMax);
    LCD_DispStr(0, 1, dis0);
    
    switch (setIndex)
    {
        case 1: LCD_SetCursor(8, 1, 1); break;
        default:;
    } 
    
}

/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Timer0_Init(void)
{
    TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
    TH0 = (65536 - 18432) / 256; //重新赋值 20ms
    TL0 = (65536 - 18432) % 256;
    EA = 1;  //总中断打开
    ET0 = 1; //定时器中断打开
    TR0 = 1; //定时器开关打开
}
/*------------------------------------------------
                定时器中断子程序
------------------------------------------------*/
void Timer0_Interrupt(void) interrupt 1
{
    static unsigned char time20ms  = 0;
    TH0 = (65536 - 18432) / 256; //重新赋值 20ms
    TL0 = (65536 - 18432) % 256;
    time20ms++;

    if (time20ms > 100)
    {
        time20ms = 0;
        dispFlag = 1; //读标志位置1
    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125

仿真演示视频:
https://www.bilibili.com/video/BV1pF411j7Y8/

实物演示视频:
https://www.bilibili.com/video/BV1z14y1a7WZ/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/283151
推荐阅读
相关标签
  

闽ICP备14008679号