• 大小: 8.44MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-05
  • 语言: 其他
  • 标签: 单片机  传感器  

资源简介

使用CCS811与HDC1080传感器获取物理量,STM32进行算法运算,从而判断空气质量。此代码提供例程供大家参考理解,并且可移植。

资源截图

代码片段和文件信息

#include “IIC.h“
#include “delay.h“
#include “usart.h“
 void I2C_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

/* 使能与 I2C有关的时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE );  

 /* PC3-I2C_SCL、PC5-I2C_SDA*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_7; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; 
GPIO_Init(GPIOB &GPIO_InitStructure); 
SCL_H;
SDA_H;
}
void delay_1us(u8 x)//粗略延时iic_40K
{
u8 i=20;
x=i*x;
while(x--);
}
////////IIC起始函数//////////
/*
IIC起始:当SCL处于高电平期间,SDA由高电平变成低电平出现一个下降沿,然后SCL拉低
*/
u8 I2C_Start(void)
{
SDA_H; 
delay_1us(5); //延时保证时钟频率低于40K,以便从机识别
SCL_H;
delay_1us(5);//延时保证时钟频率低于40K,以便从机识别
if(!SDA_read) return 0;//SDA线为低电平则总线忙退出
SDA_L;   //SCL处于高电平的时候,SDA拉低
delay_1us(5);
  if(SDA_read) return 0;//SDA线为高电平则总线出错退出
SCL_L;
  delay_1us(5);
  return 1;
}
//**************************************
//IIC停止信号
/*
IIC停止:当SCL处于高电平期间,SDA由低电平变成高电平出现一个上升沿
*/
//**************************************
void I2C_Stop(void)
{
    SDA_L;
SCL_L;
delay_1us(5);
SCL_H;
delay_1us(5);
SDA_H;//当SCL处于高电平期间,SDA由低电平变成高电平             //延时
}
//**************************************
//IIC发送应答信号
//入口参数:ack (0:ACK 1:NAK)
/*
应答:当从机接收到数据后,向主机发送一个低电平信号
先准备好SDA电平状态,在SCL高电平时,主机采样SDA
*/
//**************************************
void I2C_SendACK(u8 i)
{
    if(1==i)
SDA_H;              //准备好SDA电平状态,不应答
    else 
SDA_L;   //准备好SDA电平状态,应答 
  SCL_H;                    //拉高时钟线
    delay_1us(5);                 //延时
    SCL_L ;                  //拉低时钟线
    delay_1us(5);    

///////等待从机应答////////
/*
当本机(主机)发送了一个数据后,等待从机应答
先释放SDA,让从机使用,然后采集SDA状态
*/
/////////////////
u8 I2C_WaitAck(void)   //返回为:=1有ACK=0无ACK
{
uint16_t i=0;
SDA_H;         //释放SDA
SCL_H;         //SCL拉高进行采样
while(SDA_read)//等待SDA拉低
{
i++;      //等待计数
if(i==500)//超时跳出循环
break;
}
if(SDA_read)//再次判断SDA是否拉低
{
SCL_L; 
return RESET;//从机应答失败,返回0
}
  delay_1us(5);//延时保证时钟频率低于40K,
SCL_L;
delay_1us(5); //延时保证时钟频率低于40K,
return SET;//从机应答成功,返回1
}
//**************************************
//向IIC总线发送一个字节数据
/*
一个字节8bit当SCL低电平时,准备好SDA,SCL高电平时,从机采样SDA
*/
//**************************************
void I2C_SendByte(u8 dat)
{
  u8 i;
SCL_L;//SCL拉低,给SDA准备
  for (i=0; i<8; i++)         //8位计数器
  {
if(dat&0x80)//SDA准备
SDA_H;  
else 
SDA_L;
    SCL_H;                //拉高时钟,给从机采样
    delay_1us(5);        //延时保持IIC时钟频率,也是给从机采样有充足时间
    SCL_L;                //拉低时钟,给SDA准备
    delay_1us(5);    //延时保持IIC时钟频率
dat <<= 1;          //移出数据的最高位  
  }  
}
//**************************************
//从IIC总线接收一个字节数据
//**************************************
u8 I2C_RecvByte()
{
    u8 i;
    u8 dat = 0;
    SDA_H;//释放SDA,给从机使用
    delay_1us(1);         //延时给从机准备SDA时间            
    for (i=0; i<8; i++)         //8位计数器
    { 
  dat <<= 1;


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-11-18 14:33  CJMCU_811\
     文件     1057116  2016-11-04 10:09  CJMCU_811\CC-000619-DS-7-CCS811 Datasheet(1).pdf
     目录           0  2016-11-04 18:03  CJMCU_811\CCS811开发资料\
     目录           0  2016-11-04 18:03  CJMCU_811\CCS811开发资料\CCS811开发资料\
     文件     1057116  2016-10-20 16:01  CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000619-DS-7-CCS811 Datasheet.pdf
     文件      424183  2016-10-20 16:23  CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000774-AN-2-Assembly guidelines for CCS811.pdf
     文件      572616  2016-10-20 16:23  CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000783-AN-1-Mechanical Considerations for CCS811.pdf
     文件      921515  2016-10-20 16:23  CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000803-AN-5-CCS811 Programming and Interfacing Guide.pdf
     文件      655441  2016-10-20 16:24  CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000840-AN-1-CCS811 Hand Soldering Method.pdf
     文件      667763  2016-10-20 16:24  CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000921-AN-2-CCS811 Clean Air baseline Save and Restore[6].pdf
     文件      468791  2016-10-20 16:23  CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000922-AN-2-CCS811 - Performing a Application code binary file download.pdf
     目录           0  2016-11-04 10:13  CJMCU_811\CJMCU\
     目录           0  2016-11-04 10:13  CJMCU_811\CJMCU\APP\
     文件        6081  2016-11-04 17:42  CJMCU_811\CJMCU\APP\IIC.c
     文件         668  2016-11-04 17:30  CJMCU_811\CJMCU\APP\IIC.h
     文件        3732  2016-11-18 14:39  CJMCU_811\CJMCU\APP\main.c
     文件        3063  2016-09-20 12:39  CJMCU_811\CJMCU\APP\spi.c
     文件         334  2014-09-18 14:26  CJMCU_811\CJMCU\APP\spi.h
     文件      633941  2011-03-10 10:51  CJMCU_811\CJMCU\APP\stm32f10x.h
     文件        3264  2016-09-22 15:52  CJMCU_811\CJMCU\APP\stm32f10x_conf.h
     文件        2418  2011-11-13 01:28  CJMCU_811\CJMCU\APP\stm32f10x_it.c
     文件        1983  2011-04-04 18:57  CJMCU_811\CJMCU\APP\stm32f10x_it.h
     文件       36577  2011-04-04 18:57  CJMCU_811\CJMCU\APP\system_stm32f10x.c
     文件        2085  2011-03-10 10:51  CJMCU_811\CJMCU\APP\system_stm32f10x.h
     文件        1712  2016-09-22 16:00  CJMCU_811\CJMCU\APP\wdg.c
     文件         268  2016-09-22 15:51  CJMCU_811\CJMCU\APP\wdg.h
     目录           0  2016-11-04 10:13  CJMCU_811\CJMCU\CORE\
     文件       17273  2010-06-07 10:25  CJMCU_811\CJMCU\CORE\core_cm3.c
     文件       85714  2011-02-09 14:59  CJMCU_811\CJMCU\CORE\core_cm3.h
     文件       15503  2011-03-10 10:52  CJMCU_811\CJMCU\CORE\startup_stm32f10x_hd.s
     目录           0  2016-11-04 10:13  CJMCU_811\CJMCU\FIELIB\
............此处省略175个文件信息

评论

共有 条评论