当前位置: 首页 > 工具软件 > i51 > 使用案例 >

SGP30传感器示例程序(基于51单片机、IO模拟I2C)

丁俊智
2023-12-01

说明:这里采用使用IO模拟的方式来实现I2C

点击这里下载SGP30测试源码及数据手册

/*SGP30传感器初始化函数*/
void SGP30_Init(void)
{
	Start_I2c();			//启动I2C总线
	SendByte(SGP30WAddr);	//发送SGP30传感器写地址
	SendByte(0x20);			//发送命令(0x2003|SGP30_IAQ_init)
	SendByte(0x03);
	Stop_I2c();				//停止I2C总线
}


/*SGP30传感器读取数据函数*/
void SGP30_Data_Read(unsigned int *dat)
{
	unsigned char Data01,Data02,Data03,Data04;	//读取数据暂存变量
	unsigned char CRC;		//CRC校验值接收变量
	Start_I2c();			
	SendByte(SGP30WAddr);
	SendByte(0x20);			//发送命令(0x2008|SGP30_Measure_IAQ)
	SendByte(0x08);
	Stop_I2c();
	DelayMs(10);			//必须延时10ms以上,但不宜太长,否则读取不到数据!!!
	Start_I2c();
	SendByte(SGP30RAddr);
	Data01 = RcvByte();		//CO2高位数据	
	Ack_I2c();
	Data02 = RcvByte();		//CO2低位数据	
	Ack_I2c();
	CRC = RcvByte();		//CRC校验值	
	Ack_I2c();
	Data03 = RcvByte();		//TVOC高位数据	
	Ack_I2c();
	Data04 = RcvByte();		//TVOC低位数据
	Ack_I2c();
	CRC = RcvByte();
	NoAck_I2c();
	Stop_I2c();

	dat[0]=((Data01<<8)|Data02);		//拼接CO2数据		
	dat[1]=((Data03<<8)|Data04);		//拼接TVOC数据
}

直接将CO2数据转换为整型数据即可得到二氧化碳浓度数据

因本人水平有限,代码如有不足之处请指出!欢迎大家前来交流!

 类似资料: