资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
/=DS18b20.h=/*- DS18b20驱动程序-*/#ifndef _DS18B20_H#define _DS18B20_Htypedef enumFAILED = 0 ,PASSED = !FAILED TestStatus ;#define DQ_GPIO GPIOD#define DQ_GPIO_Pin GPIO_Pin_5/REGISTER COMMANDS#define REGISTER_9_BITS 0x1F#define REGISTER_10_BITS 0x3F#define REGISTER_11_BITS 0x5F#define REGISTER_12_BIT2 0x7F/ROM COMMANDS#define ROM_Search_Cmd 0xF0#define ROM_Read_Cmd 0x33#define ROM_Match_Cmd 0x55#define ROM_Skip_Cmd 0xCC#define ROM_AlarmSearch_Cmd 0xEC/DS18b20 FUNCTION COMMANDS#define Convert_T 0x44#define Write_Scratchpad 0x4E#define Read_Scratchpad 0xBE#define Copy_Scratchpad 0x48#define Recall_EEPROM 0x88#define Read_PowerSupply 0x84#define DQ_Write_1() GPIO_SetBits(DQ_GPIO ,DQ_GPIO_Pin) /写1#define DQ_Write_0() GPIO_ResetBits(DQ_GPIO ,DQ_GPIO_Pin)/写0#define DQ_ReadBit() GPIO_ReadInputDataBit(DQ_GPIO ,DQ_GPIO_Pin) /读DQ上的值extern void GPIO_DQ_Out_Mode(void) ; /DQ输出模式extern void GPIO_DQ_Input_Mode(void) ; /DQ输入模式extern void Tx_ResetPulse(void) ; /发送复位脉冲extern void Rx_PresencePulse(void) ; /接受应答信号extern void Write_OneByte_ToDS18b20(unsigned char data) ; /写一个字节到18b20extern unsigned char Read_OneByte_FromDS18b20(void) ; /从18b20读一个字节extern void Read_Temperature(unsigned char *sign ,unsigned char *interger , unsigned int *decimal) ; /读温度/写配置参数TH,TL和初始化配置寄存器extern void Write_EEPROM(unsigned char Th,unsigned char Tl,unsigned char Register_Con );void DS18B20_Init(void) ; /初始化#endif /*DS18B20*/=/=DS18b20.c=/#include stm32f10x_lib.h#include DS18b20.h#include SysTick_Delay.h/*函数名称:GPIO_DQ_Out_Mode功 能:设置DQ引脚为开漏输出模式参 数:无返回值 :无*/void GPIO_DQ_Out_Mode(void) GPIO_InitTypeDef GPIO_InitStructure ; GPIO_InitStructure.GPIO_Pin = DQ_GPIO_Pin ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ; /开漏输出 GPIO_Init(DQ_GPIO ,&GPIO_InitStructure) ;/*函数名称:GPIO_DQ_Input_Mode功 能:设置DQ引脚为浮空输入模式参 数:无返回值 :无*/void GPIO_DQ_Input_Mode(void) GPIO_InitTypeDef GPIO_InitStructure ; GPIO_InitStructure.GPIO_Pin = DQ_GPIO_Pin ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; /浮空输入 GPIO_Init(DQ_GPIO ,&GPIO_InitStructure) ;/*函数名称:Tx_ResetPulse功 能:发送复位脉冲参 数:无返回值 :无*/void Tx_ResetPulse(void) GPIO_DQ_Out_Mode() ; DQ_Write_0() ; /复位脉冲 Delay_Nus(500) ; /至少保持480us DQ_Write_1() ; /加速上升沿速度 Delay_Nus(1) ;/*函数名称:Rx_PresencePulse功 能:接受应答信号参 数:无返回值 :无*/void Rx_PresencePulse(void) GPIO_DQ_Input_Mode() ; while( DQ_ReadBit() ; /等待DS18b20应答 while( DQ_ReadBit() = 0) ; /DS18b20将总线拉低60240us ,然后总线由上拉电阻拉高 Delay_Nus(300) ; GPIO_DQ_Out_Mode() ; /接受完成,主机重新控制总线/*函数名称:Write_OneByte_ToDS18b20功 能:写一个字节到DS18b20参 数:无返回值 :无*/void Write_OneByte_ToDS18b20(unsigned char data) unsigned char i ; GPIO_DQ_Out_Mode() ; for(i=0 ;i= 1 ; /*函数名称:Read_OneByte_FromDS18b20功 能:从DS18b20读一个字节参 数:无返回值 :读出的数据*/unsigned char Read_OneByte_FromDS18b20(void) unsigned char i ,data = 0 ; for(i=0 ;i= 1 ; DQ_Write_0() ; Delay_Nus(2) ; GPIO_DQ_Input_Mode() ; Delay_Nus(1) ; if(DQ_ReadBit() data |= 0x80 ; Delay_Nus(70) ; /等待这一位数据完成传输 GPIO_DQ_Out_Mode() ; return data ;/*函数名称:Read_Temperatu
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号