资源简介
亲测可用的代码,硬件平台为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
- 上一篇:epsonLQ-136驱动
- 下一篇:基于AD603的自动增益控制电路的设计
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- 单片机与温度传感器DS18B20的程序设计
- 毕业论文之温度传感器DS18B20(源码
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- 51单片机读取温度数据存储到SD卡中并
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- DS18B20分布式多点测温的Proteus仿真
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
评论
共有 条评论