OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5895|回复: 3

DHT11温湿度传感器,显示的值永远为104,初始化ok,应该是读数据出现问题?求解

[复制链接]

10

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-3-28
在线时间
0 小时
发表于 2015-7-5 17:25:43 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]DHT11代码和主函数代码如下 ,已经纠结了几天了,找不到原因,原子的原程序改的[/mw_shl_code] [mw_shl_code=c,true]DHT11函数[/mw_shl_code] [mw_shl_code=c,true][/mw_shl_code] [mw_shl_code=c,true]#include "dht11.h" #include "delay.h" void DHT11_Rst(void) { DHT11_IO_OUT(); //SET OUTPUT DHT11_DQ_OUT=0; delay_ms(30); DHT11_DQ_OUT=1; //DQ=1 delay_us(50); } u8 DHT11_Check(void) { u8 retry=0; DHT11_IO_IN();//SET INPUT while (DHT11_DQ_IN&&retry<100) { retry++; delay_us(1); }; if(retry>=100)return 1; else retry=0; while (!DHT11_DQ_IN&&retry<100) { retry++; delay_us(1); }; if(retry>=100)return 1; return 0; } u8 DHT11_Read_Bit(void) { u8 retry=0; while(DHT11_DQ_IN&&retry<100) { retry++; delay_us(1); } retry=0; while(!DHT11_DQ_IN&&retry<100) { retry++; delay_us(1); } delay_us(40); if(DHT11_DQ_IN)return 1; else return 0; } u8 DHT11_Read_Byte(void) { u8 i,dat; dat=0; for (i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit(); } return dat; } u8 DHT11_Read_Data(u8 *temp,u8 *humi) { u8 buf[5]; u8 i; DHT11_Rst(); if(DHT11_Check()==0) { for(i=0;i<5;i++) { buf=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }else return 1; return 0; } u8 DHT11_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_11); DHT11_Rst(); return DHT11_Check(); } [/mw_shl_code] [mw_shl_code=c,true][/mw_shl_code] [mw_shl_code=c,true]主函数[/mw_shl_code] [mw_shl_code=c,true][/mw_shl_code] [mw_shl_code=c,true]#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "12864.h" #include "usart.h"   #include "dht11.h"    int main(void)  {   u8 t=0;     u8 temperature;       u8 humidity;        delay_init();     NVIC_Configuration(); uart_init(9600);   LED_Init();   KEY_Init(); InitDis();   DisStr(1,1,"DHT11_测试");     while(DHT11_Init()) { DisStr(2,3,"DHT11 Error"); delay_ms(200);   delay_ms(200); }    DisStr(2,3,"DHT11 OK");  DisStr(3,1,"温度    C"); DisStr(4,1,"湿度    %"); while(1) {           if(t%10==0) {   DHT11_Read_Data(&temperature,&humidity);          DisInt(3,4,temperature); DisInt(4,4,humidity); }    printf("温度"); printf("%d\r\n",temperature); printf("湿度"); printf("%d\r\n",humidity); delay_ms(10); t++; if(t==20) { t=0; LED0=!LED0; } } } [/mw_shl_code] [mw_shl_code=c,true][/mw_shl_code]

我待ARM如初恋,ARM虐我千百遍!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-5 22:05:38 | 显示全部楼层
直接下载我们例程测试不行么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2015-3-28
在线时间
0 小时
 楼主| 发表于 2015-7-11 20:01:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我只是把你们的显示程序改成了12864显示  其他都没改
我待ARM如初恋,ARM虐我千百遍!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-11 22:50:55 | 显示全部楼层
回复【3楼】核弹技术哪家强:
---------------------------------
可以直接下载我们例程试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 05:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表