网站开发项目介绍pptwordpress网页不存在
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:35
当前位置: 首页 > news >正文
网站开发项目介绍ppt,wordpress网页不存在,wordpress主题无法更换,怎么看网站是用什么系统做的1. IIC通信 1.IIC的介绍 IIC总线有两条串行线#xff0c;其一是时钟线SCK#xff08;同步#xff09;#xff0c;其二是数据线SDA。只有一条数据线属于半双工。应用中#xff0c;单片机常常作为主机#xff0c;外围器件可以挂载多个。#xff08;当然主机也可以有多个。…1. IIC通信 1.IIC的介绍 IIC总线有两条串行线其一是时钟线SCK同步其二是数据线SDA。只有一条数据线属于半双工。应用中单片机常常作为主机外围器件可以挂载多个。当然主机也可以有多个。多个主机都要访问从机需要仲裁机制。每一个从机器件都拥有唯一的一个地址。 这样才能区分主机与哪个从机通信。如下图 有两个从机与一个主机。 由于在设置SDA,SCL两个串行时GPIO时都会设置成开漏模式。开漏模式需要通过上拉电阻拉到高电平。 那么为什么不用复用推挽呢都知道推挽能输出稳定的高低电平。当某一主机SDA为高某一从机SDA为低。那么很可能短路。如果是开漏带上拉电阻的。就直接上拉电阻流向从机SDA低。这样是比较安全的。开漏模式组成线与的关系任何一个器件都可以拉低电平。
- IIC的时序图 分为起始信号数据传输应答信号停止信号。 1. 起始信号 停止信号 2. 数据传输信号 在SCL高电平时SDA必须稳定不变。等待从机读取。所以在SCL低电平时才可以改变。 3.应答信号。 总结我们在起始信号之后主机开始发送传输的数据在串行时钟线 SCL 为低电平状态时SDA 允许改变传输的数据位1 为高电平0 为低电平在SCL 为高电平状态时SDA 要求保持稳定相当于一个时钟周期传输 1bit 数据经过8 个时钟周期后传输了 8bit 数据即一个字节。第8 个时钟周期末主机释放SDA 以使从机应答在第 9 个时钟周期从机将 SDA 拉低以应答如果第 9 个时钟周期SCL 为高电平时SDA 未被检测到为低电视为非应答表明此次数据传输失败。第 9 个时钟周期末从机释放 SDA 以使主机继续传输数据如果主机发送停止信号此次传输结束。我们要注意的是数据以8bit 即一个字节为单位串行发出其最先发送的是字节的最高位。 3.IIC具体详细的数据帧格式 具体注意主机给从机呢还是从机给主机发送。看颜色的不同。 4. IIC 实现的方式 对于有些51单片机可能没有IIC的硬件驱动。要用模拟GPIO的方式来实现。但现在的单片机都会有 硬件的IIC驱动。直接用就好了。 2. LM75温度传感器 1.LM75的概述 1. LM75的AD转换原理 内部的温度传感器感知一个模拟信号。 2. LM75框图 内部有一个温度传感器。通过操作指针寄存器读取温度传感器的值。 3. 温度怎么保存及怎么计算。 4. LM75寄存器介绍。
- 配置寄存器 总结具体详细的看LM75的手册。
- doem (IIC 读取LM75温度 用模拟IIC的方式来获取LM75的温度。通过串口打印出来。 硬件电路用PB6PB7GPIO口来模拟。 1. LM75的唯一地址查手册 1001 A0 1 A1 1 A2 1 0x9E
- 指针寄存器操作 指针寄存器包含一个 8 位的数据字节低 2 位是其它 4 个寄存器的指针值高 6 位等于 0 见指针寄 存器表格表 3 和指针值表格表 4 。指针寄存器对于用户来说是不可访问的但通过将指针数据字节 包含到总线命令中可选择进行读/ 写操作的数据寄存器。 配置寄存器01 3. 读温度寄存器的流程 4. 写配置寄存器的流程 总结代码都是按流程来的。配合流程一起看。 my_i2c_soft.h #ifndef MY_I2C_SOFT_H #define MY_I2C_SOFT_H /** brief: 软件I2C的实现 /#include gd32f10x.h#define I2C_SOFT_RCU RCU_GPIOB #define I2C_SOFT_PORT GPIOB #define I2C_SOFT_SCL_PIN GPIO_PIN_6 #define I2C_SOFT_SDA_PIN GPIO_PIN_7void my_i2c_init(void); / i2c的初始化 /void my_i2c_start(void); / i2c的起始 / void my_i2c_stop(void); / i2c的结束 /void my_i2c_send_byte(uint8_t byte_to_send); / SDA发送一个byte / uint8_t my_i2c_read_byte(void); / SDA读取一个byte /void my_i2c_ack(void); / 主机应答 / void my_i2c_nack(void); / 主机非应答 / uint8_t my_i2c_read_ack(void); / 从机应答 /#endifmy_i2c_soft.c #include my_i2c_soft.h #include systick.hvoid my_i2c_w_SDA(uint8_t bit_value) {gpio_bit_write(I2C_SOFT_PORT, I2C_SOFT_SDA_PIN, (bit_status)bit_value);delay_1us(10); }void my_i2c_w_SCL(uint8_t bit_value) {gpio_bit_write(I2C_SOFT_PORT, I2C_SOFT_SCL_PIN, (bit_status)bit_value);delay_1us(10); }uint8_t my_i2c_r_SDA(void){return gpio_input_bit_get(I2C_SOFT_PORT, I2C_SOFT_SDA_PIN); }//初始化函数 void my_i2c_init(void){rcu_periph_clock_enable(I2C_SOFT_RCU);/ 开漏模式 /gpio_init(I2C_SOFT_PORT, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, I2C_SOFT_SCL_PIN|I2C_SOFT_SDA_PIN);gpio_bit_set(I2C_SOFT_PORT, I2C_SOFT_SCL_PIN|I2C_SOFT_SDA_PIN); }//i2c的起始 void my_i2c_start(void){//SDA高SCL高SDA低SCL低; my_i2c_w_SDA(1);my_i2c_w_SCL(1);my_i2c_w_SDA(0);my_i2c_w_SCL(0); / 为传输数据做准备只有SCL才可以改变数据 / }//i2c的结束 void my_i2c_stop(void){my_i2c_w_SDA(0);my_i2c_w_SCL(1);my_i2c_w_SDA(1); }//SDA发送一个byte void my_i2c_send_byte(uint8_t byte_to_send){uint8_t i;for(i 0; i 8; i){my_i2c_w_SDA(byte_to_send (0x80i));my_i2c_w_SCL(1); / 从机来读 /my_i2c_w_SCL(0);} }//SDA读一个byte uint8_t my_i2c_read_byte(void){uint8_t result 0x00;my_i2c_w_SDA(1); / 主机释放 /uint8_t i;for(i 0; i 8; i){my_i2c_w_SCL(1);if(my_i2c_r_SDA())result result | (0x80 i);//读SDA的bit值my_i2c_w_SCL(0);}return result; }//主机应答 void my_i2c_ack(void){my_i2c_w_SCL(0);my_i2c_w_SDA(0);my_i2c_w_SCL(1);my_i2c_w_SCL(0); }//主机非应答 void my_i2c_nack(void){my_i2c_w_SCL(0);my_i2c_w_SDA(1);my_i2c_w_SCL(1);my_i2c_w_SCL(0); }//主机读应答 uint8_t my_i2c_read_ack(void){uint8_t ack_result;my_i2c_w_SDA(1); / 主机释放 /my_i2c_w_SCL(1);ack_result my_i2c_r_SDA();my_i2c_w_SCL(0);return ack_result; }lm75a_temp.h #ifndef __LM75A_TEMP_H #define __LM75A_TEMP_H#include gd32f10x.h #include my_i2c_soft.h#define LM75A_I2C_ADDR 0x9E / LM75A的从机地址 /#define LM75A_TEMP_REG 0x00 / 温度寄存器的指针地址 / #define LM75A_CONF_REG 0x01 / 配置寄存器Conf/ #define LM75A_THYST_REG 0x10 / 滞后寄存器Thyst / #define LM75A_TOS_REG 0x11 / 过热关断寄存器Tos */#define IIC_WRITE 0 #define IIC_READ 1void lm75a_init(void);float lm75a_get_temp(void); //获取温度传感器的温度值void lm75a_poweroff(uint8_t id_rw,uint8_t reg_addr,uint8_t data); //关断温度传感器void lm75a_read_reg(uint8_t lm75a_id, uint8_t reg, uint8_t p, uint8_t len); //读温度寄存器的值 uint8_t lm75a_write_addr(uint8_t id_rw, uint8_t reg_addr);#endiflm75a_temp.c #include lm75a_temp.h #include systick.hvoid lm75a_init(void){my_i2c_init(); }// 读温度传感器的温度寄存器的值并转换为温度值 float lm75a_get_temp(void){float temp_result;//读温度寄存器值uint8_t byte_data[2];lm75a_poweroff(LM75A_I2C_ADDR | IIC_WRITE, LM75A_CONF_REG,0x00); / 开启LM75 /lm75a_read_reg(LM75A_I2C_ADDR, LM75A_TEMP_REG, byte_data, 2);delay_1ms(100); / 需要延时100ms /lm75a_poweroff(LM75A_I2C_ADDR | IIC_WRITE, LM75A_CONF_REG,0x01); / 关闭LM75 ///将温度寄存器值转为温度值uint16_t temp_reg byte_data[0]3 | byte_data[1]5;/ 判断D10是正负还是负数 0正 1:负数 */if((temp_reg 0x0400) 0){temp_result temp_reg * 0.125;}else{temp_reg (~((temp_reg0x03ff)-1)) 0x03ff; //补码到原码转换temp_result temp_reg * (-0.125);}return temp_result; }/*** 功能读温度寄存器的值 输入uint8_t lm75a_id lm75a的iic从机地址uint8_t reg要操作的寄存器的指针uint8_t p读取结果存放的位置uint8_t len寄存器的字节长度1 or 2 返回无 ****/ void lm75a_read_reg(uint8_t lm75a_id, uint8_t reg, uint8_t *p, uint8_t len){//向iic总线上写入器件地址、指针字节lm75a_write_addr(lm75a_id|IIC_WRITE, reg);my_i2c_start();my_i2c_send_byte(lm75a_id|IIC_READ);my_i2c_read_ack();uint8_t i;for(i 0; i len; i){p my_i2c_read_byte();if(i ! (len-1))my_i2c_ack();}my_i2c_nack();my_i2c_stop(); }/** 输入uint8_t id_rw从机地址|读写标识 */ uint8_t lm75a_write_addr(uint8_t id_rw, uint8_t reg_addr){my_i2c_start();my_i2c_send_byte(id_rw);my_i2c_read_ack();my_i2c_send_byte(reg_addr);my_i2c_read_ack();return 0; }void lm75a_poweroff(uint8_t id_rw,uint8_t reg_addr,uint8_t data) //关断温度传感器 {lm75a_write_addr(id_rw, reg_addr);my_i2c_send_byte(data);my_i2c_read_ack();my_i2c_stop();}main.c #include stdio.h #include systick.h #include usart_comm.h #include lm75a_temp.hint main(){systick_config();usart0_init(9600);float temp_result;char temp_string[80];lm75a_init();while(1){temp_result lm75a_get_temp();sprintf(temp_string, temperature is: %.3f C.\n, temp_result); / 把浮点转成字符 */usart0_send_string((uint8_t )temp_string); / 打印温度 */delay_1ms(1000); //等待1s} } 最终结果打印
- 上一篇: 网站开发项目教程答案成都网站建设网站建设哪家好
- 下一篇: 网站开发项目经理岗位职责长沙马拉松线上
相关文章
-
网站开发项目教程答案成都网站建设网站建设哪家好
网站开发项目教程答案成都网站建设网站建设哪家好
- 技术栈
- 2026年03月21日
-
网站开发项目合同书福建做网站
网站开发项目合同书福建做网站
- 技术栈
- 2026年03月21日
-
网站开发项目合同平台戚里带崇墉
网站开发项目合同平台戚里带崇墉
- 技术栈
- 2026年03月21日
-
网站开发项目经理岗位职责长沙马拉松线上
网站开发项目经理岗位职责长沙马拉松线上
- 技术栈
- 2026年03月21日
-
网站开发项目名免费建设网站制作
网站开发项目名免费建设网站制作
- 技术栈
- 2026年03月21日
-
网站开发项目团队重庆电商网站
网站开发项目团队重庆电商网站
- 技术栈
- 2026年03月21日



