找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2469|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机接受不到温度传感器的数据是怎么回事

[复制链接]
跳转到指定楼层
楼主
ID:637082 发表于 2021-6-5 18:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机接受不到温度传感器的数据是怎么回事
  • #include<reg52.h>
  • #include<intrins.h>
  • #define uchar unsigned char
  • #define uint unsigned int
  • sbit Data=P2^0;
  • uchar rec_dat[9]="12369566";
  • extern void InitLcd1602();
  • extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  • void DHT11_delay_us(uchar n)
  • {
  •     while(--n);
  • }
  • void DHT11_delay_ms(uint z)
  • {
  •    uint i,j;
  •    for(i=z;i>0;i--)
  •       for(j=110;j>0;j--);
  • }
  • void DHT11_start()
  • {
  •    Data=1;
  •    DHT11_delay_us(2);
  •    Data=0;
  •    DHT11_delay_ms(20);
  •    Data=1;
  •    DHT11_delay_us(30);
  • }
  • uchar DHT11_rec_byte()
  • {
  •    uchar i,dat=0;
  •   for(i=0;i<8;i++)
  •    {
  •       while(!Data);
  •       DHT11_delay_us(8);
  •       dat<<=1;
  •       if(Data==1)
  •          dat+=1;
  •       while(Data);
  •     }
  •     return dat;
  • }
  • void DHT11_receive()
  • {
  •     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  •     DHT11_start();
  •     if(Data==0)
  •     {
  •         while(Data==0);   //等待数据
  •         DHT11_delay_us(40);  //延时80us
  •         R_H=DHT11_rec_byte();    //湿度高位
  •         R_L=DHT11_rec_byte();    //湿度低位
  •         T_H=DHT11_rec_byte();    //温度高位
  •         T_L=DHT11_rec_byte();    //温度低位
  •         revise=DHT11_rec_byte(); //获取数据
  •         DHT11_delay_us(25);    //延时
  •         if((R_H+R_L+T_H+T_L)==revise)      //校验
  •         {
  •             RH=R_H;
  •             RL=R_L;
  •             TH=T_H;
  •             TL=T_L;
  •         }
  •         /*数据分解*/
  •         rec_dat[0]='0'+(RH/10);
  •         rec_dat[1]='0'+(RH%10);
  •         rec_dat[2]='R';
  •         rec_dat[3]='H';
  •         rec_dat[4]=' ';
  •         rec_dat[5]=' ';
  •         rec_dat[6]='0'+(TH/10);
  •         rec_dat[7]='0'+(TH%10);
  •         rec_dat[8]='C';
  •     }
  • }
  • void main()
  • {
  •    InitLcd1602();   //1602初始化
  •    while(1)
  •    {
  •        DHT11_delay_ms(1500);    //DHT11初始1S延时
  •        DHT11_receive();
  •                         LcdShowStr(0,0,rec_dat);  //显示温湿度
  •    }
  • }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:748788 发表于 2021-6-7 11:03 | 只看该作者
一般都是延时不准的问题
回复

使用道具 举报

板凳
ID:861234 发表于 2021-6-7 11:17 | 只看该作者
再仔细阅读PDF
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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