• 大小: 1.15MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-24
  • 语言: 其他
  • 标签: STM32  DS18B20  

资源简介

亲测可用的代码,硬件平台为STM32 代码使用STM32 IO口内弱上拉电阻,不需要额外上拉电阻

资源截图

代码片段和文件信息

#include “stm32f10x.h“
#include “stdio.h“
//Data_Wire=>PB12
extern void delay_ms(uint32_t a);
extern void delay_us(uint32_t a);
extern void OLED_ShowString(u8 xu8 yu8 *chr);
extern void OLED_ShowChinese(u8 xu8 yu8 no);


//uint8_t flag=0;
void Data_GPIO_Mode_Config_Out(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE);  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOB &GPIO_InitStructure);
}
void Data_GPIO_Mode_Config_In(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE);  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOB &GPIO_InitStructure);
}
void DS18B20_Reset(void)
{
Data_GPIO_Mode_Config_Out(); //数据引脚推挽输出
GPIO_ResetBits(GPIOBGPIO_Pin_12);
delay_us(500); //延时至少490us
Data_GPIO_Mode_Config_In(); //切换GPIO模式为上拉输入 数据引脚为高电平
while (GPIO_ReadInputDataBit(GPIOBGPIO_Pin_12));
while (!GPIO_ReadInputDataBit(GPIOBGPIO_Pin_12));
// flag=1;
}
void DS18B20_WriteByte(uint8_t Data) 
{
uint8_t i=0;
Data_GPIO_Mode_Config_Out();
for (i=0;i<8;i++)
{
  GPIO_ResetBits(GPIOB GPIO_Pin_12);  //D18B20 = 0;
     delay_us(2);
if(Data&0x01) GPIO_SetBits(GPIOBGPIO_Pin_12);
else  GPIO_ResetBits(GPIOBGPIO_Pin_12);
  delay_us(45);  
GPIO_SetBits(GPIOB GPIO_Pin_12);  //D18B20=1;
Data>>= 1;
}
Data_GPIO_Mode_Config_In();
}
uint8_t DS18B20_ReadByte(void)
{
uint8_t iData=0;
for(i=0;i<8;i++)
{
Data_GPIO_Mode_Config_Out();
GPIO_ResetBits(GPIOB  GPIO_Pin_12);     //D18B20 = 0;
delay_us (2);
Data_GPIO_Mode_Config_In();
delay_us (5);
if(GPIO_ReadInputDataBit(GPIOB GPIO_Pin_12) == 1)
Data|=(0x01< delay_us (50);
}

return Data;
}
uint16_t GetTemp(void)
{
uint8_t T_L=0T_H=0;
uint16_t T=0;
DS18B20_Reset();
  DS18B20_WriteByte(0xCC); 
DS18B20_WriteByte(0x44);
while (!GPIO_ReadInputDataBit(GPIOB GPIO_Pin_12));
DS18B20_Reset();
DS18B20_WriteByte(0xCC); 
DS18B20_WriteByte(0xBE); 
T_L=DS18B20_ReadByte();
T_H=DS18B20_ReadByte();
DS18B20_Reset();

T=T_H;
return (T<<8)|T_L;
}
void OLED_ShowTemp(void)
{
  float T=0;
uint8_t TBuf[10]={0};
T= 0.0625*GetTemp();
    sprintf((char *)TBuf“%.2f“T);
OLED_ShowString(486TBuf);
OLED_ShowChinese(8867);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2595  2017-05-30 00:30  DS18B20 温度检测\18B20.c

     文件     431769  2014-08-26 10:16  DS18B20 温度检测\18b20x.pdf

     文件     396700  2014-08-26 10:16  DS18B20 温度检测\18b20[1].pdf

     文件     470349  2014-08-26 10:16  DS18B20 温度检测\18B20中文.pdf

     目录          0  2017-07-10 18:08  DS18B20 温度检测

----------- ---------  ---------- -----  ----

              1301413                    5


评论

共有 条评论