日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

温湿度(DHT11)+雨滴检测——LCD显示(TFT液晶)

發布時間:2024/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 温湿度(DHT11)+雨滴检测——LCD显示(TFT液晶) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

溫濕度(DHT11)+雨滴檢測——LCD顯示(TFT液晶)

  • 效果展示:
  • 一、硬件連接
  • 二、代碼
    • 1、DHT11
    • 2、雨滴傳感器
    • 3、LCD
    • 4、main.c
  • 三、完整工程
    • 鏈接:

效果展示:

視頻:

溫濕度采集(DHT11)+雨滴檢測——LCD顯示(TFT液晶)

一、硬件連接

溫濕度傳感器:

3.3V 供電DATA ——> PB12

雨滴傳感器:

3.3V 供電DATA ——> PA0

二、代碼

1、DHT11

/* dht11.c */#include "stm32f10x.h" #include "dht11.h" #include "delay.h"uint8_t dat[5]={0x00,0x00,0x00,0x00,0x00}; //存儲讀取的溫濕度信息 uint32_t sum=0; //存放校驗時的求和/**************************************** 設置PB12端口為輸出 *****************************************/ void STM_Out_DHT11_In(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出50MHzGPIO_Init(GPIOB,&GPIO_InitStructure);}/**************************************** 設置PB12端口為輸入 *****************************************/ void STM_In_DHT11_Out(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出50MHzGPIO_Init(GPIOB,&GPIO_InitStructure); }/**************************************** 函數名稱:void DHT_Read_Byte() 函數功能:對DHT的數據中的一個字節讀取函數 輸入參數:無 返回值:無 *****************************************/ uint8_t DHT_Read_Byte(void){uint8_t temp; //存放讀取到的位數據uint8_t ReadDat = 0;uint8_t i;uint8_t retry = 0; //防止死機for(i=0; i<8; i++){while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==0 && retry<100){ //等待DHT11輸出高電平delay_us(1);retry++;}retry = 0; //防止死機,清零delay_us(40); //延時30us,由于‘0’代碼高電平時間26~28us,'1'代碼高電平時間70us,延時30us可判斷出是1,還是0temp = 0; //先將寄存器清零if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 1) //延時30us之后如果還是高電平,證明為1代碼temp = 1; //將1存儲while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==1 && retry<100){ //等待信號被拉低,跳出delay_us(1);retry++; }retry = 0;ReadDat <<= 1; //數據左移1位,存放新得到的數據ReadDat |= temp; //新得到的數據放到最后1位}return ReadDat; }/********************************************* 函數名稱:unsigned char DHT_Read() 函數功能:讀取DHT11的溫濕度 輸入參數:無 返回值: flag--數據讀取、校驗成功標志GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) *********************************************/ uint8_t DHT_Read(void){uint8_t i;uint8_t retry = 0;STM_Out_DHT11_In(); //端口方向設置為輸出GPIO_ResetBits(GPIOB, GPIO_Pin_12); //輸出低電平delay_ms(18); //延時18ms,時序要求GPIO_SetBits(GPIOB, GPIO_Pin_12); //端口數據拉高delay_us(40); //延時40usSTM_In_DHT11_Out(); //方向設置為輸入delay_us(20); //延時20usif(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0){ //如果讀取到低電平,證明DHT11響應while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==0 && retry<100){ //等待變高電平delay_us(1);retry++; }retry = 0;while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==1 && retry<100){ //等待變低電平delay_us(1);retry++; }retry = 0;for(i=0; i<5; i++){ //循環5次將40位讀出dat[i] = DHT_Read_Byte(); //讀出1個字節}delay_us(50); //最后延時等待50us}sum = dat[0]+dat[1]+dat[2]+dat[3]; //前4個字節數據的和if(dat[4] == (u8)(sum)) //前4個數據和的末8位要和第5個數據相等,才算讀取正確return 1; //校驗正確,返回1elsereturn 0; //校驗錯誤,返回0 }

2、雨滴傳感器

/* water.c */ /* 1 有水 0 沒水 */#include "water.h"void WATER_Check_Init(void){ //設為輸入GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //輸入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure); }

3、LCD

完整工程:溫濕度+雨滴檢測——TFT液晶顯示.zip

4、main.c

#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "lcd.h" #include "dht11.h" #include "water.h"extern uint8_t dat[5];int main(void){delay_init(); //延時函數初始化 uart_init(9600); //串口初始化為9600LED_Init(); //初始化與LED連接的硬件接口LCD_Init();POINT_COLOR = RED; //畫筆顏色,可更改顏色while(1){if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0){ // 0:沒水 1:有水LCD_ShowString(30, 100, 200, 20, 16, "water security"); //沒水,安全 }else{LCD_ShowString(30, 100, 200, 20, 16, "water warning"); //有水,警告}if( DHT_Read() ){ //有溫度數據LCD_ShowString(30,60,200,10,16,"shidu:");LCD_ShowxNum(90,60,dat[0],2,16,0x80);LCD_ShowString(30,80,200,10,16,"wendu:");LCD_ShowxNum(90,80,dat[2],2,16,0x80);}} }

三、完整工程

文件都寫好,使用時可以直接移植

鏈接:

溫濕度+雨滴檢測——TFT液晶顯示.zip

總結

以上是生活随笔為你收集整理的温湿度(DHT11)+雨滴检测——LCD显示(TFT液晶)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。