欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 數(shù)字溫度傳感器LM75驅(qū)動(可移植) [打印本頁]

作者: xiaos    時間: 2015-4-10 17:04
標題: 數(shù)字溫度傳感器LM75驅(qū)動(可移植)
/*******************************LM75*******************************/
#define I2C_SDA_HIGH()
#define I2C_SDA_LOW()
#define I2C_SCL_HIGH()
#define I2C_SCL_LOW()
#define I2C_SDA_Read()

I2C 發(fā)送時:SDA每發(fā)送8位數(shù)據(jù) SDA 就要接收一位應(yīng)答位
     接收時:SDA每接收8位數(shù)據(jù) SDA 就要發(fā)送一位應(yīng)答位
static void Delay(void)
{
    //實現(xiàn)延時4us
}
static void I2C_Start(void)
{
    I2C_SDA_HIGH();
    I2C_SCL_HIGH();
    Delay();
    I2C_SDA_LOW();
    Delay();
    I2C_SCL_LOW();
    Delay();
}

static void I2C_Stop(void)
{
    I2C_SDA_LOW();
    I2C_SCL_HIGH();
    Delay();
    I2C_SDA_HIGH();
    Delay();
}

void I2C_SendByte(uint8_t Byte)
{
    uint8_t Cnt;
    for(Cnt=0;Cnt<8;Cnt++)
    {
        if(Byte&0x80)
           I2C_SDA_HIGH();
        else
           I2C_SDA_LOW();
        Delay();
        Byte<<=1;
        I2C_SCL_HIGH();
        Delay();
        I2C_SCL_LOW();
        Delay();
    }
}

uint8_t I2C_ReceiveByte(void)
{
    uint8_t Byte=0,Cnt;
    for(Cnt=0;Cnt<8;Cnt++)
    {
        Byte<<=1;
        I2C_SDA_HIGH():
        Delay();
        I2C_SCL_HIGH();
        Delay();
        if(I2C_SDA_Read())
            Byte++;
        I2C_SCL_LOW();
        Delay();
    }
    return Byte;
}
static uint8_t I2C_WaitAck(void)//0:Ack  1:NoAck
{
    I2C_SDA_HIGH();
    Delay();
    I2C_SCL_HIGH();
    Delay();
    if(I2C_SDA_Read())
        return 1;
    I2C_SCL_LOW();
    Delay();
    return 0;
}

static void I2C_SendAck(void)
{
    I2C_SDA_LOW();
    Delay();
    I2C_SCL_HIGH();
    Delay();
    I2C_SCL_LOW();
    Delay();
}

static void I2C_SendNoAck(void)
{
    I2C_SDA_HIGH();
    Delay():
    I2C_SCL_HIGH();
    Delay();
    I2C_SCL_LOW();   
    Delay();
}
/****************LM75***********************/

static uint8_t LM75_SendByte(uint8_t Address,uint8_t Byte)//0 :成功  1:失敗
{
    I2C_Start();
    I2C_SendByte(Address);
    if(I2C_WaitAck())
        return 1;
    I2C_SendByte(Byte);
    if(I2C_WaitAck())
        return 1;
    I2C_Stop();
    return 0;
}

static uint8_t LM75_ReviceByte(uint8_t Address,uint8_t *pByte)
{
    I2C_Start();
    I2C_SendByte(Address);
    if(I2C_WaitAck())
        return 1;
    I2C_Start();
    *Byte=I2C_ReceiveByte();
    I2C_SendAck():
    *(Byte+1)=I2C_ReceiveByte();
    I2C_SendNoAck();
    I2C_Stop();
}


int main(void)
{
    uint8_t Data[2];
    I2C_Init()//初始化  代碼未給出
    LM75_SendByte(Address,0x00);
    LM75_SendByte(Address,Data);
  /*  MSB,D7,D6,D5,D4,D3,D2,D1,LSB ,x,x,x,x,x,x*/
  //  這16位數(shù)據(jù)中 MSB位為1表示溫度值為負數(shù)  //負數(shù)以補碼表示
  //  D7,D6,D5,D4,D3,D2,D1,LSB 這7位表示溫度值*2
  //  所以溫度的大小為 (Data[0]<<1|(Data[0]>>7))*0.5
    //注意處理MSB位為1的時候出現(xiàn)負數(shù)的情況
D7,D6,D5,D4,D3,D2,D1,LSB 要-1 取反才是真實值
   
}




作者: yyeeyyee    時間: 2017-3-16 16:09
學習一下




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