资源简介
使用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 ba
文件 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个文件信息
- 上一篇:上海交大翁惠玉老师计算机网络的课件
- 下一篇:机器人学.蔡自兴.pdf
相关资源
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 激光位移传感器的特点及应用解析
- 位移传感器应用全面解析
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 毕业论文之温度传感器DS18B20(源码
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- stm32 ds18b20 温度传感器 测试通过
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- HX711 称重传感器 C程序
- 51单片机读取温度数据存储到SD卡中并
评论
共有 条评论