标题:
基于STM32103C8的DHT22温湿度LCD12864显示代码
[打印本页]
作者:
sunny118
时间:
2022-5-15 11:30
标题:
基于STM32103C8的DHT22温湿度LCD12864显示代码
使用STM32F103C8T6最小系统,搭载DHT22温湿度传感器,显示屏用12864,测量数据和温度计的显示数值基本一致!
2.jpg
(152.09 KB, 下载次数: 43)
下载附件
2022-5-15 11:28 上传
温湿度显示
1.jpg
(31.61 KB, 下载次数: 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; //温湿度数据校验前存放位置
char RHData_H,RHData_L,TData_H,TData_L,CheckData; //最终温湿度数据存放处
char check_temp;
void Humitureport_outputinit(void)
{
GPIO_InitTypeDef GPIO_InitStructure_A; //声明一个结构体变量,用来初始化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; //选择你要设置的IO口
GPIO_InitStructure_A.GPIO_Mode = GPIO_Mode_Out_PP; //设置推挽输出模式
GPIO_InitStructure_A.GPIO_Speed = GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(GPIOA,&GPIO_InitStructure_A); //init GPIOA port by GPIO_InitStructure structure
}
void Humitureport_inputinit(void)
{
GPIO_InitTypeDef GPIO_InitStructure_A; //声明一个结构体变量,用来初始化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; //选择你要设置的IO口
GPIO_InitStructure_A.GPIO_Mode = GPIO_Mode_IPU; //设置为上拉输入模式
GPIO_InitStructure_A.GPIO_Speed = GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(GPIOA,&GPIO_InitStructure_A); //init GPIOA port by GPIO_InitStructure structure
}
char Bit_Select(void)
{
uchar i,temp;
uchar Byte_Data = 0; //存放每字节温湿度的数据
// Byte_Data = 0;
// Humitureport_inputinit();
for(i=0;i<8;i++)
{
//FLAG=2;
//while((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判断数据位是0还是1
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判断数据位是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循环
Byte_Data<<=1;
Byte_Data|= temp;
}
return Byte_Data;
}
/*******************************************************************************
* 函 数 名 : HumitureRead
* 函数功能 : 温湿度数据读取
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
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(); //主机设为输入模式
if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)) //判断DHT22是否有响应信号输出
{
// FLAG=2;
// while((!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判断DHT22的80us响应信号是否结束
// FLAG=2;
// while((GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12))&&FLAG++); //判断DHT22是否发出80us高电平,如果是进入数据接受状态
//FLAG=2;
while(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判断DHT22的80us响应信号是否结束
//FLAG=2;
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_12)); //判断DHT22是否发出80us高电平,如果是进入数据接受状态
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;
}
}
}
/*******************************************************************************
* 函 数 名 : Humitureoutput
* 函数功能 : 温湿度数据输出
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Humitureoutput(void)
{
HumitureRead();
HumitureData[0] = RHData_H;
HumitureData[1] = RHData_L;
HumitureData[2] = TData_H;
HumitureData[3] = TData_L;
HumitureData[4] = CheckData;
}
复制代码
#include "public.h" //公共函数头文件
/****************************************************************************
* Function Name : main
* Description : Main program.
* Input : None
* Output : None
* Return : None
****************************************************************************/
char HumitureData[5] = {0}; //存放温湿度数据
int main()
{
SystemInit();
RCC_HSE_Configuration(); //自定义系统时间(可以修改时钟)
lcd_init(); //lcd初始化
display_word(); //显示”卡号“汉字
while(1)
{
Humitureoutput();
Humiture_display();
delay_ms(1000); //Systick 计数最大值为0xFFFFFF
delay_ms(1000);
}
}
复制代码
Keil代码下载:
代码.7z
(202.92 KB, 下载次数: 96)
2022-5-15 20:10 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
aishanjiang
时间:
2022-6-10 17:06
这个代码咋不好使
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1