|
溫濕度檢測(cè)DHT22+12864顯示
單片機(jī)源程序如下:
- #include "humiture.h"
- #include "systick.h"
- char RHData_H_Temp,RHData_L_Temp,TData_H_Temp,TData_L_Temp,CheckData_Temp; //溫濕度數(shù)據(jù)校驗(yàn)前存放位置
- char RHData_H,RHData_L,TData_H,TData_L,CheckData; //最終溫濕度數(shù)據(jù)存放處
- char check_temp;
- void Humitureport_outputinit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure_A; //聲明一個(gè)結(jié)構(gòu)體變量,用來(lái)初始化GPIO_A ; A PORT AS OUTPUT
-
- //SystemInit(); //system CLK initial
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //enable APB2 external clock
- /* 配置GPIO_A的模式和IO口 */
- GPIO_InitStructure_A.GPIO_Pin = Humiture_Port; //選擇你要設(shè)置的IO口
- GPIO_InitStructure_A.GPIO_Mode = GPIO_Mode_Out_PP; //設(shè)置推挽輸出模式
- GPIO_InitStructure_A.GPIO_Speed = GPIO_Speed_50MHz; //設(shè)置傳輸速率
- GPIO_Init(GPIOA,&GPIO_InitStructure_A); //init GPIOA port by GPIO_InitStructure structure
-
- }
- void Humitureport_inputinit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure_A; //聲明一個(gè)結(jié)構(gòu)體變量,用來(lái)初始化GPIO_A ; A PORT AS OUTPUT
- //SystemInit(); //system CLK initial
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //enable APB2 external clock
- /* 配置GPIO_A的模式和IO口 */
- GPIO_InitStructure_A.GPIO_Pin = Humiture_Port; //選擇你要設(shè)置的IO口
- GPIO_InitStructure_A.GPIO_Mode = GPIO_Mode_IPU; //設(shè)置為上拉輸入模式
- GPIO_InitStructure_A.GPIO_Speed = GPIO_Speed_50MHz; //設(shè)置傳輸速率
- GPIO_Init(GPIOA,&GPIO_InitStructure_A); //init GPIOA port by GPIO_InitStructure structure
-
- }
- char Bit_Select(void)
- {
-
- uchar i,temp;
- uchar Byte_Data = 0; //存放每字節(jié)溫濕度的數(shù)據(jù)
- // Byte_Data = 0;
- // Humitureport_inputinit();
- for(i=0;i<8;i++)
- {
- //FLAG=2;
- //while((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判斷數(shù)據(jù)位是0還是1
- while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判斷數(shù)據(jù)位是0還是1
- delay_us(30); //如果30微秒過(guò)后引腳還為高電平則為1
- if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))
- temp = 1;
- else
- temp = 0;
- //FLAG=2;
- while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12));
-
- // if(FLAG == 1)break; //超時(shí)則跳出for循環(huán)
-
- Byte_Data<<=1;
- Byte_Data|= temp;
- }
- return Byte_Data;
- }
-
- /*******************************************************************************
- * 函 數(shù) 名 : HumitureRead
- * 函數(shù)功能 : 溫濕度數(shù)據(jù)讀取
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
-
- void HumitureRead(void)
- {
- Humitureport_outputinit(); //端口配置為輸出模式
- GPIO_ResetBits(GPIOA,GPIO_Pin_12); //主機(jī)拉低18ms
- delay_ms(1);
- GPIO_SetBits(GPIOA,GPIO_Pin_12); //主機(jī)由上拉電阻拉高延時(shí)30us
- delay_us(30);
- Humitureport_inputinit(); //主機(jī)設(shè)為輸入模式
-
- if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)) //判斷DHT22是否有響應(yīng)信號(hào)輸出
- {
- // FLAG=2;
- // while((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判斷DHT22的80us響應(yīng)信號(hào)是否結(jié)束
- // FLAG=2;
- // while((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判斷DHT22是否發(fā)出80us高電平,如果是進(jìn)入數(shù)據(jù)接受狀態(tài)
- //FLAG=2;
- while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判斷DHT22的80us響應(yīng)信號(hào)是否結(jié)束
- //FLAG=2;
- while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判斷DHT22是否發(fā)出80us高電平,如果是進(jìn)入數(shù)據(jù)接受狀態(tài)
- RHData_H_Temp = Bit_Select();
- RHData_L_Temp = Bit_Select();
- TData_H_Temp = Bit_Select();
- TData_L_Temp = Bit_Select();
- CheckData_Temp = Bit_Select();
-
- // GPIO_ResetBits(GPIOA,GPIO_Pin_12); //DHT22拉低總線50us
- delay_us(50);
- Humitureport_outputinit(); //端口配置為輸出模式
- GPIO_SetBits(GPIOA,GPIO_Pin_12); //主機(jī)拉高總線
-
- check_temp = (RHData_H_Temp + RHData_L_Temp + TData_H_Temp + TData_L_Temp);
- if(check_temp == CheckData_Temp)
- {
- RHData_H = RHData_H_Temp;
- RHData_L = RHData_L_Temp;
- TData_H = TData_H_Temp;
- TData_L = TData_L_Temp;
- CheckData= CheckData_Temp;
- }
- }
-
- }
- /*******************************************************************************
- * 函 數(shù) 名 : Humitureoutput
- * 函數(shù)功能 : 溫濕度數(shù)據(jù)輸出
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void Humitureoutput(void)
- {
- HumitureRead();
- HumitureData[0] = RHData_H;
- HumitureData[1] = RHData_L;
- HumitureData[2] = TData_H;
- HumitureData[3] = TData_L;
- HumitureData[4] = CheckData;
- }
復(fù)制代碼
所有資料51hei提供下載:
基于STM32的DHT22驅(qū)動(dòng)程序.7z
(201.2 KB, 下載次數(shù): 116)
2019-4-19 17:36 上傳
點(diǎn)擊文件名下載附件
基于STM32的溫濕度檢測(cè) 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|