標(biāo)題: sht20溫濕度程序 [打印本頁]

作者: 17377060207    時(shí)間: 2020-4-15 20:03
標(biāo)題: sht20溫濕度程序
//頭文件
#include "iic.h"  
#include "delay.h"
#include "sht20.h"

//宏
#define SHT20ADDR       0x80       //sht寫地址  
#define ACK             0                   //應(yīng)答信號(hào)
#define NACK            1                  //非應(yīng)答
#define FAIL            1                    //失敗返回
#define READ_TEMP_COMD  0xf3        //讀溫度
#define READ_HUMI_COMD  0xf5        //讀濕度

TempHumiValue_t temp_humi_Value;
static void SHT20_setResolution(void);
static void SHT20_setResolution(void);
void SHT20_softReset(void);

//寫一個(gè)字節(jié)函數(shù)
static u8 sht20_writeOneByte(u8 dataToWrite)
{
        u8 ack;
        IIC_sendByte(dataToWrite);     
        ack = IIC_waitAck();
        return ack;
}

//復(fù)位
static void SHT20_softReset(void)                    
{
        IIC_start();                     
        SHT20_writeOneByte(SHT20ADDR&0xfe);  
        SHT20_writeOneByte(0xfe);                        
        IIC_stop();                       
}

//初始化
void sht20_Init(void)
{
        sht20_softReset();
}
//讀字節(jié)
static u8 sht20_readOneByte(u8 ack)
{
        u8 temp;
        temp=IIC_readByte(ack);            
        return temp;
}

//寫寄存器
static void sht20_setResolution(void)                    
{
          IIC_start();                                                                        
         if(sht20_writeOneByte(sht20ADDR&0xfe)==ACK) //80            
        {
                 if(sht20_writeOneByte(0xe6)==ACK)                              
                    {  
                             if(SHT20_writeOneByte(0x83)==ACK);   
                   }
          }
           IIC_stop();                                    
}

//讀取測(cè)量值
float SHT20_readTemOrHum(u8 commod)
{
        float temp;                 
        u8 ack=1;
        u8  MSB,LSB;            
        float Humidity,Temperature;

        SHT20_setResolution();           
        IIC_start();                 
        ack = SHT20_writeOneByte(SHT20ADDR&0xfe);
        if( ack == ACK )               
        {        
                if(SHT20_writeOneByte(commod)==ACK)                     
                {
                 do
                        {
                                delay_ms(6);                                      
                                IIC_start();                                    
                        }while(SHT20_writeOneByte(SHT20ADDR|0x01)==NACK);      

                        MSB = SHT20_readOneByte(ACK);                          
                        LSB = SHT20_readOneByte(ACK);                        
                        SHT20_readOneByte(NACK);                              
                        IIC_stop();                                         
                        LSB &= 0xfc; //1111 1100                                      
                        temp = MSB*256 + LSB;                           
                        if (commod==((u8)READ_HUMI_COMD))                        
                        {        
                                Humidity =(temp*125)/65536-6;                 
                                return Humidity;                                
                        }                                                                                                  
                        else if(commod==((u8)READ_TEMP_COMD))                     
                        {        
                                 /*-- calculate temperature [¡ãC] --*/
                                Temperature = (temp*175.72f)/65536-46.85f;      
                                return Temperature;                             
                        }
                 }
        }
  return FAIL;
}

TempHumiValue_t * SHT20_readTemAndHum(void)
{
        temp_humi_Value.humidity = SHT20_readTemOrHum(READ_HUMI_COMD);
        temp_humi_Value.temperature = SHT20_readTemOrHum(READ_TEMP_COMD);
        return &temp_humi_Value;
}

作者: admin    時(shí)間: 2020-4-16 00:56
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1