Thông báo

Collapse
No announcement yet.

Xin giúp về code đọc Nhiệt và ẩm độ DHT11.

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xin giúp về code đọc Nhiệt và ẩm độ DHT11.

    Mình đang viết code cho 89C52 để đọc Nhiệt độ và ẩm độ của DHT11, do mới chuyển từ code ASM sang keil C nên chưa có kinh nghiệm.
    Phần cứng như sau:
    P0 nối với 7 đoạn led.
    P2.0,P2.1,P2.2,P2.3 điều khiển nguồn 4 led.
    P2.5 nối chân data của DHT11.

    Mình làm hoài mà chương trình chỉ trả về lỗi 1, nghĩa là DHT không chịu nói chuyện với mình.
    Kết nối tốt, vì cùng một mạch, nạp code ASM chạy OK, còn code Keil C thì không chạy.

    Xin các bác Pro chỉ giúp mình, không biết có phải hàm delay không đúng, vì mình lấy trong hướng dẫn của trang BanLinhKien.
    và không biết có lỗi nào nữa không mà không đọc được giá trị. Thanks!!

    Code Keil C như sau:

    #include <REGX52.H>

    #define bat 1
    #define tat 0
    //dung trong hien thi
    #define led0 P2_3
    #define led1 P2_2
    #define led2 P2_1
    #define led3 P2_0

    sbit Dht_Out=P2^5;
    unsigned int buffer[5]={0,0,0,0,0};
    unsigned char nhiet=0,am=0,dem0=99,loi=0;

    char ma7doan[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
    char ma7doan_n[ ]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x8 2};

    void tre_ms(unsigned int x)
    {
    unsigned int i,j;
    for(i=0;i<=x;i++)
    {
    for(j=0;j<=125;j++);
    }
    }

    void tre_us(unsigned int x)
    { x=x/8;
    while(x--);
    }

    void Hien_Thi(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4)
    {

    led0=bat;
    P0=ma7doan[x4];
    tre_us(200);
    led0=tat;
    led1=bat;
    P0=ma7doan_n[x3];
    tre_us(200);
    led1=tat;
    led2=bat;
    P0=ma7doan[x2];
    tre_us(200);
    led2=tat;
    led3=bat;
    P0=ma7doan[x1];
    tre_us(200);
    led3=tat;
    }


    //========doc DHT11=======
    bit Doc_Dht(void)
    { unsigned char i,ii;
    unsigned int checksum;
    Dht_Out=1;
    tre_us(60);
    Dht_Out=0;
    tre_ms(45);//it nhat 18ms
    Dht_Out=1;
    tre_us(85);
    if ((Dht_Out)) {loi=1;return 0;}
    else while(!(Dht_Out));//doi data len 1
    tre_us(60);
    if(!(Dht_Out)){loi=2;return 0;}
    else while((Dht_Out));//doi data ve 0
    //bat dau doc
    for (i=0;i<5;i++)
    { for(ii=0;ii<8;ii++)
    { while(!(Dht_Out));//doi data len 1
    tre_us(50);
    if((Dht_Out))
    {buffer[i]|=(1<<(7-ii));
    while((Dht_Out)); //doi data ve 0
    }

    }
    }
    //tinh check sum
    checksum=buffer[0]+buffer[1]+buffer[2]+buffer[3];
    if ((checksum)!=buffer[4]) {loi=3;return 0;}
    else
    {
    return 1;
    }
    }

    //chuong trinh chinh

    void main(void)

    { while(1)
    { dem0++;
    if ((dem0)==100)
    { dem0=0;
    if((Doc_Dht()))
    {
    nhiet=buffer[0];
    am=buffer[2];
    }
    else am=loi;
    }
    Hien_Thi(nhiet/10,nhiet%10,am/10,am%10);
    }
    }

Về tác giả

Collapse

antanmobile Tìm hiểu thêm về antanmobile

Bài viết mới nhất

Collapse

  • bqviet
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi bqviet
    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
    06-12-2025, 17:17
  • nguyendinhvan
    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
    bởi nguyendinhvan
    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
    05-12-2025, 19:59
  • afrendly
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi afrendly
    Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
    04-12-2025, 01:27
  • nick22
    Trả lời cho Máy điện châm ?
    bởi nick22
    Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
    01-12-2025, 13:23
Đang tải...
X