资源简介
STM32F030实现AM2302模块温湿度采集,stm32,stm8系列基本都支持,工作经验总结,根据实际情况稍微修改即可
代码片段和文件信息
#include “dht22.h“
#include “uart.h“
//存放采集数据
u8 DHT_Tem_H = 0; //温度高8位
u8 DHT_Tem_L = 0; //温度低8位
u8 DHT_Hum_H = 0; //湿度高8位
u8 DHT_Hum_L = 0; //湿度低8位
//请求信号
extern u8 DHT_askL_500us_cnt; //总线请求信号500us低电平间隔计数
extern u8 DHT_askL_500us_cnt_flag; //总线请求信号500us低电平间隔计数开始标记位
extern u8 DHT_askH_30us_cnt; //总线请求信号30us高电平间隔计数
extern u8 DHT_askH_30us_cnt_flag; //总线请求信号30us高电平间隔计数开始标记位
//应答信号
extern u8 DHT_ansL_80us_cnt; //总线应答信号80us低电平间隔计数
extern u8 DHT_ansL_80us_cnt_flag; //总线应答信号80us低电平间隔计数开始标记位
extern u8 DHT_ansH_80us_cnt; //总线应答信号80us高电平间隔计数
extern u8 DHT_ansH_80us_cnt_flag; //总线应答信号80us高电平间隔计数开始标记位
extern u8 DHT_data_send_flag; //应答信号结束,开始接收数据标记位
//高低电平判断
extern u8 DHT_BitGap_50us_cnt_flag; //数据位50us低电平间隔计数开始标记位
extern u8 DHT_BitGap_50us_cnt; //数据位50us低电平间隔计数
extern u8 DHT_BitH_cnt_flag; //高电平计数开始标记位
extern u8 DHT_BitH_cnt; //高电平计数
/*
*********************************************************************************************************
* 函数名: void DHT_delay_us(uint32_t value)
* 功能说明: 延时程序,(10*value)us延时
* 形参: uint32_t value
* 返回值: void
* 时间:
* 作者:
*********************************************************************************************************
*/
void DHT_delay_us(uint32_t value)
{
uint32_t i;
i = value * 8;
while(i--);
}
/*
*********************************************************************************************************
* 函数名: void DHT_ReadBit(void)
* 功能说明: 读取一个数据位,一个数据位由50us的低电平间隔和若各高电平组成,
* 数据位1 = 50us低电平 + 70us高电平
数据位0 = 50us低电平 + (26~28)us的高电平
* 形参: void
* 返回值: int bit_lever
* 时间:
* 作者:
*
*********************************************************************************************************
*/
int DHT_ReadBit(void)
{
u8 bit_lever = 0;
while(!GPIO_ReadInputDataBit(GPIOAGPIO_Pin_1))
{
DHT_BitGap_50us_cnt_flag = 1;
}
DHT_BitGap_50us_cnt_flag = 0;
if(DHT_BitGap_50us_cnt >=5) //50us低电平间隙
{
while(GPIO_ReadInputDataBit(GPIOAGPIO_Pin_1))
{
DHT_BitH_cnt_flag = 1;
}
DHT_BitH_cnt_flag = 0;
if(DHT_BitH_cnt <= 3) //26-28us的高电平 表示 0
{
bit_lever = 0;
DHT_BitH_cnt = 0;
}
else if(DHT_BitH_cnt >= 5) //70us的高电平表示1
{
bit_lever = 1;
DHT_BitH_cnt_flag = 0;
DHT_BitH_cnt = 0;
}
DHT_BitGap_50us_cnt = 0;
}
return bit_lever;
}
/*
*********************************************************************************************************
* 函数名: void DHT_ReadByte(void)
* 功能说明: 读取一个字节,将读取的数据位,依次位移存放
* 形参: void
* 返回值: int data
* 时间:
* 作者:
*
*********************************************************************************************************
*/
int DHT_ReadByte(void)
{
u8 data = 0;
u8 i;
u8 Bit_temp = 0;
for(i=0; i<8; i++)
{
Bit_temp = DHT_ReadBit();
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-12-01 16:19 STM32F030实现AM2302\
文件 8469 2017-12-01 16:22 STM32F030实现AM2302\dht22.c
文件 417 2017-10-30 10:13 STM32F030实现AM2302\dht22.h
文件 114 2017-12-01 16:20 STM32F030实现AM2302\readme.txt
- 上一篇:XQUERY的好
- 下一篇:mos-pesq.zip
评论
共有 条评论