DS18B20 是由 DALLAS 半导体公司推出的一种接口的温度传感器。
与统一的热敏电阻等测温元件相比,它是一种体积小、电压宽适用、接口简单的新型
数字温度传感器。一线总线结构具有简单经济的特点,用户可以轻松构建传感器网络,
从而引入测量系统建设的新概念,测量温度范围为
-55~ 125
℃ ,精度为±
0.5
℃。现场温
直接以一线总线的数字方式传输,大大提高了系统的抗干扰性。它可以直接读取被测温度,
简单的编程可以根据实际要求实现
9~l2
位数值读数法。
3~5.5V
的电压
范围,采用多种包装形式,使系统设计灵活方便,设置分辨率和用户设置的报警温度
储在
EEPROM
中、掉电后仍保存。
//等待 DS18B20 的回应 //返回 1:未检测到 DS18B20 的存在 //返回 0:存在 u8 DS18B20_Check(void) { u8 retry=0; DS18B20_IO_IN();//SET PG11 INPUT while (DS18B20_DQ_IN&&retry<200) { retry ; delay_us(1); }; if(retry>=200)return 1; else retry=0; while (!DS18B20_DQ_IN&&retry<240) {retry ; delay_us(1); }; if(retry>=240)return 1; return 0; } //从 DS18B20 读取一个位 //返回值:1/0 u8 DS18B20_Read_Bit(void) { u8 data; DS18B20_IO_OUT();//SET PG11 OUTPUT DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN();//SET PG11 INPUT delay_us(12); if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data; } //从 DS18B20 读一个字节 ///返回值:读取的数据 u8 DS18B20_Read_Byte(void) { u8 i,j,dat; dat=0; for (i=1;i<=8;i ) { j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat; } STM32F4 开发指南(HAL 库版) ALIENTEK 探索者 STM32F407 开发板教程 462 ///写字节到 DS18B20 //dat:要写的字节 void DS18B20_Write_Byte(u8 dat) { u8 j; u8 testb; DS18B20_IO_OUT();//SET PG11 OUTPUT; for (j=1;j<=8;j ) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_OUT=0;// Write 1 delay_us(2); DS18B20_DQ_OUT=1; delay_us(60); } else { DS18B20_DQ_OUT=0;// Write 0 delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); } } } //开始温度转换 void DS18B20_Start(void) { DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0x44);// convert } //初始化 DS18B20 的 IO 口 DQ 同时检测 DS 的存在 //返回 1:不存在 //返回 0:存在 u8 DS18B20_Init(void) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOG_CLK_ENABLE(); //开启 GPIOB 时钟 GPIO_Initure.Pin=GPIO_PIN_9; //PG9
。