/*
* SHT1X传感器驱动程序库
*------------------------------------------------------------------
*/
#include <stdio.h>
#include <string.h>
#include "Sht10.h"
#if defined( HAL_UART_DMA ) && HAL_UART_DMA
#include "hal_dma.h"
#endif
extern unsigned char Sht1x;
/* 延时 -OK-
*--------------------------------------------
*/
void NOP(int i)
{
int j,k;
for(k=0;k<i;k++){
for(j=0;j<100;j++);
}
}
/* SHT1X复位 -OK-
*--------------------------------------------
*/
void Sht1xRest(void)
{
unsigned char i;
if(Sht1x==0) //一号传感器
{
for(i = 0; i < 9; i++)
{
SHT1X_SCK1_H(); //SCK高电平
NOP(1);
SHT1X_SCK1_L(); //SCK低电平
NOP(1);
}
Sht1xStat();
}
else
{
for(i = 0; i < 9; i++)
{
SHT1X_SCK2_H();
NOP(1);
SHT1X_SCK2_L();
NOP(1);
}
Sht1xStat();
}
}
/* 向SHT1X发送数据 -OK-
*--------------------------------------------
* 入口参数:待发送数据
*/
unsigned char Sht1xSend(unsigned char data)
{
unsigned char i;
if(Sht1x==0)
{
SHT1X_SCK1_L();
for(i = 0; i < 8; i++)
{
if(data&0x80)
{
SHT1X_DAT1_H();
}
else
{
SHT1X_DAT1_L();
}
data <<= 1;
SHT1X_SCK1_H();
NOP(1);
SHT1X_SCK1_L();
NOP(1);
}
if(Sht1xWaitForAck() == 0)
return 1;
else
return 0;
}
else
{
SHT1X_SCK2_L();
for(i = 0; i < 8; i++)
{
if(data&0x80)
{
SHT1X_DAT2_H();
}
else
{
SHT1X_DAT2_L();
}
data <<= 1;
SHT1X_SCK2_H();
NOP(1);
SHT1X_SCK2_L();
NOP(1);
}
if(Sht1xWaitForAck() == 0)
return 1;
else
return 0;
}
}
/* SHT1X初始化 -OK-
*--------------------------------------------
*/
void Sht1xINIT(void)
{
Sht1xInit();
Sht1xRest();
}
/* 读SHT1X -OK-
*--------------------------------------------
*/
unsigned short Sht1xRead(unsigned char option)
{
unsigned short temp = 0;
unsigned char i;
if(Sht1x==0)
{
Sht1xStat();
if(Sht1xSend(option&0x1f) == 0)
return 1;//芯片没有应答
SHT1X_DATA_IN1(); //引脚输入状态
for(i = 0;i<10;i++) //延时等转换完成
Sht1xDelay(30000);
SHT1X_SCK1_L();
NOP(1);
SHT1X_SCK1_H();
NOP(1);
if(SHT1X_DAT1_READ() != 0) //读DAT引脚
{
return 2;//芯片没有响应 转换完成
}
SHT1X_SCK1_L();
NOP(1);
for(i = 0;i<7;i++)
{
SHT1X_SCK1_H();
NOP(1);
temp <<= 1;
if(SHT1X_DAT1_READ())
{
temp |= 1;
}
SHT1X_SCK1_L();
NOP(1);
}
SHT1X_DATA_OUT1();
NOP(1);
SHT1X_DAT1_L();
NOP(1);
SHT1X_SCK1_H();
NOP(1);NOP(1);
SHT1X_SCK1_L();
NOP(1);
NOP(1);
SHT1X_DATA_IN1();
for(i = 0;i<8;i++)
{
SHT1X_SCK1_H();
NOP(1);
temp <<= 1;
if(SHT1X_DAT1_READ())
{
temp |= 1;
}
SHT1X_SCK1_L();
NOP(1);
}
SHT1X_DATA_OUT1();
NOP(1);
SHT1X_DAT1_H();
SHT1X_SCK1_H();
NOP(1);
SHT1X_SCK1_L();
}
else
{
Sht1xStat();
if(Sht1xSend(option&0x1f) == 0)
return 1;//芯片没有应答
SHT1X_DATA_IN2();
for(i = 0;i<10;i++)//等转换完成
Sht1xDelay(30000);
SHT1X_SCK2_L();
NOP(1);
SHT1X_SCK2_H();
NOP(1);
if(SHT1X_DAT2_READ() != 0)
{
return 2;//芯片没有响应 转换完成
}
SHT1X_SCK2_L();
NOP(1);
for(i = 0;i<7;i++)
{
SHT1X_SCK2_H();
NOP(1);
temp <<= 1;
if(SHT1X_DAT2_READ())
{
temp |= 1;
}
SHT1X_SCK2_L();
NOP(1);
}
SHT1X_DATA_OUT2();
NOP(1);
SHT1X_DAT2_L();
NOP(1);
SHT1X_SCK2_H();
NOP(1);NOP(1);
SHT1X_SCK2_L();
NOP(1);
NOP(1);
SHT1X_DATA_IN2();
for(i = 0;i<8;i++)
{
SHT1X_SCK2_H();
NOP(1);
temp <<= 1;
if(SHT1X_DAT2_READ())
{
temp |= 1;
}
SHT1X_SCK2_L();
NOP(1);
}
SHT1X_DATA_OUT2();
NOP(1);
SHT1X_DAT2_H();
SHT1X_SCK2_H();
NOP(1);
SHT1X_SCK2_L();
}
return temp;
}
/* SHT1X读1 -OK-
*--------------------------------------------
*/
unsigned char Sht1xRead1(unsigned char option)
{
if(Sht1x==0)
{
Sht1xStat();
if(Sht1xSend(option&0x1f) == 0)
return 1;//芯片没有应答
SHT1X_DATA_IN1();
}
else
{
Sht1xStat();
if(Sht1xSend(option&0x1f) == 0)
return 1;//芯片没有应答
SHT1X_DATA_IN2();
}
return 0;
}
/* SHT1X读2 -OK-
*--------------------------------------------
*/
unsigned short Sht1xRead2(unsigned char option)
{
unsigned short temp = 0;
unsigned char i;
if(Sht1x==0)
{
SHT1X_SCK1_L();
NOP(1);
SHT1X_SCK1_H();
NOP(1);NOP(1);NOP(1);
if(SHT1X_DAT1_READ() != 0)
{
return 2;//芯片没有响应 转换完成
}
SHT1X_SCK1_L();
NOP(1);
for(i = 0;i<7;i++)
{
SHT1X_SCK1_H();
NOP(1);
temp <<= 1;
if(SHT1X_DAT1_READ())
{
temp |= 1;
}
SHT1X_SCK1_L();
NOP(1);
}
SHT1X_DATA_OUT1();
NOP(1);
SHT1X_DAT1_L();
NOP(1);
SHT1X_SCK1_H();
NOP(1);NOP(1);
SHT1X_SCK1_L();
NOP(1);
NOP(1);
SHT1X_DATA_IN1();
for(i = 0;i<8;i++)
{
SHT1X_SCK1_H();
NOP(1);
temp <<= 1;
if(SHT1X_DAT1_READ())
{
temp |= 1;
}
SHT1X_SCK1_L();
NOP(1);
}
SHT1X_DATA_OUT1();
NOP(1);
SHT1X_DAT1_H();
SHT1X_SCK1_H();
NOP(1);
SHT1X_SCK1_L();
}
else
{
SHT1X_SCK2_L();
NOP(1);
SHT1X_SCK2_H();
NOP(1);NOP(1);NOP(1);
if(SHT1X_DAT2_READ() != 0)
{
return 2;//芯片没有响应 转换完成
}
SHT1X_SCK2_L();
NOP(1);
for(i = 0;i<7;i++)
{
SHT1X_SCK2_H();
NOP(1);
temp <<= 1;
if(SHT1X_DAT2_READ())
{
temp |= 1;
}
SHT1X_SCK2_L();
NOP(1);
}
SHT1X_DATA_OUT2();
NOP(1);
SHT1X_DAT2_L();
NOP(1);
SHT1X_SCK2_H();
NOP(1);NOP(1);
SHT1X_SCK2_L();
NOP(1);
NOP(1);
SHT1X_DATA_IN2();
for(i = 0;i<8;i++)
{
SHT1X_SCK2_H();
NOP(1);
tem