96SEO 2026-02-19 20:12 0
。

它有一根SCL#xff08;时钟线#xff09;和一根SDA#xff08;数据线#xff09;组成#xff0c;由于只有一根数据线#xff0c;所以它是…一、IIC总线的基本概念
iic总线是一种带应答的同步的、串行、半双工的通信方式支持一个主机对应多个从机。
它有一根SCL时钟线和一根SDA数据线组成由于只有一根数据线所以它是半双工的通信方式。
1.主机需要发送一位起始位时钟线为高电平数据线产生下降沿标志着要开始发送数据
9.当不需要发送数据时主机发起终止信号时钟线为高电平数据线产生上升沿表示停止发送数据
10.此时主机可以回应一个应答信号或者非应答信号表示读取多少数据
11.当主机不再读取数据时上一步回应非应答信号后再次发起终止信号表示停止读取数据
通过数据手册了解到对应的寄存器地址向寄存器地址中写入初始化的数值。
SI7006内部有两个传感器分别是温度传感器和湿度传感器通过模数转换器可以将二者采集到的模拟信号转换为数字信号再由相关的寄存器存储通过控制单元交给IIC接口再通过IIC总线与外界进行交互
SI7006数据手册中已经写明但要注意它是原本的从机地址还是加上了R/W标志位后的数值
根据数据手册查询到相关的寄存器命令码主IIC设备可以使用命令结构与Si7006通信
{//si7006初始化si7006_init();//风扇/马达的初始化led_init();unsigned
tem;while(1){//读取温度和湿度humsi7006_read_hum();temsi7006_read_tem();//计算温湿度数据humhum*125/65536-6;temtem*175.72/65536-46.85;printf(hum:%d\n,hum);printf(tem:%d\n,tem);delay_ms(1000);if(tem26){CH1_CTRL(1);//开启风扇}else
if(tem26){CH1_CTRL(0);//关闭风扇}if(hum
65){//开启震动马达//Motor_CTRL(1);GPIOF-ODR
65){//关闭震动马达//Motor_CTRL(0);GPIOF-ODR
i,j;for(i0;ims;i){for(j0;j2000;j){}}
{i2c_init();//1.发起起始信号i2c_start();//2.发送7bit从机地址和写标志位
0X80i2c_write_byte(0x80);//3.等待从机应答i2c_wait_ack();//4.发送寄存器地址
0XE6i2c_write_byte(0xe6);//5.等待从机应答i2c_wait_ack();//6.向从机发送数据
0X3Ai2c_write_byte(0x3a);//7.等待从机应答i2c_wait_ack();//8.发送终止信号i2c_stop();
2.主机发送7bit从机地址1bit写标志i2c_write_byte(0x80);//
4.主机发送8bit寄存器地址i2c_write_byte(0xe5);//
15.将读取到的数据的低8位和高8bit合成一个完整的数据humhum_h8|hum_l;return
2.主机发送7bit从机地址1bit写标志i2c_write_byte(0x80);//
4.主机发送8bit寄存器地址i2c_write_byte(0xe3);//
15.将读取到的数据的低8位和高8bit合成一个完整的数据temtem_h8|tem_l;return
设置PF14PF15引脚为通用的输出功能GPIOF-MODER
I2C_SCL_H;I2C_SDA_H;delay_us();//延时等待一段时间I2C_SDA_L;//数据线拉低delay_us();//延时等待一段时间I2C_SCL_L;//时钟线拉低让总线处于占用状态
PF15输出SET_SDA_OUT;//时钟线拉低I2C_SCL_L;//为了修改数据线的电平delay_us();//延时等待一段时间I2C_SDA_L;//数据线拉低delay_us();//延时等待一段时间//时钟线拉高I2C_SCL_H;delay_us();//延时等待一段时间I2C_SDA_H;//数据线拉高}/**
i;for(i0;i8;i){//时钟线拉低I2C_SCL_L;delay_us();//延时//0X3A-0011
0X80-10000000if(dat0X80)//最高位为1{//发送1I2C_SDA_H;}else
//最高位为0{I2C_SDA_L;//发送0}delay_us();//延时//时钟线拉高接收器接收I2C_SCL_H;delay_us();//延时,用于等待接收器接收数据delay_us();//延时//将数据左移一位让原来第6位变为第7位dat
dat;//保存接受的数据//将数据线设置为输入SET_SDA_IN;for(i0;i8;i){//先把时钟线拉低等一段时间保证发送器发送完毕数据I2C_SCL_L;delay_us();delay_us();//保证发送器发送完数据//时钟线拉高读取数据I2C_SCL_H;delay_us();datdat1;//数值左移
一定要先左移在赋值不然数据会溢出if(I2C_SDA_READ)//pf15管脚得到了一个高电平输入{dat
(~0X1);}delay_us();}if(ack){i2c_nack();//发送非应答信号不再接收下一次数据}else{i2c_ack();//发送应答信号
//时钟线拉低接收器可以发送信号I2C_SCL_L;I2C_SDA_H;//先把数据线拉高当接收器回应应答信号时数据线会拉低delay_us();SET_SDA_IN;//设置数据线为输入delay_us();//等待从机响应delay_us();I2C_SCL_H;//用于读取数据线数据if(I2C_SDA_READ)//PF15得到一个高电平输入收到非应答信号return
1;I2C_SCL_L;//时钟线拉低让数据线处于占用状态return
*///保证数据线是输出SET_SDA_OUT;I2C_SCL_L;//拉低时钟线delay_us();I2C_SDA_L;//数据线拉低表示应答信号delay_us();I2C_SCL_H;//时钟线拉高等待发送器读取应答信号delay_us();//让从机读取我们当前的回应delay_us();I2C_SCL_L;//数据线处于占用状态发送器发送下一次数据}
//保证数据线是输出SET_SDA_OUT;I2C_SCL_L;//拉低时钟线delay_us();I2C_SDA_H;//数据线拉高表示非应答信号delay_us();I2C_SCL_H;//时钟线拉高等待发送器读取应答信号delay_us();delay_us();I2C_SCL_L;//数据线处于占用状态发送器发送下一次数据
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback