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

目录

具体实现功能

设计介绍

51单片机简介

资料内容

仿真实现(protues8.7)

程序(Keil5)

全部资料(压缩文件)


具体实现功能

(1)实时检测温湿度值,LCD12864分别显示温度值、湿度值、温度上下限值、湿度上下限值;
(2)通过按键可以设定温湿度报警阈值;
(3)当温度值过高且湿度值过低时,相应的指示灯亮,蜂鸣器响,继电器控制风扇转动,表示降温;
(4)当温度值过低且湿度值过高时,相应的指示灯亮,蜂鸣器响,继电器控制加热膜工作,表示升温。
(5)温度测量范围0-99,湿度测量范围0-99,误差±1。

 仿真演示:

基于51单片机的SHT11温湿度检测调节系统—仿真视频

设计介绍

51单片机简介

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

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

资料内容

仿真实现(protues8.7)

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

注:请使用protues8.7直接打开资料中的工程文件(资料中已说明打开方式)!

程序(Keil5)

本设计利用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<humi_min))//温度过高且湿度过低,报警且降温
        {
            Led1=0;
            jiangwen=0;
            Led2=1;
            shengwen=1;
            beep=0;
        }
        else if((temp<temp_min)&&(humi>humi_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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值