SHT21程序.docx
- 文档编号:25361896
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:15
- 大小:15.93KB
SHT21程序.docx
《SHT21程序.docx》由会员分享,可在线阅读,更多相关《SHT21程序.docx(15页珍藏版)》请在冰豆网上搜索。
SHT21程序
#include""
/*================================================================
【名称】字符表
【功能】用于查表生成对应数字的ASCII码
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
constunsignedcharNum[16]={
'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'
};
/*================================================================
【名称】
【功能】模拟IIC使用的引脚定义,注意要上拉电阻
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
sbitSDA=P2^4;
sbitSCL=P2^3;
/*================================================================
【名称】
【功能】SHT21的I2C地址
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
#defineSHT21ADDR0x80
/*================================================================
【名称】
【功能】应答位电平定义
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
#defineACK0
#defineNACK1
/*================================================================
【名称】voidDelay(unsignedintt)
【功能】延时长
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidDelay(unsignedintt)
{
unsignedchari;
while(t--)
{
for(i=0;i<200;i++);
}
}
//***********************以下是模拟I2C函数****************************//
/*================================================================
【名称】voidI2CDelay(unsignedchart)
【功能】模拟IIC用的短延时
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CDelay(unsignedchart)
{
while(t--);
}
/*================================================================
【名称】voidI2CInit(void)
【功能】I2C初始化,空闲状态
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CInit(void)
{
SDA=1;
SCL=1;
}
/*================================================================
【名称】voidI2CStart(void)
【功能】I2C起始信号
【备注】SCL、SDA同为高,SDA跳变成低之后,SCL跳变成低
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CStart(void)
{
SDA=1;
SCL=1;
I2CDelay(10);
SDA=0;
I2CDelay(20);
SCL=0;
I2CDelay(20);
}
/*================================================================
【名称】voidI2CStop(void)
【功能】I2C停止信号
【备注】SCL、SDA同为低,SCL跳变成高之后,SDA跳变成高
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CStop(void)
{
SDA=0;
SCL=0;
I2CDelay(10);
SCL=1;
I2CDelay(10);
SDA=1;
I2CDelay(10);
}
/*================================================================
【名称】unsignedcharI2CWRByte(unsignedcharWRByte)
【功能】I2C写一个字节数据,返回ACK或者NACK
【备注】从高到低,依次发送
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
unsignedcharI2CWRByte(unsignedcharWRByte)
{
unsignedchari;
SCL=0;
for(i=0;i<8;i++)
{
if(WRByte&0x80)
{
SDA=1;
}
else
{
SDA=0;
}
I2CDelay(10);
SCL=1;//输出SDA稳定后,拉高SCL给出上升沿,从机检测到后进行数据采样
I2CDelay(50);
SCL=0;
I2CDelay(10);
WRByte<<=1;
}
SDA=1;
SCL=1;
I2CDelay(20);
if(SDA==1)//SDA为高,收到NACK
{
SCL=0;
I2CDelay(50);
returnNACK;
}
else//SDA为低,收到NACK
{
SCL=0;
I2CDelay(50);
returnACK;
}
}
/*================================================================
【名称】unsignedcharI2CRDByte(unsignedcharAckValue)
【功能】I2C读一个字节数据,入口参数用于控制应答状态,ACK或者NACK
【备注】从高到低,依次接收
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
unsignedcharI2CRDByte(unsignedcharAckValue)
{
unsignedchari,RDByte=0;
SCL=0;
SDA=1;//释放总线
for(i=0;i<8;i++)
{
RDByte<<=1;//移位
SCL=1;//给出上升沿
I2CDelay(30);//延时等待信号稳定
if(SDA==1)//采样获取数据
{
RDByte|=0x01;
}
else
{
RDByte&=0xfe;
}
SCL=0;//下降沿,从机给出下一位值
I2CDelay(10);
}
SDA=AckValue;//应答状态
I2CDelay(10);
SCL=1;
I2CDelay(50);
SCL=0;
SDA=1;
I2CDelay
(1);
returnRDByte;
}
/*================================================================
【名称】voidSHT21Init(void)
【功能】SHT21初始化函数,主函数中调用
【备注】从高到低,依次接收
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidSHT21Init(void)
{
I2CInit();//I2C初始化
I2CStart();//启动I2C
I2CWRByte(SHT21ADDR&0xfe);//写SHT21I2C地址
I2CWRByte(0xfe);
I2CStop();//停I2C
Delay(600);//短延时
}
/*================================================================
【名称】longReadSht21(charwhatdo)
【功能】读取函数函数
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
longReadSht21(charwhatdo)
{
unsignedlongtemp;
unsignedcharHumidity,HumidityH,HumidityL;
unsignedlongwendu;
I2CStart();
if(I2CWRByte(SHT21ADDR&0xfe)==ACK)
{
if(I2CWRByte(whatdo)==ACK)
{
do
{
Delay(30);
I2CStart();
}while(I2CWRByte(SHT21ADDR|0x01)==NACK);
HumidityH=I2CRDByte(ACK);
HumidityL=I2CRDByte(ACK);
I2CRDByte(NACK);
I2CStop();
HumidityL&=0xfc;
temp=HumidityH*256+HumidityL;
if(whatdo==((char)0xf5))
{
Humidity=(unsignedchar)((temp*125)/65536-6)%0xff;
returnHumidity;
}
else
{
temp=((long)17572)*temp;
temp=temp/((long)65536);
wendu=temp-((long)4685);
returnwendu;//输出
}
//SendStrings("Humidity:
");//输出到串口
//SendByte(Num2Ascii[Humidity%100/10]);
//SendByte(Num2Ascii[Humidity%10]);
//SendByte('%');
//SendByte('\n');
}
}
return0;
}
文件
*================================================================
【名称】voidDelay(unsignedintt)
【功能】延时长
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidDelay(unsignedintt);
/*================================================================
【名称】voidI2CDelay(unsignedchart)
【功能】模拟IIC用的短延时
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CDelay(unsignedchart);
/*================================================================
【名称】voidI2CInit(void)
【功能】I2C初始化,空闲状态
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CInit(void);
/*================================================================
【名称】voidI2CStart(void)
【功能】I2C起始信号
【备注】SCL、SDA同为高,SDA跳变成低之后,SCL跳变成低
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CStart(void);
/*================================================================
【名称】voidI2CStop(void)
【功能】I2C停止信号
【备注】SCL、SDA同为低,SCL跳变成高之后,SDA跳变成高
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidI2CStop(void);
/*================================================================
【名称】unsignedcharI2CWRByte(unsignedcharWRByte)
【功能】I2C写一个字节数据,返回ACK或者NACK
【备注】从高到低,依次发送
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
unsignedcharI2CWRByte(unsignedcharWRByte);
/*================================================================
【名称】unsignedcharI2CRDByte(unsignedcharAckValue)
【功能】I2C读一个字节数据,入口参数用于控制应答状态,ACK或者NACK
【备注】从高到低,依次接收
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
unsignedcharI2CRDByte(unsignedcharAckValue);
/*================================================================
【名称】voidSHT21Init(void)
【功能】SHT21初始化函数,主函数中调用
【备注】从高到低,依次接收
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
voidSHT21Init(void);
/*================================================================
【名称】longReadSht21(charwhatdo)
【功能】读取函数函数
【备注】
【作者】
【时间】2010年8月18日11:
24:
09
================================================================*/
longReadSht21(charwhatdo);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SHT21 程序