目录
一、硬件连接:
VCC---->> 3.3v
GND----->> GND
DQ------->> PA12
二、软件实现
DS18B20.代码
#include "ds18b20.h"
#include "Delay.h"
unsigned char ResetDS18B20(void)
{
unsigned char resport;
SetDQ();
Delay_us(50);
ResetDQ();
Delay_us(500);
SetDQ();
Delay_us(40); //40us
resport = GetDQ();
Delay_us(500); //500us
SetDQ();
return resport;
}
void DS18B20WriteByte(unsigned char Dat)
{
unsigned char i;
for(i=8;i>0;i--)
{
ResetDQ();
Delay_us(5); //5us
if(Dat & 0x01)
SetDQ();
else
ResetDQ();
Delay_us(65); //65us
SetDQ();
Delay_us(2); //2us
Dat >>= 1;
}
}
unsigned char DS18B20ReadByte(void)
{
unsigned char i,Dat;
SetDQ();
Delay_us(5);
for(i=8;i>0;i--)
{
Dat >>= 1;
ResetDQ();
Delay_us(5); //5us
SetDQ();
Delay_us(5); //5us
if(GetDQ())
Dat|=0x80;
else
Dat&=0x7f;
Delay_us(65); //65us
SetDQ();
}
return Dat;
}
void DS18B20StartConvert(void)
{
ResetDS18B20();
DS18B20WriteByte(SkipROM);
DS18B20WriteByte(StartConvert);
}
void ds18b20_init(void)
{
DS18B20StartConvert();
}
float ds18b20_read(void)
{
unsigned char DL, DH;
unsigned short TemperatureData;
float Temperature;
DS18B20StartConvert();
ResetDS18B20();
DS18B20WriteByte(SkipROM);
DS18B20WriteByte(ReadScratchpad);
DL = DS18B20ReadByte();
DH = DS18B20ReadByte();
TemperatureData = DH;
TemperatureData <<= 8;
TemperatureData |= DL;
Temperature = (float)((float)TemperatureData * 0.0625);
return Temperature;
}
2,DS18B20.h代码
#ifndef __DS18B20_H
#define __DS18B20_H
#include "main.h"
#define SkipROM 0xCC
#define StartConvert 0x44
#define ReadScratchpad 0xBE
#define DS_PORT GPIOA
#define DS_DQIO GPIO_PIN_12
#define ResetDQ() HAL_GPIO_WritePin(DS_PORT,DS_DQIO,GPIO_PIN_RESET)
#define SetDQ() HAL_GPIO_WritePin(DS_PORT,DS_DQIO,GPIO_PIN_SET)
#define GetDQ() HAL_GPIO_ReadPin(DS_PORT,DS_DQIO)
void ds18b20_init(void);
float ds18b20_read(void);
#endif
主函数获取温度并用OLED显示