单片机
返回首页

基于51单片机的SHT11温湿度检测调节系统(LCD12864显示)

2025-10-27 来源:bilibili

具体实现功能

(1)实时检测温湿度值,LCD12864分别显示温度值、湿度值、温度上下限值、湿度上下限值;

(2)通过按键可以设定温湿度报警阈值;

(3)当温度值过高且湿度值过低时,相应的指示灯亮,蜂鸣器响,继电器控制风扇转动,表示降温;

(4)当温度值过低且湿度值过高时,相应的指示灯亮,蜂鸣器响,继电器控制加热膜工作,表示升温。

(5)温度测量范围0-99,湿度测量范围0-99,误差±1。

仿真演示视频:

https://www.bilibili.com/video/BV1dZ42127md/?vd_source=cb7d37314419614c8c9f43f514f7d751


设计介绍

51单片机简介

51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。

本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。

资料内容

仿真实现(protues8.7)

本设计利用protues8.7软件实现仿真设计,具体如图。

程序(Keil5)

本设计利用KEIL5软件实现程序设计。

主函数如下:


/****************主函数***************/

void main()//主函数

{

    value humi_val,temp_val;

    uchar humi_max=50,humi_min=15,temp_max=40,temp_min=20,temp,humi;//定义变量

    uchar error,checksum;

    uchar flag=0;


    DisplayOn();

    s_connectionreset();

    Led1=1;

    jiangwen=1;

    Led2=1;

    shengwen=1;

    beep=1;

    while(1)

    {

        error=0;

        error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI);  //measure humidity

        error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP);  //measure temperature

        if(error!=0)

            s_connectionreset();                 //in case of an error: connection reset

        else

        {

        //温湿度值、阈值读取及显示

            humi_val.f=(float)humi_val.i;                   //converts integer to float

              temp_val.f=(float)temp_val.i;                   //converts integer to float

              calc_sth11(&humi_val.f,&temp_val.f);            //calculate humidity, temperature

              //dew_point=calc_dewpoint(humi_val.f,temp_val.f); //calculate dew point


            if(temp_val.f>99)

                temp_val.f=99;

            if(humi_val.f>99)

                humi_val.f=99;

            temp=(uchar)temp_val.f+1;

            humi=(uchar)humi_val.f-3;

              Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);


        }

        while(P1!=0xff||flag!=0)

        {

            if(SetTempMax==0)

            {

                while(SetTempMax==0);

                flag=1;

                //显示文字

                DispHZ(0,3,she);

                DispHZ(16,3,ding);

                DispHZ(32,3,wen);

                DispHZ(48,3,du);

                DispHZ(64,3,shang);

                DispHZ(80,3,xian);

            }

            else if(SetTempMin==0)

            {

                //显示文字

                while(SetTempMin==0);

                flag=2;

                DispHZ(0,3,she);

                DispHZ(16,3,ding);

                DispHZ(32,3,wen);

                DispHZ(48,3,du);

                DispHZ(64,3,xia);

                DispHZ(80,3,xian);

            }

            if(SetHumiMax==0)

            {

            //显示文字

                while(SetHumiMax==0);

                flag=3;

                DispHZ(0,3,she);

                DispHZ(16,3,ding);

                DispHZ(32,3,shi);

                DispHZ(48,3,du);

                DispHZ(64,3,shang);

                DispHZ(80,3,xian);

            }

            if(SetHumiMin==0)

            {

                //显示文字

                while(SetHumiMin==0);

                flag=4;

                DispHZ(0,3,she);

                DispHZ(16,3,ding);

                DispHZ(32,3,shi);

                DispHZ(48,3,du);

                DispHZ(64,3,xia);

                DispHZ(80,3,xian);

            }

            else if(flag==1&&NumInc==0)

            {

                while(NumInc==0);//改变温度上限++

                temp_max++;

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(flag==2&&NumInc==0)

            {

                while(NumInc==0);//改变温度下限++

                temp_min++;

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(flag==3&&NumInc==0)

            {

                while(NumInc==0);

                humi_max++;//改变温湿度上限++

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(flag==4&&NumInc==0)

            {

                while(NumInc==0);

                humi_min++;//改变温度下限++

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(flag==1&&NumDec==0)

            {

                while(NumDec==0);

                temp_max--;//改变温度上限--

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(flag==2&&NumDec==0)

            {

                while(NumDec==0);

                temp_min--;//改变温度下限--

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(flag==3&&NumDec==0)

            {

                while(NumDec==0);

                humi_max--;//改变湿度上限--

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(flag==4&&NumDec==0)

            {

                while(NumDec==0);

                humi_min--;//改变湿度下限--

                Disp(temp,humi,temp_max,temp_min,humi_max,humi_min);

            }

            else if(isOK==0)

            {

                //清空文字显示

                while(isOK==0);

                flag=0;

                DispHZ(0,3,blank);

                DispHZ(16,3,blank);

                DispHZ(32,3,blank);

                DispHZ(48,3,blank);

                DispHZ(64,3,blank);

                DispHZ(80,3,blank);

            }

        }

        if((temp>temp_max)&&(humi        {

            Led1=0;

            jiangwen=0;

            Led2=1;

            shengwen=1;

            beep=0;

        }

        else if((temphumi_max))//温度过低且湿度过高,报警及加热

        {

            Led1=1;

            jiangwen=1;

            Led2=0;

            shengwen=0;

            beep=0;

        }

        else

        {

            Led1=1;

            jiangwen=1;

            Led2=1;

            shengwen=1;

            beep=1;

        }

        delayms(10);


    }

}


程序运行结果如图:

全部内容

全部资料包括程序(keil5)、protues仿真(protues8.7)、开发资料、资料使用介绍、仿真视频、程序讲解视频、仿真讲解视频、最小系统介绍视频等。

资料获取

资料链接:https://docs.qq.com/doc/DT2JidWJ6WmRFZ2dm


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 家用电器遥控器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • DS1669数字电位器

  • HA1377 桥式放大器 BCL 电容 17W(汽车音频)

    相关电子头条文章