STM32F030读取温湿度传感器SHT20的C程序源码经(4)

2019-06-11 17:52

if(HTU20_SDA == 1 {

RDByte |= 0x01; } else {

RDByte&= 0xfe; }

I2CDelay(1;

HTU20_SCL_0(; //下降沿告知从机发送下一位 I2CDelay(6; }

HTU20_SDA_OUT(; //接受完一个字节,发送ACK or NACK if(AckValue == 1 {

HTU20_SDA_1(; } else {

HTU20_SDA_0(;

}

I2CDelay(3; HTU20_SCL_1(; I2CDelay(5;

HTU20_SCL_0(; //清时钟线 I2CDelay(15; //HTU20_SDA_1(; returnRDByte; } /**

* @brief soft reset by transmit reset command * @retvalNone */

voidSoftReset(void { I2CInit(; I2CStart(;

I2C_Write_Byte(SHT20ADDR & 0xfe; //I2C address + write I2C_Write_Byte(SOFT_RESET; //soft reset

I2CStop(; } /**

* @brief SET HTU20D resolution by write register * @retvalNone */

voidSET_Resolution(void { I2CStart(;

if(I2C_Write_Byte(SHT20ADDR & 0xfe == ACK //I2C address + write + ACK {

if(I2C_Write_Byte(WRITE_REGISTER==ACK //写用户寄存器 {

if(I2C_Write_Byte(0x83==ACK; //设置分辨率11bit RH% 测量时间: 12ms(typ. } // 11bit T℃测量时间: 9ms(typ. } I2CStop(; } /**

* @brief read sht20's converted result

* @paramTempOrHumiCMD: operation command for temperature or humidity * @retvalNone */

float ReadSht20(char TempOrHumiCMD { float temp; BYTE MSB,LSB;

float Humidity, Temperature; SET_Resolution(; I2CStart(;

if(I2C_Write_Byte(SHT20ADDR & 0xfe == ACK //I2C address + write + ACK {

if(I2C_Write_Byte(TempOrHumiCMD == ACK //command {

// delayms(MeasureDelay; /*这两行由下面屏蔽了的两行改到上面来的*/ // I2CStart(; do {

delayms(MeasureDelay; I2CStart(;

} while(I2C_Write_Byte(SHT20ADDR | 0x01 == NACK; //I2C address + read + NACK

MSB = I2C_Read_Byte(ACK; LSB = I2C_Read_Byte(ACK;

I2C_Read_Byte(NACK; //Checksum + NACK I2CStop(;

LSB &= 0xfc; //Data (LSB 的后两位在进行物理计算前前须置0 temp = (MSB << 8 + LSB;

if (TempOrHumiCMD == ((charTRIGGER_HUMI {

/*-- calculate relative humidity [%RH] --*/ //equation: RH% = -6 + 125 * SRH/2^RESh Humidity = (temp * 125 / 65536 - 6; return Humidity; } else {

/*-- calculate temperature [°C] --*/ //equation:T = -46.85 + 175.72 * ST/2^RESt Temperature = (temp * 175.72 / 65536 - 46.85; return Temperature; } } } return 0; }

voiddelayms(BYTE ms { BYTE t; for(t=0;t<100;t++

{ I2CDelay(10; // // } } Delayms = ms; while(Delayms;

//////////////////////////////////////////////////////////////////////////////////////////////////// #define TRIGGER_TEMP #define TRIGGER_HUMI 0xf3 0xf5 void I2CInit(void; voidSoftReset(void; voidSET_Resolution(void; float ReadSht20(char TempOrHumiCMD;


STM32F030读取温湿度传感器SHT20的C程序源码经(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Xilinx ISE 9.1i(逻辑设计环境)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: