//dht11.h
#ifndef __DHT_H__
#define __DHT_H__
#include "stm32f10x.h"
#include "systick.h"
#include "led.h"
#include "stdio.h"
#include "Usart1.h"
#define DHT11_GPIO_TYPE GPIOA
#define DHT11_GPIO_PIN GPIO_Pin_8
#define DHT11_RCC RCC_APB2Periph_GPIOA
#define DHT11_OUT_H GPIO_SetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)
#define DHT11_OUT_L GPIO_ResetBits(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)
#define DHT11_IN GPIO_ReadInputDataBit(DHT11_GPIO_TYPE, DHT11_GPIO_PIN)
void dht11_gpio_input(void);
void dht11_gpio_output(void);
u16 dht11_scan(void);
u16 dht11_read_bit(void);
u16 dht11_read_byte(void);
u16 dht11_read_data(u8 buffer[4]);
#endif
//dht11.c
#include "dht.h"
void dht11_gpio_input(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(DHT11_RCC, ENABLE);
GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);
}
void dht11_gpio_output(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(DHT11_RCC, ENABLE);
GPIO_InitStruct.GPIO_Pin = DHT11_GPIO_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(DHT11_GPIO_TYPE, &GPIO_InitStruct);
}
void dht11_reset(void)
{
dht11_gpio_output();//配置IO口输出模式
DHT11_OUT_L;//拉低IO口
Delay_us(19000);//延时18ms-30ms之间
DHT11_OUT_H;//拉高IO口
Delay_us(30);//延时30us,等待接收
dht11_gpio_input();//配置为输入模式
}
u16 dht11_scan(void)
{
return DHT11_IN;
}
u16 dht11_read_bit(void)
{
while (DHT11_IN == RESET);//等待低电平结束
Delay_us(40);//延时40us,如果是信号0,高电平信号在26-28us之间,如果是信号1,高电平信号在70us
if (DHT11_IN == SET)//如果还是高电平就是信号1
{
while (DHT11_IN == SET);//等待此信号结束
return 1;
}
else
{
return 0;
}
}
u16 dht11_read_byte(void)
{
u16 i;
u16 data = 0;
for (i = 0; i < 8; i++)
{
data <<= 1;
data |= dht11_read_bit();
}
return data;
}
u16 dht11_read_data(u8 buffer[5])
{
u16 i = 0;
u8 checksum;
dht11_reset();//发送起始信号
if (dht11_scan() == RESET)
{
//等待响应信号结束
while (dht11_scan() == RESET);
while (dht11_scan() == SET);
for (i = 0; i < 5; i++)
{
buffer[i] = dht11_read_byte();
}
while (dht11_scan() == RESET);//接收结束,拉高片选
dht11_gpio_output();
DHT11_OUT_H;
checksum = buffer[0] + buffer[1] + buffer[2] + buffer[3];//校验数据
if (checksum != buffer[4])
{
// checksum error
return 1;
}
}
return 0;
}
//main.c测试
if(dht11_read_data(buf)==0){
hum = buf[0] + buf[1] / 10.0;
temp = buf[2] + buf[3] / 10.0;
}
printf("湿度 == %.2f%%RHrn",hum);
printf("温度 == %.2f℃rn",temp);
Delay_ms(2000);
上一篇:STM32入门篇之DHT11温湿度传感器
下一篇:STM32外设驱动篇——DHT11温湿度传感器
推荐阅读
史海拾趣
为了适应全球化的市场趋势,茂达电子制定了全面的全球化战略。公司不仅加强了与国际市场的联系,还积极寻求与国际知名企业的合作机会。同时,茂达电子还加大了对海外市场的投入,通过设立海外分支机构、参加国际展会等方式,不断提升品牌知名度和市场影响力。
这五个故事只是Anpec(茂达电子)发展历程中的一部分,但它们充分展示了茂达电子在电子行业中的崛起和成就。作为一家具有创新精神和市场洞察力的企业,茂达电子将继续致力于为客户提供优质的产品和服务,推动电子行业的持续发展。
背景:随着全球对环保和可持续发展的重视,Galaxy Microelectronics也开始关注其生产过程中的环保问题。
发展:公司投入巨资建设绿色工厂,采用先进的环保技术和设备,减少生产过程中的能源消耗和废弃物排放。同时,Galaxy Microelectronics还积极推广环保理念,与供应商和客户共同构建绿色供应链。这些举措不仅提升了公司的社会形象,还为其在竞争激烈的市场中赢得了更多客户的青睐。
在品质保障的基础上,肯尼威开始积极拓展市场。公司不仅在台湾本地建立了完善的销售网络,还成功进军国际市场。通过与多家国际知名企业的合作,肯尼威的产品逐渐打入电子、机械、医疗器械等多个领域。同时,公司还积极参加国际展会,展示最新的技术和产品,吸引了众多海外客户的关注。
High Tech Chips Inc成立之初,便专注于研发高性能的AI芯片。在公司创始人李博士的带领下,团队突破了传统芯片设计的瓶颈,开发出了一款具有超低功耗和高效能比的AI加速器芯片。这款芯片迅速获得了市场的认可,被广泛应用于智能手机、智能家居和自动驾驶等领域。随着技术的不断迭代和产品的持续优化,High Tech Chips Inc逐渐在AI芯片市场占据了一席之地,并成为了行业内的技术领先者。
在照明领域,Cooper Industries同样展现出了强大的实力。1987年,公司收购了英国McGraw-Edison,并成立了“库柏照明”事业部,这一举措使库柏照明迅速成为世界上最大的商业、工业、道路和住宅照明装置的制造商之一。此后,公司不断在照明领域进行创新和突破,如在2007年成功收购以LED灯具著称的io Lighting灯具公司,进一步巩固了其在节能灯具市场的地位。这些努力使得库柏照明在全球范围内享有极高的声誉和市场份额。
为了进一步拓展全球业务,Cooper Industries在2007年收购了韩国防爆电力设备制造商Hyundai Explosion-Proof Electric Co.。这一收购使公司能够更好地进入韩国市场,并充分利用韩国在造船业以及国内能源与石化基础设施方面的优势。通过这次收购,Cooper Industries不仅提升了在韩国市场的竞争力,也为其在全球防爆电力设备市场的地位打下了坚实基础。这一举措再次展现了Cooper Industries在全球化战略中的远见卓识和果断行动。
这五个故事只是Cooper Industries发展历程中的一部分,但它们足以展现出公司在电子行业中的卓越地位和不断创新的精神。通过全球扩张、收购整合、技术创新和市场拓展等方式,Cooper Industries不断壮大自身实力,为行业的发展做出了积极贡献。
随着宽带在中国的普及。目前我国上网人数以超过一亿。宽带用户超过三千万。伴随而来的是互联网社会化时代的到来。人们对互联网的需求不再是单一地网上冲浪、查看新闻,而是提出了多样化的应用需求。现在存在 ...… 查看全部问答∨ |
|
高速电路设计/信号完整性的一些基本概念 1.信号完整性(Signal Integrity):就是指电路系统中信号的质量,如果在要求的时间内,信号能不失真地从源端传送到接收端,我们就称该信号是完整的。 2.传输线(Transmission Line):由两个具有一定长度的 ...… 查看全部问答∨ |
一切完好,在.NET下面也可以用System.Data.SqlServerce下面的提供的函数成功的对数据库进行操作.包括RDA和合并复制等. 但是我在想如果不用.Net而用MFC使用系统API如果实现对Sql server ce数据操作包括RDA和合并复制之类的.有不有达人相告.感激不尽.… 查看全部问答∨ |
还没有焊接完。两块大的芯片,一块是STC的52,一块是8255. 这块开发板主要是为在校学生学习微机原理做的,因为串口,定时器,中断51中都有,可以直接做实验,唯独8255没有。所以在这里我们加上了8255,并把8255的所有引脚的引出来了,并 ...… 查看全部问答∨ |
|