OpenEdv-开源电子网

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

求教DHT11数据显示在OLED上

[复制链接]

17

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2018-4-28
在线时间
58 小时
发表于 2018-7-25 20:44:15 | 显示全部楼层 |阅读模式
求教各位大佬,DHT11数据怎么显示在OLED上,我的思路是通过sprintf()函数将DHT11采集的温度,湿度数据转化为字符串输出,然后在用OLED显示字符串的函数进行显示,然而最后显示出来的数据是536876020.(OLED部分函数是正确的),基本操作代码以粘贴到下面。
//显示字符串
void OLED_ShowStr(u8 x,u8 y,u8 ch[],u8 TextSize)
{
        u8 c,i;
        u8 j=0;
        switch(TextSize)
        {
                case 1:
                {
                        while(ch[j] != '\0')
                        {
                                c = ch[j]-32;
                                if(x>126)
                                {
                                        x=0;
                                        y++;
                                }                       
                                OLED_SetPos(x,y);
                                for(i=0;i<6;i++)
                                {
                                        WriteDat(F6x8[c][i]);
                                }
                                x += 6;
                                j++;       
                        }
                }break;
                case 2:
                {
                        while(ch[j] != '\0')
                        {
                                c = ch[j]-32;
                                if(x>120)
                                {
                                        x=0;
                                        y++;
                                }
                                OLED_SetPos(x,y);
                                for(i=0;i<8;i++)
                                {
                                        WriteDat(F8x16[(16*c+i)]);
                                }
                                OLED_SetPos(x,y+1);
                                for(i=0;i<8;i++)
                                {
                                        WriteDat(F8x16[(16*c+i+8)]);
                                }
                                x +=8;
                                j++;
                        }
                }break;
        }
}


/************************************************DHT11模块代码*************************************************************/
#include "dht11.h"
#include "delay.h"


//初始化DHT11的IO,并返回相应信号
u8 DHT11_Init(void)
{
        GPIO_InitTypeDef                GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_11);
       
        DHT11_Rst();
        return DHT11_Check();
}


//复位DHT11
void DHT11_Rst(void)
{
        DHT11_IO_OUT();
        DHT11_DQ_OUT() = 0;
        delay_ms(20);
        DHT11_DQ_OUT() = 1;
        delay_us(30);
}

//检测DHT11输出是否存在响应
//返回值                0:存在
//                                1:不存在
u8 DHT11_Check(void)
{
        u8 retry = 0;
        DHT11_IO_IN();
        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);
        else        return(0);
}

//DHT11读一个位
//返回值0或1
u8 DHT11_Read_Bit(void)
{
        u8 retry=0;
        DHT11_IO_IN();
        while(DHT11_DQ_IN() &&retry<100)
        {
                retry++;
                delay_us(1);
        }
        retry=0;
        while(!DHT11_DQ_IN() && retry<100)
        {
                retry=0;
                delay_us(1);
        }
        delay_us(40);
        if(DHT11_DQ_IN())        return 1;
        else        return 0;
}

//DHT11读一个字节
//返回一个8位的数据
u8 DHT11_Read_Byte(void)
{
        u8 i;
        u8 dat=0;
        for(i=0;i<8;i++)
        {
                dat<<=1;
                dat |=DHT11_Read_Bit();
        }
        return dat;
}

//读40位数据进行校验

void DHT11_Read_Data(u8 *temp,u8 *humi)
{
        u8 buf[5],i;
        DHT11_Rst();
        if(DHT11_Check() == 0)
        {
                for(i=0;i<5;i++)
                {
                        buf[i] = DHT11_Read_Byte();
                }
                if(buf[0]+buf[1]+buf[2]+buf[3]==buf[4])
                {
                        *humi=buf[0];
                        *temp=buf[2];
                }
        }
}

/*********************************************************/
while(1)
{
                OLED_ShowStr(2,5,(u8*)"tempeture:",1);
                DHT11_Read_Data(&tempeture,&humity);
                sprintf(Strtemp,"%d",&tempeture);
                OLED_ShowStr(10,7,Strtemp,1);
                delay_ms(5000);

}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-26 13:46:47 | 显示全部楼层
OLED封装库里没有显示变量的函数是吗?你自己用转换函数啊,只能显示字符串是吧?itoa吗好像是
猪猪熊呢?
回复 支持 反对

使用道具 举报

17

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2018-4-28
在线时间
58 小时
 楼主| 发表于 2018-7-28 08:32:17 | 显示全部楼层
323232 发表于 2018-7-26 13:46
OLED封装库里没有显示变量的函数是吗?你自己用转换函数啊,只能显示字符串是吧?itoa吗好像是

已经可以了,硬件上的问题
回复 支持 反对

使用道具 举报

6

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-7-7
在线时间
13 小时
发表于 2018-7-28 09:39:02 | 显示全部楼层

分享解决GPRS模块SIM800c连接不到服务器问题方法
http://www.openedv.com/forum.php ... d=274554&extra=

GPRS模块AIR208
http://www.openedv.com/forum.php ... d=274542&extra=
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2018-7-13
在线时间
15 小时
发表于 2018-7-28 09:49:13 | 显示全部楼层
那就是现在楼主思路 代码都可以咯?
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2018-7-13
在线时间
15 小时
发表于 2018-7-28 09:49:33 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

17

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2018-4-28
在线时间
58 小时
 楼主| 发表于 2018-7-28 18:38:44 | 显示全部楼层

恩,已经解决
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2018-7-13
在线时间
15 小时
发表于 2018-7-28 20:21:15 | 显示全部楼层
请问一下知不知道哪里有 hal库写的各种模块学习例程资料 F1板子学习的我找不到
回复 支持 反对

使用道具 举报

17

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2018-4-28
在线时间
58 小时
 楼主| 发表于 2018-7-30 13:10:24 | 显示全部楼层
木一 发表于 2018-7-28 20:21
请问一下知不知道哪里有 hal库写的各种模块学习例程资料 F1板子学习的我找不到

hal库的我也不知道,我还没有接触过
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2018-7-9
在线时间
4 小时
发表于 2018-8-5 15:30:14 | 显示全部楼层
我运行了一下楼主的程序,显示Strtemp没有被定义,请问楼主的可以正常运行吗?
回复 支持 反对

使用道具 举报

17

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2018-4-28
在线时间
58 小时
 楼主| 发表于 2018-8-9 17:38:52 | 显示全部楼层
13610386127 发表于 2018-8-5 15:30
我运行了一下楼主的程序,显示Strtemp没有被定义,请问楼主的可以正常运行吗?

我主函数里有定义,没复制过来
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-8-9 18:04:38 | 显示全部楼层
木一 发表于 2018-7-28 20:21
请问一下知不知道哪里有 hal库写的各种模块学习例程资料 F1板子学习的我找不到

原子这边只有阿波罗板子接模块的时候支持HAL库
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2018-7-13
在线时间
15 小时
发表于 2018-8-10 11:47:13 | 显示全部楼层
什么意思 不太清楚 就是我在学习模块的时候发现一些资料好像看了还是不懂怎么做 想问问哪里可以找到多一些的学习资料
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-10-31
在线时间
5 小时
发表于 2018-10-31 22:12:40 | 显示全部楼层
木木fsf 发表于 2018-8-9 17:38
我主函数里有定义,没复制过来

老哥,那顺手复制过来,真心需要,,thank you
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-10-31
在线时间
5 小时
发表于 2018-10-31 22:13:54 | 显示全部楼层
945194475 发表于 2018-10-31 22:12
老哥,那顺手复制过来,真心需要,,thank you

其实我想要完整的程序,可以发我邮箱吗。945194475@qq.com  感激不尽。
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-11-27
在线时间
0 小时
发表于 2018-11-27 11:05:41 | 显示全部楼层
大佬,可以把程序发一下么?万分感谢!771881384@qq.com
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-2-7
在线时间
5 小时
发表于 2020-10-23 19:24:09 | 显示全部楼层
可以分享下代码吗?1500878767@qq.com
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-2-7
在线时间
5 小时
发表于 2020-10-24 15:16:52 | 显示全部楼层
Strtemp是怎么定义的?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 23:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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