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

相关推荐
追梦少年时7 小时前
STM32-Flash闪存
stm32·单片机·嵌入式硬件·51单片机
weixin_452600697 小时前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪
weixin_452600699 小时前
【青牛科技】14W 高保真音频放大电路——D2030
科技·单片机·嵌入式硬件·音视频·电动工具·智能电表
YuCaiH16 小时前
【STM32】USART串口数据包
笔记·stm32·单片机·嵌入式硬件
Kasen's experience18 小时前
STM32 GPIO 配置
stm32·单片机·嵌入式硬件
知行电子-18 小时前
Proteus中数码管动态扫描显示不全(已解决)
单片机·proteus·嵌入式
学习路上_write19 小时前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
非概念19 小时前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
jjjxxxhhh12321 小时前
FPGA,使用场景,相比于单片机的优势
单片机·嵌入式硬件·fpga开发
无敌最俊朗@21 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习