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

相关推荐
QQ19284999061 小时前
基于STM32无刷直流电机调速蓝牙APP无线监测控制系统
stm32·嵌入式硬件·mongodb
OH五星上将2 小时前
OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)
linux·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·系统移植
好家伙VCC5 小时前
STM32与51单片机的区别:是否应该直接学习STM32?
stm32·学习·51单片机
szpc16215 小时前
28V_1MHZ电子烟,无线鼠标,医疗器械等专用恒频升压转换器超小体积封装
单片机·嵌入式硬件·计算机外设
luckyluckypolar7 小时前
STM32——SPI
stm32·单片机·嵌入式硬件·物联网
极客小张8 小时前
基于STM32MP157与OpenCV的嵌入式Linux人脸识别系统开发设计流程
linux·stm32·单片机·opencv·物联网
OH五星上将9 小时前
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【扩展组件】上
linux·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·liteos-a·鸿蒙内核
浅陌pa9 小时前
24:RTC实时时钟
c语言·stm32·单片机·嵌入式硬件
敲上瘾9 小时前
多态的使用和原理(c++详解)
开发语言·数据结构·c++·单片机·aigc·多态·模拟
小熊在忙fpga9 小时前
STM32如何修改外部晶振频率和主频
stm32·单片机·嵌入式硬件