一、 LM75A传感器介绍

二、寄存器介绍

三、时序图

四、代码


#define LM75A_SCL_GPIO   GPIOB
#define LM75A_SCL_PIN    GPIO_Pin_8
#define LM75A_SDA_GPIO   GPIOB
#define LM75A_SDA_PIN    GPIO_Pin_7#define LM75A_SCL(value)           GPIO_WRITE_BIT(LM75A_SCL_GPIO, LM75A_SCL_PIN, value);
#define LM75A_SDA(value)           GPIO_WRITE_BIT(LM75A_SDA_GPIO, LM75A_SDA_PIN, value);
#define LM75A_READ_GPIO(value)     {value = GPIO_READ_IDB(LM75A_SDA_GPIO, LM75A_SDA_PIN);}#define SDA_H LM75A_SDA(1)
#define SDA_L LM75A_SDA(0)
#define SCL_H LM75A_SCL(1)
#define SCL_L LM75A_SCL(0)
#define SDA_read  GPIO_READ_IDB(LM75A_SDA_GPIO, LM75A_SDA_PIN)
#define I2C_delay() LM75A_DELAY
#define I2C_TM_ERR  0
#define I2C_TM_OK  1
#define LM75_ADDRESS 0x94// 0x00 temperature  0x01 conf  0x00 temperature 0x00 temperature
#define LM75A_addr                0x94
#define LM75A_REG_TEMPERATUYA     0x00
#define LM75A_REG_CONF            0x01
#define LM75A_REG_THYST           0x02
#define LM75A_REG_TOS             0x03//1NOP = 1CLOCK = 5.95ns
/*
TP min: 2.5us
TH min: 0.6us
TL min: 1.3us
*/
#define LM75A_DELAY   NOP_1000;//2.975usvoid LM75A_MDIO_Out()
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//MDIOGPIO_InitStructure.GPIO_Pin = LM75A_SDA_PIN;GPIO_Init(LM75A_SDA_GPIO, &GPIO_InitStructure);
}void LM75A_MDIO_In()
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//MDIOGPIO_InitStructure.GPIO_Pin = LM75A_SDA_PIN;GPIO_Init(LM75A_SDA_GPIO, &GPIO_InitStructure);
}void LM75A_InitGpio()
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//MDCGPIO_InitStructure.GPIO_Pin = LM75A_SCL_PIN;GPIO_Init(LM75A_SCL_GPIO, &GPIO_InitStructure);LM75A_MDIO_Out();LM75A_SCL(0);LM75A_SDA(1);
}/********************************************************************************
* 使用I2C1读写AT24C256,LM75
*******************************************************************************/u16 I2C_Start(void)
{SDA_H;SCL_H;I2C_delay();SDA_L;I2C_delay();SCL_L;I2C_delay();return (I2C_TM_OK);
}void I2C_Stop(void)
{SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SDA_H;I2C_delay();SCL_L;I2C_delay();
}void I2C_Ack(void)
{SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();
}void I2C_NoAck(void)
{        SCL_L;I2C_delay();SDA_H;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();
}u16 I2C_WaitAck(void)        //返回为:=1有ACK,=0无ACK
{SCL_L;I2C_delay();SCL_H;LM75A_MDIO_In();I2C_delay();if(SDA_read){SCL_L;return(I2C_TM_ERR);}SCL_L;LM75A_MDIO_Out();return(I2C_TM_OK);
}void I2C_SendByte(u8 SendByte)        //数据从高位到低位//
{u8 i=8;while(i--){SCL_L;I2C_delay();if(SendByte&0x80){SDA_H;}else{SDA_L;}SendByte<<=1;I2C_delay();SCL_H;I2C_delay();}SCL_L;}u8 I2C_ReceiveByte(void)        //数据从高位到低位//
{ u8 i=8;u8 ReceiveByte=0;SDA_H;while(i--){ReceiveByte<<=1;SCL_L;I2C_delay();SCL_H;I2C_delay();if(SDA_read){ReceiveByte|=0x01;}}SCL_L;return ReceiveByte;
}/*******************************************************************************
* Function Name  : I2C_LM75_Read
* Description    : Reads Temperature data from the LM75.
* Input          : None
* Output         : 0xFFFF -- Error
*                                        0x0000 ~ 0x01FF -- Valid data
*                                        Temp        Binary                                         Hex
*                                        +125        0111 1101 0xxx xxxx         0FAh
*                                        +25                0001 1001 0xxx xxxx         032h
*                                        +0.5        0000 0000 1xxx xxxx         001h
*                                        0                0000 0000 0xxx xxxx                000h
*                                        -0.5        1111 1111 1xxx xxxx         1FFh
*                                        -25                1110 0111 0xxx xxxx         1CEh
*                                        -55                1100 1001 0xxx xxxx         192h
* Return         : None
*******************************************************************************/
float I2C_LM75_Read(void)
{float temp;vu16 TempH,TempL;if(I2C_Start()==I2C_TM_ERR)return(I2C_TM_ERR);I2C_SendByte(LM75_ADDRESS);                         //器件地址if(I2C_WaitAck()==I2C_TM_ERR){I2C_Stop(); return(I2C_TM_ERR);}I2C_SendByte(0x00); //设置温度寄存器地址if(I2C_Start()==I2C_TM_ERR)return(I2C_TM_ERR);I2C_SendByte(LM75_ADDRESS | 0x01);               //设置器件地址 if(I2C_WaitAck()==I2C_TM_ERR){I2C_Stop(); return(I2C_TM_ERR);}LM75A_MDIO_In();TempH = I2C_ReceiveByte();I2C_Ack();TempL = I2C_ReceiveByte();I2C_NoAck();LM75A_MDIO_Out();I2C_Stop();temp=TempH+(TempL>>5)*0.125;return(temp);
}

LM75 --温度采集(时序及代码)相关推荐

  1. C#上位机与单片机的完美结合(内附有用户登录,注册,截图,温度采集,历史数据展示,左边菜单右边内容展示的主界面)

    基于C#的用户登录,注册界面,头像截屏,左侧菜单右边显示内容的主界面,与单片机结合的温度检测,历史数据分析,完美与SQLServer结合 1用户登录界面 2注册界面 3用户头像拍摄截取 4灯光展示 5 ...

  2. 【STM32学习】(30)STM32实现18B20温度采集(标准库和HAL库实现)

    单片机型号:STM32F103 源码下载链接:(2条消息) STM32实现18B20温度采集(标准库和HAL库实现)-电信文档类资源-CSDN下载 现要求完成温度采集并在串口或液晶屏上显示.我们这里使 ...

  3. 基于51单片机的温度采集与报警系统】

    引言 单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将设计一种基于单片机控制的温度器,本温度计属于多功能温度计,可以利用温度传感器对环境温度进行监测和显示,可以通 ...

  4. 带内部参考电压(VREFINT)校正的STM32 DMA 内置温度采集

    笔者今天来介绍一下STM32ADC内置温度的采集,重点是通过内置参考电压来避免ADC参考电压VDDA对温度ADC采集的影响. 1.STM32ADC简介   stm32F4系列ADC,逐次趋近型AD.1 ...

  5. DS18B20温度采集报警系统,原理及汇编、C语言实现

    单片机课程设计已完成,现供以参考. DS18B20单总线的工作方式 数据手册说明1: DS18B20数字温度传感器提供9-Bit到12-Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低 ...

  6. 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现

    基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙OLED数字钟的设计与实现 作者: 颜孙炜 文章目录 基于STM32F103C8T6与ESP8266的物联网智能温度采集与蓝牙O ...

  7. NTC热敏电阻温度采集与adc转换

    前言: ntc热敏电阻的R值是10k,B值是3950 使用的是STM32F103RCT6的ADC 文章目录 1.电路理论 2. NTC热敏电阻阻值与温度之间的转换 3.NTC热敏电阻温度采集与adc转 ...

  8. STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码

    STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 因为芯片的spi口只有3个,有部分需要外接W25Q128 ...

  9. Proteus 8086模拟温度采集 使用LM35温度传感器

    一.思路 使用LM35温度传感器进行温度采集,将采集到的电压值(模拟量)经过ADC0808芯片转换成数字信号经数据总线传入8086的寄存器中. 二.8086接线方式 8086的接线方式如上图所示.74 ...

  10. 多路温度采集计算机网络监测设计,多路温度信号测量与监测,数据采集 温度采集模块...

    原标题:多路温度信号测量与监测,数据采集 温度采集模块 5路热电阻温度信号转RS-485/232,温度采集转换模块 WJ25 产品特点: ● 5路温度信号采集,隔离转换 RS-485/232输出 ● ...

最新文章

  1. 牛客小白月赛25 补题+题解[A-J]
  2. linux shell 数组元素带空格,在bash中解析带有空格的JSON数组
  3. dr.web for android version 9,DrWeb安全防护
  4. 若依项目linux部署
  5. 每天一道LeetCode-----将字符串拆分成有效的ip地址
  6. Java笔记-DH密钥交换
  7. VueJS项目报错解决:router.map is not a function - 方法大全
  8. ProtoBuf3语法指南(Protocol Buffers)_下
  9. 创建你自己的AngularJS -- 第一部分 Scopes(一)
  10. go的string正则匹配_Go正则匹配 regexp | Go
  11. 缓存穿透,缓存击穿,缓存雪崩以及解决方案
  12. YYF的一些简单配置 2016-10-13
  13. 科普:一片晶圆可以切多少个芯片?
  14. python-漫天星星turtle and random
  15. 完成静态服务器——Node.js摸石头系列之四
  16. 微信公众号最佳实践 ( 9.6)地图导航
  17. Cesium实现聚光灯向舞台照射并旋转运动的效果含全部源码
  18. SAP CO组织结构及概念
  19. 游戏平台,游戏私服选择三方支付的优势
  20. 美拍应该如何引流?如何利用美拍引流?美拍引流方法

热门文章

  1. 国际贸易基础(二)备货
  2. 车辆碰撞起火事故的规律特点及常见起火原因 | 事故分析
  3. Flutter TextFiled去掉下划线
  4. excel冻结窗口怎么设置_EXCEL中隐藏、冻结、拆分窗口
  5. Zigbee协议网络相关的东西(1)
  6. Ubuntu一些名词解释
  7. Pytorch 实现手写数字识别
  8. 攻防世界-杂项-simple_transfer
  9. 买书问题的动态规划实现
  10. 使用ffpemg无损快速从视频中提取音频的操作教程(记录笔记超详细)