標題:
基于STM32103C8的DHT22溫濕度LCD12864顯示代碼
[打印本頁]
作者:
sunny118
時間:
2022-5-15 11:30
標題:
基于STM32103C8的DHT22溫濕度LCD12864顯示代碼
使用STM32F103C8T6最小系統(tǒng),搭載DHT22溫濕度傳感器,顯示屏用12864,測量數(shù)據(jù)和溫度計的顯示數(shù)值基本一致!
2.jpg
(152.09 KB, 下載次數(shù): 43)
下載附件
2022-5-15 11:28 上傳
溫濕度顯示
1.jpg
(31.61 KB, 下載次數(shù): 33)
下載附件
2022-5-15 11:28 上傳
對比溫度計顯示
單片機源程序如下:
#include "humiture.h"
#include "systick.h"
char RHData_H_Temp,RHData_L_Temp,TData_H_Temp,TData_L_Temp,CheckData_Temp; //溫濕度數(shù)據(jù)校驗前存放位置
char RHData_H,RHData_L,TData_H,TData_L,CheckData; //最終溫濕度數(shù)據(jù)存放處
char check_temp;
void Humitureport_outputinit(void)
{
GPIO_InitTypeDef GPIO_InitStructure_A; //聲明一個結(jié)構(gòu)體變量,用來初始化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; //聲明一個結(jié)構(gòu)體變量,用來初始化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微秒過后引腳還為高電平則為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; //超時則跳出for循環(huán)
Byte_Data<<=1;
Byte_Data|= temp;
}
return Byte_Data;
}
/*******************************************************************************
* 函 數(shù) 名 : HumitureRead
* 函數(shù)功能 : 溫濕度數(shù)據(jù)讀取
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void HumitureRead(void)
{
Humitureport_outputinit(); //端口配置為輸出模式
GPIO_ResetBits(GPIOA,GPIO_Pin_12); //主機拉低18ms
delay_ms(1);
GPIO_SetBits(GPIOA,GPIO_Pin_12); //主機由上拉電阻拉高延時30us
delay_us(30);
Humitureport_inputinit(); //主機設(shè)為輸入模式
if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)) //判斷DHT22是否有響應(yīng)信號輸出
{
// FLAG=2;
// while((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判斷DHT22的80us響應(yīng)信號是否結(jié)束
// FLAG=2;
// while((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判斷DHT22是否發(fā)出80us高電平,如果是進入數(shù)據(jù)接受狀態(tài)
//FLAG=2;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判斷DHT22的80us響應(yīng)信號是否結(jié)束
//FLAG=2;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判斷DHT22是否發(fā)出80us高電平,如果是進入數(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); //主機拉高總線
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ù)輸出
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Humitureoutput(void)
{
HumitureRead();
HumitureData[0] = RHData_H;
HumitureData[1] = RHData_L;
HumitureData[2] = TData_H;
HumitureData[3] = TData_L;
HumitureData[4] = CheckData;
}
復(fù)制代碼
#include "public.h" //公共函數(shù)頭文件
/****************************************************************************
* Function Name : main
* Description : Main program.
* Input : None
* Output : None
* Return : None
****************************************************************************/
char HumitureData[5] = {0}; //存放溫濕度數(shù)據(jù)
int main()
{
SystemInit();
RCC_HSE_Configuration(); //自定義系統(tǒng)時間(可以修改時鐘)
lcd_init(); //lcd初始化
display_word(); //顯示”卡號“漢字
while(1)
{
Humitureoutput();
Humiture_display();
delay_ms(1000); //Systick 計數(shù)最大值為0xFFFFFF
delay_ms(1000);
}
}
復(fù)制代碼
Keil代碼下載:
代碼.7z
(202.92 KB, 下載次數(shù): 96)
2022-5-15 20:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
aishanjiang
時間:
2022-6-10 17:06
這個代碼咋不好使
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1