📄 sht.c
字号:
#include <iom32v.h>
#include <macros.h>
#include "main.h"
#include "SHT.h"
void SHT_init(void)
{
Setb_SHT_DATA;
Clr_SHT_SCL;
}
void Write8BitsData(uchar uData)
{
unsigned char i;
BYTE error=0;
for(i=0;i<8;i++)
{
if((uData & BIT(7-i)) == 0)
Clr_SHT_DATA;
else
Setb_SHT_DATA;
Setb_SHT_SCL;
delay_us(5);
Clr_SHT_SCL;
}
//Receive Ack
Setb_SHT_DATA;
DDRA &= ~BIT(SHT_DATA_PIN);
Setb_SHT_SCL;
delay_us(5);
error = PINA & BIT(SHT_DATA_PIN);
Clr_SHT_SCL;
DDRA |= BIT(SHT_DATA_PIN);
if(error==4)
{
Nothing= TRUE;
Temperature=0;
HIH3610_value=0;;
}
else
Nothing = FALSE;
//Setb_SHT_DATA;
}
BYTE Read8BitsData(BYTE ack)
{
unsigned char i,temp=0;
WORD RData=0x00;
Setb_SHT_DATA;
DDRA &= ~BIT(SHT_DATA_PIN);
for (i=0;i<8;i++)//i=0x80;i>0;i/=2)
{
RData <<= 1;
Setb_SHT_SCL;
delay_us(5);
temp = PINA & BIT(SHT_DATA_PIN);
if (temp != 0x00)
RData |= 1;
Clr_SHT_SCL;
}
DDRA |= BIT(SHT_DATA_PIN);
//Send Ack
if(ack==1) Clr_SHT_DATA;
else
Setb_SHT_DATA;
Setb_SHT_SCL;
delay_us(5);
Clr_SHT_SCL;
Setb_SHT_DATA;
return RData;
}
void s_transstart(void)
{
SHT_init(); //Initial state
delay_us(5);
Setb_SHT_SCL;
delay_us(5);
Clr_SHT_DATA;
delay_us(5);
Clr_SHT_SCL;
delay_us(5);
Setb_SHT_SCL;
delay_us(5);
Setb_SHT_DATA;
delay_us(5);
Clr_SHT_SCL;
}
/*
void s_connectionreset(void)
{
unsigned char i;
SHT_init(); //Initial state
for(i=0;i<9;i++) //9 SCK cycles
{
Setb_SHT_SCL;
Clr_SHT_SCL;
}
s_transstart(); //transmission start
}
void s_softreset(void)
{
unsigned char error=0;
s_connectionreset(); //reset communication
error+=Write8BitsData(RESET); //send RESET-command to sensor
if(error==1) return; //error=1 in case of no response form the sensor
}
*/
void WriteSHTReg(void)
{
s_transstart();
Write8BitsData(STATUS_REG_W);
Write8BitsData(0x01);
}
void ReadSHTReg(void)
{
BYTE tem=0;
s_transstart();
Write8BitsData(STATUS_REG_R);
tem = Read8BitsData(0);
}
void MeaTemperature(void)
{
s_transstart();
Write8BitsData(MEASURE_TEMP);
}
void MeaRH(void)
{
s_transstart();
Write8BitsData(MEASURE_HUMI);
}
void GetTemperature(void)
{
WORD temtem=0;
float cData=0,bData=0;
BYTE uData=0;
BYTE i=0;//,temp=0;
temtem |= Read8BitsData(1);
temtem <<= 8;
temtem |= Read8BitsData(0);
//temp = Read8BitsData(0);//crc
//tem &= 0x3FFF;
//tem &= 0xFFF;
if(temtem!=0)
{
cData = (float)(temtem);
bData = cData*0.01;
//bData = cData*0.04;
uData = (BYTE)(bData);
uData -= 40;
}
else
{
uData=0;
}
if(uData>99) uData=99;
if(uData>0) Temperature = uData;
}
void GetHumi(void)
{
WORD temtem=0;
float cData=0;
float rData=0,bData=0;
char uData=0;
//BYTE temp=0;
temtem |= Read8BitsData(1);
temtem <<= 8;
temtem |= Read8BitsData(0);
//temp = Read8BitsData(0);//crc
//tem &= 0xFFF;
if(temtem!=0)
{
cData = (float)temtem;
rData = cData*0.0405 - 4.0 - cData*cData*0.0000028;
bData = (Temperature-25)*(0.01+0.00008*cData)+rData;
//rData = cData*0.648 - 4.0 - cData*cData*0.00072;
//bData = (Temperature-25)*(0.01+0.00128*cData)+rData;
uData = (char)(bData);
}
else
{
uData=0;
}
if(uData>99) uData=99;
if(uData>0) HIH3610_value = uData;
}
void Wait_Ok(void)
{
BYTE temp=4;
DWORD i=0;
DDRA &= ~BIT(SHT_DATA_PIN);
for (;i<100000;i++)
{
temp = PINA & BIT(SHT_DATA_PIN);
if(temp==0)
break;
}
DDRA |= BIT(SHT_DATA_PIN);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -