摩尔芯闻 > 行业新闻 > 半导体 > stm32f4xx系列的DHT11+HCSR04超声波+LCD1602

stm32f4xx系列的DHT11+HCSR04超声波+LCD1602

51hei ·2020-08-08 00:00·电子工程世界
阅读:1923

先说这次的实验:这次实验历经了差不多两个周,所获不少。最后实现了,还是有点小激动的,这同时也是我的课程设计。这次的设计主要是通过读取DHT11和HCSR04的数值,(Proteus的传感器貌似这两款好用一点)把读取的DHT11和HCSR04数值通过转化在lcd1602中显示出来,还有就是可以设置通过按键设置DHT11的温湿度阈值。

2020-06-21_093836.png
运行结果图:
2020-06-21_093852.png
按下K1,K2为加1设置,K3为减1设置
2020-06-21_093933.png
调整湿度最小值要为88%


湿度低于88%;警报响,红灯亮
2020-06-21_093949.png
在调DHT11使它正常,同时也跳一下超声波,看数据传输是否正常
2020-06-21_094009.png


2020-06-21_094118.png
当超过阈值时警报,红灯亮起,绿灯灭。下面是主要代码:

主要代码:

#include

#include "delay.h"

#include "DHT11.h"

#include "LCD1602.h"

#include "SOUN.h"

#include "KEY_ExitInit.h"

#include "LED_INIT.h"

#include "HCSR04.h"

unsigned char move = 0x82;

unsigned char RH,RL,TH,TL;

unsigned char h0 = 0X38,h1 = 0X36;

unsigned char t0 = 0X32,t1 = 0X38;

unsigned char DATA[4];//存温湿度数据

unsigned char Leg[4];//存超声波

unsigned char R[7] = "SD:";

unsigned char H[7] = "WD:";

unsigned char L[7] = "Legth:";

unsigned char r[2] = "%";

unsigned char h[2] = "C";

////////////////////////// 读DHT11数据及数据转换 ///////////////////////////////////////

int DHT11_ReadDATA(void)

{

int i;

unsigned char RHTH[5]={0};

DHT11_Start();//开始信号


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

{

RHTH[i] = DHT11_ReadByte();//循环读5次一字节  刚好40bit

}


if(RHTH[0]+RHTH[1]+RHTH[2]+RHTH[3] == RHTH[4])

{

RH = RHTH[0];

RL = RHTH[1];

TH = RHTH[2];

TL = RHTH[3];

DATA[0]='0'+(RH/10);//数据显示处理

DATA[1]='0'+(RH%10);

DATA[2]='0'+(TH/10);

DATA[3]='0'+(TH%10);

return 0;

}

else

{

return -1;

}

}

///////////////////////////// END  //////////////////////////////////////////



//////////////////////////// 获取超声波数据及转换////////////////////////

void HCSR04_data(void)

{

int        a = 0;

a = HCSR04_GetLength();

Leg[0]='0'+(a/10);

Leg[1]='0'+(a%10);

a = a*100;

Leg[2] = '0'+(a%100)/10;

Leg[3] = '0';  // '0'+(a%1000) 只显示到第三位,所以第四位写入0

}

/////////////////////////// END ///////////////////////////////////////////



//////////////////////////// 显示设定的阈值 ////////////////////////////////

void LCD_Config(void)

{

LCD_WRITE_StrDATA(1,1,"H:");

LCD_WRITE_char(1,3,h0);

LCD_WRITE_char(1,4,h1);

LCD_WRITE_StrDATA(2,1,"T:");

LCD_WRITE_char(2,3,t0);

LCD_WRITE_char(2,4,t1);

delay_ms(9);

}

///////////////////////////  END ///////////////////////////////////////



////////////////////////////  显示温湿度和超声波数值,及超过阈值后警报 ///////////////////////////////////

void LCD_Show(void)

{

while(1)

{

HCSR04_data();

delay_ms(30);


if(DHT11_ReadDATA() == 0)//读取温湿度成功

{

delay_ms(80);

LCD_WRITE_CMD( 0x0C );

DHT11_ReadDATA();        //接受数据

LCD_WRITE_StrDATA(1,1,R);

LCD_WRITE_StrDATA(2,1,H);

LCD_WRITE_char(1,4,DATA[0]);

LCD_WRITE_char(1,5,DATA[1]);

LCD_WRITE_StrDATA(1,6,r);

LCD_WRITE_StrDATA(1,9,L);

LCD_WRITE_char(2,4,DATA[2]);

LCD_WRITE_char(2,5,DATA[3]);

LCD_WRITE_char(2,6,0XDF);

LCD_WRITE_StrDATA(2,7,h);

LCD_WRITE_char(2,9,Leg[0]);

LCD_WRITE_char(2,10,Leg[1]);

LCD_WRITE_char(2,11,0xA5);

LCD_WRITE_char(2,12,Leg[2]);

LCD_WRITE_char(2,13,Leg[3]);

LCD_WRITE_StrDATA(2,14,"cm");

}

if(RH > ((h0-0x30)*10+(h1-0x30))|| TH < ((t0-0x30)*10+(t1-0x30)) )//正常

{

GPIO_SetBits(GPIOC,GPIO_Pin_7);

GPIO_ResetBits(GPIOC,GPIO_Pin_6);

GPIO_SetBits(GPIOB,GPIO_Pin_7);

}

if(RH <= ((h0-0x30)*10+(h1-0x30))|| TH >= ((t0-0x30)*10+(t1-0x30)) ) //警报

{

GPIO_SetBits(GPIOC,GPIO_Pin_6);

GPIO_ResetBits(GPIOC,GPIO_Pin_7);

GPIO_ResetBits(GPIOB,GPIO_Pin_7);

}

}


}

///////////////////////////   END  ///////////////////////////////////



/////////////////////// 中断服务函数 ,第一个按键切换显示+光标移动////////////////////////////////////////

void EXTI0_IRQHandler(void)

{

static int Flag = 1;

switch (Flag)

{

case 1:

LCD_WRITE_CMD( 0x01 );  //清楚显示

LCD_WRITE_CMD( 0x0f );  //开启光标、显示、闪烁

LCD_Config();             //切换显示

LCD_WRITE_CMD( move );

delay_ms(5);break;

case 2:

LCD_WRITE_CMD( 0x0f );

move ++;               //光标移动

LCD_WRITE_CMD( move );

delay_ms(5);break;

case 3:

LCD_WRITE_CMD( 0x0f );

move += 0x3f;

关键字: stm32f4xx DHT11 HCSR04超声波 LCD1602显示温湿度和超声波数值 编辑:什么鱼 引用地址: http://news.eeworld.com.cn/mcu/ic505641.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
分享到:
微信 新浪微博 QQ空间 LinkedIn

上一篇:OneNET平台下的STM32单片机MQTT协议数据传输源码

下一篇:stm32的gpio口的介绍

打开摩尔直播,更多新闻内容
半导体大咖直播分享高清观看
立即下载