基于51单片机多路DTH11温湿度检测控制系统

一、系统方案

1、本设计采用51单片机作为主控器。

2、DHT11采集温度度,支持3路温度度,液晶1602显示。

3、按键设置报警阀值。

4、系统声光报警。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

//初始化LCD************************************************************

void LCD_Initial()

{

E=0;

LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵

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显示程序

//液晶字符输入的位置************************

void GotoXY(unsigned char x, unsigned char y)

{

if(y0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

}

//将字符输出到液晶显示

void Print(unsigned char *str)

{

while(*str!='\0')

{

LCD_Write(LCD_DATA,*str);

str++;

}

}

3、按键程序

void key()// 按键扫描

{

if (k10) //设置调整按键检测
{
delay(10);
if (k10)

{

presskeynum++;//切换显示界面

if(presskeynum5)
presskeynum=0;
while(k10);

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏

}

}

if(presskeynum1)//温度上限设置
{
if(k20)// 加

{

delay(10);

temp_high++;

if (temp_high>99)

temp_high=0;

while(k20); //加上此句必须松按键才处理
}
if(k30)//减

{

delay(10);

temp_high--;

if (temp_high<0)

temp_high=99;

while(k30); //加上此句必须松按键才处理
}
}
if(presskeynum2)//温度下限设置

{

if(k2==0)// 加

{

delay(10);

temp_low++;

if (temp_low>99)

temp_low=0;

复制代码
     while(k2==0);
  }
  if(k3==0)
  {
     delay(10);
     temp_low--;
     if (temp_low<0)
     temp_low=99;
     while(k3==0);
  }

}

if(presskeynum3)//湿度上限设置
{
if(k20)// 加

{

delay(10);

humi_high++;

if (humi_high>99)

humi_high=0;

复制代码
      while(k2==0);
  }
  if(k3==0)
  {
      delay(10);
      humi_high--;
      if (humi_high<0)
      humi_high=99;
      while(k3==0);
  }

}

if(presskeynum4)//湿度下限设置
{
if(k20)//加

{

delay(10);

humi_low++;

if (humi_low>99)

humi_low=0;

复制代码
      while(k2==0);
  }
  if(k3==0)// 减
  {
      delay(10);
      humi_low--;
      
      if (humi_low<0)
      humi_low=99;
      while(k3==0);
  }

}

if(k40)// 退出键
{
delay(10);
if(k40)

{

while(k4==0);

presskeynum=0;

复制代码
      LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   			//清屏
   }

}

}

4、核心算法程序

void COM(void)//读DHT11一个字节

{

uchar i;

for(i=0;i<8;i++)

{

U8FLAG=2;

while((!DATA)&&U8FLAG++);

Delay_10us();

Delay_10us();

Delay_10us();

U8temp=0;

if(DATA)U8temp=1;

U8FLAG=2;

while((DATA)&&U8FLAG++);

if(U8FLAG==1)break;

U8comdata<<=1;

U8comdata|=U8temp;

}

}

//--------------------------------

//-----温湿度读取子程序 ------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位== U8T_data_H------

//----温度低8位== U8T_data_L------

//----湿度高8位== U8RH_data_H-----

//----湿度低8位== U8RH_data_L-----

//----校验 8位 == U8checkdata-----

//----调用相关子程序如下----------

//---- Delay();, Delay_10us();,COM();

//--------------------------------

uchar RH(void)

{

DATA=0; //主机拉低18ms

Delay1(180); //原来为5

DATA=1; //总线由上拉电阻拉高 主机延时20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

DATA=1; //主机设为输入 判断从机响应信号

if(!DATA) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行

{

U8FLAG=2;

复制代码
    while((!DATA)&&U8FLAG++);	//判断从机是否发出 80us 的低电平响应信号是否结束	 
    U8FLAG=2;
  	while((DATA)&&U8FLAG++);    //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
    COM();						//数据接收状态
    U8RH_data_H_temp=U8comdata;
    COM();
    U8RH_data_L_temp=U8comdata;
    COM();
    U8T_data_H_temp=U8comdata;
    COM();
    U8T_data_L_temp=U8comdata;
    COM();
    U8checkdata_temp=U8comdata;
    DATA=1;
    U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);	//数据校验
    if(U8temp==U8checkdata_temp)
    {
   	   U8RH_data_H=U8RH_data_H_temp;
   	   U8RH_data_L=U8RH_data_L_temp;
   	   U8T_data_H=U8T_data_H_temp;
   	   U8T_data_L=U8T_data_L_temp;
   	   U8checkdata=U8checkdata_temp;
    }

	return 1;
}
else   									//传感器不响应
{
   return 0;
}

}

四、 proteus仿真设计

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

相关推荐
果壳science34 分钟前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn38 分钟前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
桀人1 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯3 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C3 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路3 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc3 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院4 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
恒锐丰科技林技术员5 小时前
EG1160 高压半桥驱动芯片:高压功率变换的实用驱动方案
经验分享·嵌入式硬件·硬件工程
智购科技自动售卖机厂家6 小时前
双摄像头方案F1-score只有0.85,排查发现是上下视角的融合逻辑写反了~YH
python·单片机·嵌入式硬件·算法·eclipse