下面的代码你可以试试,我以前用过SHT20后来换成国产的FOST02了。
void start(void) //开始
{
DATA=1;
nop();
nop();
nop();
SCK=1;
nop();
nop();
nop();
DATA=0;
nop();
nop();
nop();
SCK=0;
nop();
nop();
nop();
SCK=1;
nop();
nop();
nop();
DATA=1;
nop();
nop();
nop();
SCK=0;
nop();
nop();
nop();
}
void ack(void) //应答位
{
SCK=0;
nop();
nop();
nop();
DATA=0;
nop();
nop();
nop();
SCK=1;
nop();
nop();
nop();
SCK=0;
nop();
nop();
nop();
DATA=1;
}
void send_command(uchar N) //发送命令
{
uchar i;
for(i=0;i<8;i++)
{
SCK=0;
nop();
nop();
nop();
DATA=(bit)(N&0x80);
N<<=1;
SCK=1;
nop();
nop();
nop();
}
ack();
}
read_mea_v_H(void) //读取高8位数值;
{
uchar i;
uint mea_v_h;
for(i=0;i<8;i++)
{
SCK=0;
nop();
nop();
nop();
SCK=1;
nop();
nop();
nop();
if(DATA)
mea_v_h|=0x01;
mea_v_h<<=1;
}
mea_v_h>>=1;
ack();
return(mea_v_h);
}
read_mea_v_L(void) //读取低8位数值;
{
uchar i;
uint mea_v_l;
for(i=0;i<8;i++)
{
SCK=0;
nop();
nop();
nop();
SCK=1;
nop();
nop();
nop();
if(DATA)
mea_v_l|=0x01;
mea_v_l<<=1;
}
mea_v_l>>=1;
SCK=0; //不应答,即不接收校验位;
DATA=1;
return(mea_v_l);
}
|