资源简介
亲测可用的代码,硬件平台为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的自动增益控制电路的设计
相关资源
- STM32F103驱动ILI9341DS18B20RTCADCIRED
- STM32汉字系统菜单
- STM32F4 EMWIN开发手册_V3.1.pdf
- STM32F103RB最小系统原理图+PCB
- STM32 四通道4-20mA模拟量采集板485接口
- STM32F746串口收发
- STM32 RS232串口控制
- 基于stm32的单相逆变代码可调压调频
- 基于STM32C8t6实现的温度控制系统
- stm32GPIO模拟spi驱动NRF2401
- STM32程序。多串口。DMA方式。C代码
- STM32F407+LWIP+DP83848+多端口
- 基于stm32的lcd1602
- STM32F103C8舵机控制程序,原创支持12舵
- STM32驱动8位并口ILI9225G彩屏
- stm32f429+FATFS+SD卡项目模版
- STM32F746工程模板
- keil 4 stm32 液晶显示正弦波
- stm32f4 dcmi连接OV2640串口发送
- lcd STM32 SPI三线通信驱动
- STM32F1读取SBUS接收机数据
- 基于STM32F103的循迹避障智能小车.zip
- 模拟电磁曲射炮STM32代码.zip
- STM32驱动BH1750环境光强度传感器(GY
- RFID_RC522战舰程序
- STM32fF103ZET6读取max30100心率传感器值
- 基于STM32F103的数据采集系统设计
- stm32+MPU6050+GPS+SD卡读写+ad采集+串口输
- STM32f103多串口程序 32单片机程序 亲测
- STM32使用SHT10进行温湿度测量
评论
共有 条评论