当前位置: 首页 > article >正文

基于单片机DHT11湿度测量与控制-CO2-光照报警系统程序和仿真

一、系统方案
1、本设计采用这51单片机作为主控器。
2、DHT11温湿度、CO2、光照强度送到液晶1602显示。
3、按键设置报警值。
4、蜂鸣器报警。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
//初始化LCD************************************************************
void LCD_Initial()
{
E=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,57点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
}
2、液晶显示程序
//1602程序
//内部等待函数
************************************************************
unsigned char LCD_Wait(void)
{
RS=0;
RW=1; nop();
E=1; nop();
E=0;
return DBPort;
}
//向LCD写入命令或数据********************************************************
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回原点
void LCD_Write(bit style, unsigned char input)
{
E=0;
RS=style;
RW=0; nop();
DBPort=input; nop();//注意顺序
E=1; nop();//注意顺序
E=0; nop();
LCD_Wait();
}
3、按键程序
void key()
{
uchar m;
if (k10) //调整按键检测
{
delay(10);
if (k1
0)
{
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
presskeynum++;
if(presskeynum==8)
{
presskeynum=0;

			 }
     while(k1==0);
     
  }

}
if(presskeynum1)//温度上限设置
{
if(k2
0)// 加
{
delay(300);
temp_high++;
if (temp_high>99)
temp_high=0;
if (temp_high<0)
temp_high=99;
while(k20); //加上此句必须松按键才处理
}
if(k3
0)//减
{
delay(300);
temp_high–;
if (temp_high>99)
temp_high=0;
if (temp_high<0)
temp_high=99;
while(k30); //加上此句必须松按键才处理
}
}
if(presskeynum
2)//温度下限设置
{
if(k20)// 加
{
delay(300);
temp_low++;
if (temp_low>99)
temp_low=0;
if (temp_low<0)
temp_low=99;
while(k2
0);
}
if(k30)
{
delay(300);
temp_low–;
if (temp_low>99)
temp_low=0;
if (temp_low<0)
temp_low=99;
while(k3
0);
}
}
if(presskeynum3)//湿度上限设置
{
if(k2
0)// 加
{
delay(300);
humi_high++;
if (humi_high>99)
humi_high=0;
if (humi_high<0)
humi_high=99;
while(k20);
}
if(k3
0)
{
delay(300);
humi_high–;
if (humi_high>99)
humi_high=0;
if (humi_high<0)
humi_high=99;
while(k30);
}
}
if(presskeynum
4)//湿度下限设置
{
if(k20)//加
{
delay(300);
humi_low++;
if (humi_low>99)
humi_low=0;
if (humi_low<0)
humi_low=99;
while(k2
0);
}
if(k30)// 减
{
delay(300);
humi_low–;
if (humi_low>99)
humi_low=0;
if (humi_low<0)
humi_low=99;
while(k3
0);
}
}
if(presskeynum5)//湿度下限设置
{
if(k2
0)//加
{
delay(300);
gh++;
if (gh>99)
gh=0;

      while(k2==0);
  }
  if(k3==0)// 减
  {
      delay(300);
     gh--;
    
     gh=99;
      while(k3==0);
  }

}
if(presskeynum6)//湿度下限设置
{
if(k2
0)//加
{
delay(300);
gl++;
if (gl>99)
gl=0;

      humi_low=99;
      while(k2==0);
  }
  if(k3==0)// 减
  {
      delay(300);
      gl--;
    
      if (gl<0)
     gl=99;
      while(k3==0);
  }

}
if(presskeynum7)//湿度下限设置
{
if(k2
0)//加
{
delay(300);
CO2++;
if (CO2>99)
CO2=0;

      while(k2==0);
  }
  if(k3==0)// 减
  {
      delay(300);
      CO2--;
     
      if (CO2<0)
      CO2=99;
      while(k3==0);
  }

}

if(k40)// 退出键
{
delay(10);
if(k4
0)
{
while(k4==0);
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
presskeynum=0;
temp_humi_cache[0]=temp_high;

      temp_humi_cache[1]=temp_low;
 
 
      temp_humi_cache[2]=humi_high;
      temp_humi_cache[3]=humi_low;
      
			
			   temp_humi_cache[4]=gh;
    
      temp_humi_cache[5]=gl;
  
      temp_humi_cache[6]=CO2;
     
			
			
				
			
      for(m=0;m<=6;m++)
      {  
           WriteIIC(W_cmd,0x00+m,temp_humi_cache[m]);      	//设定值写入24c02
					
      }
      
   }

 
 }

}
4、核心算法程序
unsigned char adc0832(unsigned char CH)
{
unsigned char i,test,adval;
adval = 0x00;
test = 0x00;
Clk = 0;
DATI = 1;
nop();
CS = 0;
nop();
Clk = 1;
nop();
if ( CH == 0x00 )
{
Clk = 0;
DATI = 1;
nop();
Clk = 1;
nop();
Clk = 0;
DATI = 0;
nop();
Clk = 1;
nop();
}
else
{
Clk = 0;
DATI = 1;
nop();
Clk = 1;
nop();
Clk = 0;
DATI = 1;
nop();
Clk = 1;
nop();
}
Clk = 0;
DATI = 1;
for( i = 0;i < 8;i++ )
{
nop();
adval <<= 1;
Clk = 1;
nop();
Clk = 0;
if (DATO)
adval |= 0x01;
else
adval |= 0x00;
}
for (i = 0; i < 8; i++)
{
test >>= 1;
if (DATO)
test |= 0x80;
else
test |= 0x00;
nop();
Clk = 1;
nop();
Clk = 0;
}
if (adval == test)
dat = test;
nop();
CS = 1;
DATO = 1;
Clk = 1;
return dat;
}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述


http://www.kler.cn/a/146115.html

相关文章:

  • 流量分析复现(第十八届信息安全大赛 第二届长城杯 )
  • 安路FPGA开发工具TD:问题解决办法 及 Tips 总结
  • # [Unity] 【游戏开发】获取物体和组件的脚本方法
  • 寒假1.18
  • Navicat 17 功能简介 | 商业智能 BI
  • AUTOSAR从入门到精通-无人驾驶网约车(Robotaxi)
  • 终于等到你!常用的组织架构图模板,高清图片一键导出
  • 在vue页面中添加组件到底有多方便
  • udp通信socket关闭后,缓存不清空
  • 【Android知识笔记】性能优化专题(三)
  • [环境配置]vscode免密ssh的设置流程
  • 85基于Matlab的交通设施识别
  • 解决ssh -T git@github.com报错connection closed问题
  • Linux命令之sed
  • AI和人工智能与机器学习全景报告
  • 在线知识库管理平台zyplayer-doc
  • MyBatis-Plus简介和入门操作
  • Java基础之数组
  • 基于ssm的网上订餐系统
  • 工业自动化配电柜监控技术,不会用就太可惜了!
  • MIMO雷达(TI文档)
  • 相机内存卡照片删除怎么恢复?没有备份可这样操作
  • HBase数据模型杂谈
  • 毅速丨3D打印随形水路为何受到模具制造追捧
  • 141.【Git版本控制-本地仓库-远程仓库-IDEA开发工具全解版】
  • 英特尔工作站:助力专业用户实现高效创作