基于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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
anghost15012 小时前
基于 STM32 的多传感器健康监测系统设计
stm32·单片机·嵌入式硬件
玉~你还好吗13 小时前
【嵌入式电机控制#34】FOC:意法电控驱动层源码解析——HALL传感器中断(不在两大中断内,但重要)
单片机·嵌入式系统·电机控制
STC_USB_CAN_805114 小时前
所有普通I/O口都支持中断的51单片机@Ai8051U, AiCube 图形化配置
单片机·嵌入式硬件·51单片机
正点原子14 小时前
《ESP32-S3使用指南—IDF版 V1.6》第三十四章 RGB触摸实验
单片机·物联网·嵌入式
码小文15 小时前
Altium Designer 22使用笔记(8)---PCB电气约束设置
笔记·嵌入式硬件·硬件工程·ad22
dumpling012016 小时前
新手向:使用STM32通过RS485通信接口控制步进电机
stm32·单片机·嵌入式硬件
hazy1k16 小时前
STM32-FreeRTOS快速入门指南(中)
stm32·单片机·嵌入式硬件
清风66666616 小时前
基于51单片机自动浇花1602液晶显示设计
单片机·嵌入式硬件·mongodb·毕业设计·51单片机·课程设计
古译汉书17 小时前
嵌入式-SPI番外之按钮驱动程序的编写-Day15
c语言·stm32·单片机·嵌入式硬件·mcu·算法
小莞尔1 天前
【Proteus仿真】【51单片机】基于51单片机密码锁
stm32·单片机·嵌入式硬件·51单片机·proteus