Thông báo

Collapse
No announcement yet.

Sht75

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

  • Sht75

    Các bạn,ace cho em hỏi với ạ.em có chương trình này. mà nó cứ bảo lỗi ở dòng 48. ace xem rồi sửa hộ em với ạ. em sửa mãi không dc. đây là code em lấy trên mạng. chỉ dịch ra thôi mà n báo lỗi. em muốn dựa vào cái code này để viết cho SHT75 mà nó báo lỗi như vậy
    #include <REGX52.H>
    #include <string.h>
    #include <stdio.h>

    sbit KEY_0 = P1^0;
    sbit KEY_1 = P1^1;
    sbit KEY_2 = P1^2;
    sbit KEY_3 = P1^3;
    sbit KEY_4 = P1^4;
    sbit KEY_5 = P1^5;
    sbit KEY_6 = P1^6;
    sbit KEY_7 = P1^7;
    sbit EN_75LBC184 = P3^5;
    // */ lúc đầu báo lỗi ở đoạn này. sau khi xóa đi thì lại báo lỗi ở dòng 48.

    typedef struct
    {
    unsigned int i;
    float f;
    } value;


    enum {TEMP,HUMI};

    sbit SHT15_SDA = P2^0; //SHT15_SHT75
    sbit SHT15_SCK = P2^1; //SHT15_SHT75

    #define noACK 0
    #define ACK 1

    #define STATUS_REG_W 0x06 //000 0011 0
    #define STATUS_REG_R 0x07 //000 0011 1
    #define MEASURE_TEMP 0x03 //000 0001 1
    #define MEASURE_HUMI 0x05 //000 0010 1
    #define RESET 0x1e //000 1111 0


    unsigned char SHT15_Write_Byte(unsigned char value)
    {
    unsigned char i,error=0;
    for (i=0x80;i>0;i/=2)
    {
    if (i & value)
    SHT15_SDA=1;
    else
    SHT15_SDA=0;
    SHT15_SCK=1;
    _nop_();
    _nop_();
    _nop_();
    SHT15_SCK=0;
    }
    SHT15_SDA=1;
    SHT15_SCK=1;
    error=SHT15_SDA;
    SHT15_SCK=0;
    return error;
    }


    unsigned char SHT15_Read_Byte(unsigned char ack)
    {
    unsigned char i,val=0;
    SHT15_SDA=1;
    for (i=0x80;i>0;i/=2)
    {
    SHT15_SCK=1;
    if (SHT15_SDA)
    val=(val | i);
    SHT15_SCK=0;
    }
    SHT15_SDA=!ack;
    SHT15_SCK=1;
    _nop_(); // nó báo lỗi ở đây ạ.
    _nop_();
    _nop_();
    SHT15_SCK=0;
    SHT15_SDA=1;
    return val;
    }

    void SHT15_Trans_Start(void)
    {
    SHT15_SDA=1;
    SHT15_SCK=0;
    _nop_();
    SHT15_SCK=1;
    _nop_();
    SHT15_SDA=0;
    _nop_();
    SHT15_SCK=0;
    _nop_();
    _nop_();
    _nop_();
    SHT15_SCK=1;
    _nop_();
    SHT15_SDA=1;
    _nop_();
    SHT15_SCK=0;
    }


    void SHT15_Connection_Reset(void)
    {
    unsigned char i;
    SHT15_SDA=1;
    SHT15_SCK=0;
    for(i=0;i<9;i++)
    {
    SHT15_SCK=1;
    SHT15_SCK=0;
    }
    SHT15_Trans_Start();
    }


    unsigned char s_softreset(void)
    {
    unsigned char error=0;
    SHT15_Connection_Reset(); //ͨÐÅÁ¬½ÓÇ¿ÖÆ¸´Î»
    error+=SHT15_Write_Byte(RESET); //·¢ËÍÈí¸´Î»ÃüÁî
    return error; //error=1 ±íʾ´«¸ÐÆ÷ûÓÐÏìÓ¦£¨Ïß·¹ÊÕÏ£©
    }


    //unsigned char SHT15_Read_Status_Reg(unsigned char *p_value, unsigned char *p_checksum)
    //{
    // unsigned char error=0;
    // SHT15_Trans_Start();
    // error=SHT15_Write_Byte(STATUS_REG_R);
    // *p_value=SHT15_Read_Byte(ACK);
    // *p_checksum=SHT15_Read_Byte(noACK);
    // return error; //error=1 ±íʾ´«¸ÐÆ÷ûÓÐÏìÓ¦£¨Ïß·¹ÊÕÏ£©
    //}


    //unsigned char SHT15_Write_Status_Reg(unsigned char *p_value)
    //{
    // unsigned char error=0;
    // SHT15_Trans_Start();
    // error+=SHT15_Write_Byte(STATUS_REG_W);
    // error+=SHT15_Write_Byte(*p_value);
    // return error; //error=1 ±íʾ´«¸ÐÆ÷ûÓÐÏìÓ¦£¨Ïß·¹ÊÕÏ£©
    //}


    unsigned char SHT15_Measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
    {
    unsigned error=0;
    unsigned int i;

    SHT15_Trans_Start();
    switch(mode)
    {
    case TEMP : error+=SHT15_Write_Byte(MEASURE_TEMP);
    break;
    case HUMI : error+=SHT15_Write_Byte(MEASURE_HUMI);
    break;
    default : break;
    }
    for (i=0;i<65535;i++)//µÈ´ý²âÁ¿½áÊø£¬²¢¼ÓÈ볬ʱ´íÎó¼ì²â£¨·ÀËÀ£©
    {
    if(SHT15_SDA == 0)
    {
    break;
    }
    }
    if(SHT15_SDA)
    {
    error+=1;
    }
    *(p_value) = SHT15_Read_Byte(ACK);
    *(p_value+1) = SHT15_Read_Byte(ACK);
    *p_checksum = SHT15_Read_Byte(noACK);
    return error;
    }


    /*
    void Init_Uart()
    {
    SCON = 0x40; //´®Ðз½Ê½1£¬²»ÔÊÐí´®ÐнÓÊÕ
    TMOD = 0x20; //¶¨Ê±Æ÷T1,·½Ê½2
    //**** ¸ù¾Ýµ¥Æ¬»úʱÖÓģʽÐÞ¸ÄÏÂÃæµÄ´úÂë ****
    // TH1 = 0xFA; //6ʱÖÓģʽ
    TH1 = 0xFD; //12ʱÖÓģʽ
    //******************************************
    TR1 = 1; //Æô¶¯¶¨Ê±Æ÷
    TI = 1; //·¢Ë͵ÚÒ»¸ö×Ö·û
    }
    */

    void SHT15_Calculate(float *p_humidity ,float *p_temperature)
    {
    const float C1=-4.0; // for 12 Bit
    const float C2=+0.0405; // for 12 Bit
    const float C3=-0.0000028; // for 12 Bit
    const float T1=+0.01; // for 14 Bit @ 5V
    const float T2=+0.00008; // for 14 Bit @ 5V

    float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit
    float t=*p_temperature; // t: Temperature [Ticks] 14 Bit
    float rh_lin; // rh_lin: Humidity linear
    float rh_true; // rh_true: Temperature compensated humidity
    float t_C; // t_C : Temperature [°C]

    t_C=t*0.01 - 40; //calc. temperature from ticks to [°C]
    rh_lin=C3*rh*rh + C2*rh + C1; //calc. humidity from ticks to [%RH]
    rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //calc. temperature compensated humidity [%RH]
    if(rh_true>100)rh_true=100; //cut if the value is outside of
    if(rh_true<0.1)rh_true=0.1; //the physical possible range

    *p_temperature=t_C; //return temperature [°C]
    *p_humidity=rh_true; //return humidity[%RH]
    }


    float SHT15_Calculate_Dew_Point(float h,float t)
    {
    float logEx,dew_point;
    logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);
    dew_point = (logEx - 0.66077)*237.3/(0.66077+7.5-logEx);
    return dew_point;
    }


    void SHT75_Demo(void)
    {

    static idata unsigned char count=0;
    static idata value humi_val[_SmoothNum],temp_val[_SmoothNum];
    float humi,temp;
    float dew_point;
    unsigned char error,checksum;
    unsigned int i;

    // Init_Uart();
    s_softreset();
    T0_Delay_ms(10);
    SHT15_Connection_Reset();
    // EN_75LBC184 = 1;
    // LED_RXD = 1; /

    error=0;
    count ++;
    if(count>=_SmoothNum)
    count=0;
    error+=SHT15_Measure((unsigned char*) &temp_val[count].i,&checksum,TEMP);
    error+=SHT15_Measure((unsigned char*) &humi_val[count].i,&checksum,HUMI);
    if(error!=0)
    SHT15_Connection_Reset();
    else
    {
    humi_val[count].f=(float)humi_val[count].i;
    temp_val[count].f=(float)temp_val[count].i;

    for(i=0;i<_SmoothNum;i++)
    {
    humi += humi_val[i].f;
    temp += temp_val[i].f;
    }
    humi /= (float)_SmoothNum;
    temp /= (float)_SmoothNum;

    SHT15_Calculate(&humi,&temp);
    dew_point=SHT15_Calculate_Dew_Point(humi,temp);
    // LED_TXD=0;
    printf("temp:%5.2fC humi:%5.2f%% dew point:%5.2fC\r\n",
    temp,humi,dew_point);
    // LED_TXD=1;
    }
    }

Về tác giả

Collapse

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

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