php页面显示DHT11,求教DHT11数据显示在OLED上

求教DHT11数据显示在OLED上

[复制链接]

2a0fb537e2975b3e6b702942b53e1d04.gif

求教各位大佬,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);

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值