娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

就是 雁凌家的模塊,測好了,弄了很久吧發現是他們家的杜邦線不行,以后買模塊要看杜邦線質量,還是買點好的

太耽誤開發周期了

在這里插入圖片描述

我們用的模塊是四線 轉三線的(dht11從四線的引腳變成三線的輸出)


線路連接

dht11 有三根線連出來,vcc,gnd,還有一個負責輸入和輸出

所以最后一根線可以連接到沒有被占用的gpio口就能獲得數據

連接到板子的 pb2上面

在這里插入圖片描述

程序編寫

喚醒dht11 ->檢測dht11是否存在 -> 讀取數據


喚醒dht11

輸出低電平 20ms 再輸出 高電平 30us


//復位DHT11

void DHT11_Rst(void)    

{                 

DHT11_IO_OUT(); //設置為輸出

DHT11_DQ_OUT=0; //拉低DQ

delay_ms(20);    //拉低至少18ms

DHT11_DQ_OUT=1; //DQ=1 

delay_us(30);      //主機拉高20~40us

}


檢測dht11

喚醒后dht11 會拉低電頻40,80us 拉低后會再次拉高40~80us


讀取數據

讀取一位數據

dht11 會拉低電頻 拉低后會再次拉高,此時就是當時數據位的值,我們進行檢測


u8 DHT11_Read_Byte(void)    

{        

u8 i,dat;

dat=0;

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

{

    dat<<=1; 

    dat|=DHT11_Read_Bit();

    }     

    return dat;

}


讀取一個byte數據

就是循環讀取八個位


u8 DHT11_Read_Data(u8 *temp,u8 *humi)    

{        

  u8 buf[5];

u8 i;

DHT11_Rst();

if(DHT11_Check()==0)

{

for(i=0;i<5;i++)//讀取40位數據

{

buf[i]=DHT11_Read_Byte();

}

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

{

*humi=buf[0];

*temp=buf[2];

}

}else return 1;

return 0;     

}


對所有數據進行拼裝,得到溫度值

從總共的40byte里拿出我們的數據,小數部分就不要了,好像是不支持


u8 DHT11_Read_Data(u8 *temp,u8 *humi)    

{        

  u8 buf[5];

u8 i;

DHT11_Rst();

if(DHT11_Check()==0)

{

for(i=0;i<5;i++)//讀取40位數據

{

buf[i]=DHT11_Read_Byte();

}

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

{

*humi=buf[0];

*temp=buf[2];

}

}else return 1;

return 0;     

}


所有代碼

dht11.c


#include "dht11.h"

#include "delay.h"

//  

//本程序只供學習使用,未經作者許可,不得用于其它任何用途

//ALIENTEK STM32F429開發板

//DHT11驅動代碼    

//正點原子@ALIENTEK

//技術論壇:www.openedv.com

//創建日期:2016/1/16

//版本:V1.0

//版權所有,盜版必究。

//Copyright(C) 廣州市星翼電子科技有限公司 2014-2024

//All rights reserved   

//


//復位DHT11

void DHT11_Rst(void)    

{                 

DHT11_IO_OUT(); //設置為輸出

DHT11_DQ_OUT=0; //拉低DQ

delay_ms(20);    //拉低至少18ms

DHT11_DQ_OUT=1; //DQ=1 

delay_us(30);      //主機拉高20~40us

}


//等待DHT11的回應

//返回1:未檢測到DHT11的存在

//返回0:存在

u8 DHT11_Check(void)    

{   

u8 retry=0;

DHT11_IO_IN();      //設置為輸入  

while (DHT11_DQ_IN&&retry<100)//DHT11會拉低40~80us

{

retry++;

delay_us(1);

};  

if(retry>=100)return 1;

else retry=0;

while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后會再次拉高40~80us

{

retry++;

delay_us(1);

};

if(retry>=100)return 1;     

return 0;

}


//從DHT11讀取一個位

//返回值:1/0

u8 DHT11_Read_Bit(void)  

{

  u8 retry=0;

while(DHT11_DQ_IN&&retry<100)//等待變為低電平

{

retry++;

delay_us(1);

}

retry=0;

while(!DHT11_DQ_IN&&retry<100)//等待變高電平

{

retry++;

delay_us(1);

}

delay_us(40);//等待40us

if(DHT11_DQ_IN)return 1;

else return 0;    

}


//從DHT11讀取一個字節

//返回值:讀到的數據

u8 DHT11_Read_Byte(void)    

{        

u8 i,dat;

dat=0;

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

{

    dat<<=1; 

    dat|=DHT11_Read_Bit();

    }     

    return dat;

}


//從DHT11讀取一次數據

//temp:溫度值(范圍:0~50°)

//humi:濕度值(范圍:20%~90%)

//返回值:0,正常;1,讀取失敗

u8 DHT11_Read_Data(u8 *temp,u8 *humi)    

{        

  u8 buf[5];

u8 i;

DHT11_Rst();

if(DHT11_Check()==0)

{

for(i=0;i<5;i++)//讀取40位數據

{

buf[i]=DHT11_Read_Byte();

}

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

{

*humi=buf[0];

*temp=buf[2];

}

}else return 1;

return 0;     

}


//初始化DHT11的IO口 DQ 同時檢測DHT11的存在

//返回1:不存在

//返回0:存在       

u8 DHT11_Init(void)

{

    GPIO_InitTypeDef GPIO_Initure;

    __HAL_RCC_GPIOB_CLK_ENABLE(); //開啟GPIOB時鐘

    GPIO_Initure.Pin=GPIO_PIN_2;           //PB12

    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽輸出

    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速

    HAL_GPIO_Init(GPIOB,&GPIO_Initure);     //初始化

 

    DHT11_Rst();

return DHT11_Check();

}


dht11.h


#ifndef __DS18B20_H

#define __DS18B20_H

#include "sys.h"


//IO方向設置

#define DHT11_IO_IN()  {GPIOB->MODER&=~(3<<(2*2));GPIOB->MODER|=0<<(2*2);} //PB12輸入模式

#define DHT11_IO_OUT() {GPIOB->MODER&=~(3<<(2*2));GPIOB->MODER|=1<<(2*2);} //PB12輸出模式

 

IO操作函數    

#define DHT11_DQ_OUT    PBout(2)//數據端口 PB12

#define DHT11_DQ_IN     PBin(2) //數據端口 PB12 

   

u8 DHT11_Init(void);//初始化DHT11

u8 DHT11_Read_Data(u8 *temp,u8 *humi);//讀取溫濕度

u8 DHT11_Read_Byte(void);//讀出一個字節

u8 DHT11_Read_Bit(void);//讀出一個位

u8 DHT11_Check(void);//檢測是否存在DHT11

void DHT11_Rst(void);//復位DHT11  

#endif


main.c


#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "led.h"

#include "key.h"

#include "lcd.h"

#include "sdram.h"

#include "dht11.h"

#include "pcf8574.h"



int main(void)

{

u8 t=0;      

u8 temperature;      

u8 humidity;    

    HAL_Init();                     //初始化HAL庫   

    Stm32_Clock_Init(360,25,2,8);   //設置時鐘,180Mhz

    delay_init(180);                //初始化延時函數

    uart_init(115200);              //初始化USART

    LED_Init();                     //初始化LED 

    KEY_Init();                     //初始化按鍵

    SDRAM_Init();                   //初始化SDRAM

    LCD_Init();                     //初始化LCD

    PCF8574_Init();                 //初始化PCF8574

    POINT_COLOR=RED;

LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7"); 

LCD_ShowString(30,70,200,16,16,"DHT11 TEST");

LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");

LCD_ShowString(30,110,200,16,16,"2016/1/16");

    PCF8574_ReadBit(BEEP_IO);       //由于DHT11和PCF8574的中斷引腳共用一個IO,

                                    //所以在初始化DHT11之前要先讀取一次PCF8574的任意一個IO,

                                    //使其釋放掉中斷引腳所占用的IO(PB12引腳),否則初始化DS18B20會出問題    

  while(DHT11_Init()) //DHT11初始化

{

LCD_ShowString(30,130,200,16,16,"DHT11 Error");

delay_ms(200);

LCD_Fill(30,130,239,130+16,WHITE);

  delay_ms(200);

}    

LCD_ShowString(30,130,200,16,16,"DHT11 OK");

POINT_COLOR=BLUE;//設置字體為藍色 

  LCD_ShowString(30,150,200,16,16,"Temp:  C");  

  LCD_ShowString(30,170,200,16,16,"Humi:  %");

while(1)

{         

  if(t%10==0)//每100ms讀取一次

{

            PCF8574_ReadBit(BEEP_IO);   //讀取一次PCF8574的任意一個IO,使其釋放掉PB12引腳,

                                        //否則讀取DHT11可能會出問題            

DHT11_Read_Data(&temperature,&humidity); //讀取溫濕度值     

LCD_ShowNum(30+40,150,temperature,2,16); //顯示溫度        

LCD_ShowNum(30+40,170,humidity,2,16); //顯示濕度    

}    

delay_ms(10);

t++;

if(t==20)

{

t=0;

LED0=!LED0;

}

}     

}

關鍵字:stm32F4  溫濕度傳感器模塊  DHT11 引用地址:stm32F4使用溫濕度傳感器模塊-->DHT11

上一篇:STM32F103C8T6+溫濕度傳感器DHT11實現溫濕度采集
下一篇:STM32驅動dht11溫濕度傳感器

推薦閱讀

新能源汽車目前最大的威脅,不是補貼退坡,而是連續不斷的起火事故。更令人擔憂的是,由于現在自燃、起火事件太多,大家都已經有些麻木。這還是新生事物成長中必然經歷的過程嗎?不。再拿新生事物做借口,就是自取滅亡。應當嚴厲批評、嚴厲懲罰涉事動力電池生產企業和新能源汽車企業。這種行為,在毀掉我們共同的事業。——編者按2018年,電動汽車全是有點...
趕在蘋果秋季發布會開始前,天風國際分析師郭明錤給出了最新的報告,報告中修正指出了新iPhone的反向充電功能將會被去掉。郭明錤在報告中提到,預測3款新iPhone在2019出貨量年衰退約5–10%,至6500–7000萬部。但因舊款iPhone降價后需求增加,相信2019年iPhone出貨量可達約1億8000萬部。除了反向充電功能外,新款iPhone也不支持Apple Pencil輸入。郭明錤...
楞次定律是以1834年物理學家埃米爾·楞次(Emil Lenz)的名字命名的,他在1834年提出了這一定律指出,在導體中,由變化的磁場感應的電流的方向是,由感應電流產生的磁場與初始變化的磁場相反。這是一個定性定律,它規定了感應電流的方向,但對其大小卻只字不提。Lenz定律解釋了電磁學中許多效應的方向,如電流變化在電感器或導線回路中感應的電壓方向,或...
9月10日,和林微納在互動平臺上表示,公司MEMS精微零部件訂單充足,產銷兩好;現階段公司仍以MEMS精微零部件及半導體測試探針為主要產品,部分研發項目已實現技術突破,但尚未實現規模營收。有投資者詢問,貴司光學攝像頭模組屏蔽罩,供應給哪些公司?目前出貨量如何?晶圓測試探針供應給哪些公司?出貨量有多大呢?和林微納回答稱,公司光學攝像頭TOF模組...

史海拾趣

問答坊 | AI 解惑

應用技巧/80C196MC的外設事務服務器及其應用

摘要:介紹利用專用于電機控制的16位單片機80C196MC的外設事務服務器PTS在變頻器中實現異步串行通信的方法。重點介紹PTS和普通中斷的差別及程序設計中應注意的問題,同時給出通用變頻器通信協議及程序框圖         關鍵 ...…

查看全部問答∨

基于嵌入式微處理器和FPGA的高精度測頻設計

1 引言   本課題來源于一個無紙記錄儀的項目。在該項目中要求無紙記錄儀中有一路通道將工業現場采集到的頻率信號測量并顯示出來。傳統的測頻系統大多采用單片機加邏輯器件構成,而這類測頻系統存在測頻速度慢、準確度低、可靠性差的缺點,故而使 ...…

查看全部問答∨

向各位大俠請教一個關于ARM映像文件的問題,懇請賜教

不太明白 映像文件 Memory map of the Image  中的  Idx列  代表什么意思,在映像文件中又起到了什么作用呢? 懇請高手指教!!…

查看全部問答∨

WINCE5.0開機無法識別TF卡,100分求高手分析解決問題,此貼問題解決再結貼!

請教高手: 我們機器現象如下: 生產1K GPS終端機,出貨都配有一張TF卡,有幾十臺機器開機后無法找到TF卡,但是重插撥一次卡就OK了。 開機后連續插撥,反復測試,測試10次偶爾會有一次找不到TF卡。 再把出現問題的機器反復開關機,測試能否檢測 ...…

查看全部問答∨

接著問串口通信的問題

樓主發表于:2009-09-29 19:46:55用的485串口通信,在單位測試已經通過,但是到現場安裝好了之后無論怎樣就是通信不正常了。首先想到通信線路問題,可是換了幾根線還是不行,這會是什么原因哦? http://topic.eeworld.net/u/20090929/19/e366763c- ...…

查看全部問答∨

急求一位資深wince講師和wince應用開發企業培訓大綱

我的客戶是做智能家居的公司 現需要進行wince相關的培訓 目前具體需求還沒有整理出來 基本情況是: 產品為智能家居方面 是在wince平臺做應用開發 現需要一位經驗非常豐富的講師進行短期的授課. 請大家幫幫忙,幫我推薦一下吧~ msn:echo-1010@ ...…

查看全部問答∨

各位大俠,幫幫忙…

各位大俠,幫幫忙,我手上有一個TI的LM3S8962的板子,不知道為什么跟電腦連接時,總出現“網絡電腦沒插好”!換了幾個網線了…還是沒有解決,下載了論壇里的例程也是這樣。可是我已經插了很多次了…弄了幾天,還是沒有解決問題…希望各位高手能幫幫 ...…

查看全部問答∨

51資料集錦

51資料集錦,有些附件太大了沒傳上來,等我權限高了再給大家吧 [ 本帖最后由 鑫海寶貝 于 2011-3-6 12:53 編輯 ]…

查看全部問答∨

示波器調試

問問各位大俠:用示波器去捕捉程序的波形圖,我想用串口線把電腦與示波器連接上在線仿真是有沒有軟件能支持啊 我的示波器是泰克TDS220…

查看全部問答∨

計數器用步進電機如何驅動

拆了一個電表,得到一顆只有兩根線的步進電機,萬分費解,不知這個電機如何驅動 如圖 電機只有兩根線,正反向通電,電機轉動約±30°角。去掉電壓后自動回位。   暫時在網上沒查到相關資料。只知道叫計數器步進電機。   懷疑是通 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 华池县| 屯留县| 平湖市| 钟祥市| 介休市| 荔波县| 道真| 金寨县| 麻栗坡县| 南阳市| 周至县| 安新县| 井冈山市| 吴堡县| 扎鲁特旗| 巩义市| 台湾省| 汝阳县| 内江市| 巴楚县| 唐海县| 濉溪县| 鹤峰县| 百色市| 息烽县| 六盘水市| 札达县| 定襄县| 抚顺市| 黄石市| 神农架林区| 宜都市| 资中县| 乐安县| 罗源县| 连江县| 北川| 永寿县| 桃源县| 大同市| 宣武区|