当前位置: 首页 > news >正文

付网站建设费用计入科目湛江哪家公司建网站最好

付网站建设费用计入科目,湛江哪家公司建网站最好,小程序商城哪家好排行榜,益阳做网站怎么便宜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低。这样是比较安全的。开漏模式组成线与的关系任何一个器件都可以拉低电平。 2. 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寄存器介绍。 1. 配置寄存器 总结具体详细的看LM75的手册。 3. doem (IIC 读取LM75温度 用模拟IIC的方式来获取LM75的温度。通过串口打印出来。 硬件电路用PB6PB7GPIO口来模拟。 1. LM75的唯一地址查手册 1001  A0 1   A1 1  A2 1  0x9E 2. 指针寄存器操作 指针寄存器包含一个 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} } 最终结果打印
http://www.yutouwan.com/news/183665/

相关文章:

  • 网站前端开发培训中山建设工程有限公司
  • 系网站建设工作总结厦门企业公司电话黄页
  • 带娃儿做的工作网站谁能给我个网址
  • 公共资源交易中心平台网站优化 代码
  • 网站开发助手网站制作需要多少钱官网
  • 中英文双语网站怎么做网站建设怎么申请域名
  • 网站备案中商城服务性质是什么域名申请的流程
  • 赣州网站制作厦门seo
  • 发展速度迅猛 具有丰富的网站建设经验php做网站优点
  • 网站开发和设计实训国际欧美专线
  • thinkphp做网站好吗手机登录网站怎么建设
  • 网站会员推广邀请系统中文域名解析网站
  • 诸暨公司制作网站需要哪些群站优化之链轮模式
  • 怎么用ps做网站首页最新网游网络游戏
  • 网站开发建设明细报价表厦门网站建设方案
  • 做标书网站自己家开了一家装修公司怎么做装修网站
  • 做外贸上哪些网站找客户最先进的无锡网站建设
  • 做灯箱片的设计网站wordpress编辑器添加代码工具
  • 手机 网站开发aspxwordpress 模板调用
  • 想找一家公司设计网站电商网页设计期末作业模板
  • wordpress音乐下载百度seo一本通
  • 徐州网站建设制作公司敬请期待换个说法
  • 网站打不开了看装修案例的网站
  • 微站直播平台游戏系统网站开发说明书
  • 网络营销推广网站软件著作权和专利的区别
  • 网站建设拟采用的技术路线怎么卖wordpress主题
  • 建立公司网站时什么是重要的wordpress关闭自动保存插件
  • dnf网站上怎么做商人网站开发属于什么部门
  • 迅速网站企业网站开发用什么好
  • 公司支付的网站建设如何入账销售怎样找精准客户