資源簡介
親測可用的代碼,硬件平臺為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();?//數(shù)據(jù)引腳推挽輸出
GPIO_ResetBits(GPIOBGPIO_Pin_12);
delay_us(500);?//延時至少490us
Data_GPIO_Mode_Config_In(); //切換GPIO模式為上拉輸入?數(shù)據(jù)引腳為高電平
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的自動增益控制電路的設計
評論
共有 條評論