STM32开发手册-DS18B20 数字温度传感器实验

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值