DS18B20读取温度,序号匹配

 1 /*  DS18B20时钟端口、引脚定义 */
 2 #define DS18B20            GPIOC              
 3 #define DS18B20_Onboard    (GPIO_Pin_15)
 4 #define DS18B20_PORT_RCC   RCC_APB2Periph_GPIOC
 5 #define ds_count 20
 6 
 7 ///IO操作函数                                               
 8 #define DS18B20_DQ_OUT     PCout(15)
 9 #define DS18B20_DQ_IN      PCin(15)
10 
11 #define dsmax              6  //最多允许温度传感器的数量

配置DS18B20初始化函数,输入配置,输出配置,参考DS18B20数据手册:

 1 void DS18B20_Reset(void)
 2 {
 3     DS18B20_IO_OUT(); //SET PC15 OUTPUT
 4     DS18B20_DQ_OUT=0; //拉低DQ
 5     delay_us(750);    //拉低750us
 6     DS18B20_DQ_OUT=1; //DQ=1
 7     delay_us(35);     //35US
 8 }
 9 
10 u8 DS18B20_Check(void)
11 {
12     u8 retry=0;
13     DS18B20_IO_IN();//SET PC15 INPUT
14     while(DS18B20_DQ_IN&&retry<200)
15     {
16         retry++;
17         delay_us(1);
18     };
19     if(retry>=200) return 1;
20     else retry = 0;
21     while (!DS18B20_DQ_IN && retry <240)
22     {
23         retry++;
24         delay_us(1);
25     };
26     if(retry>=240) return 1;
27     return 0;
28 }
29 
30 u8 DS18B20_Init(void)
31 {
32     GPIO_InitTypeDef  GPIO_InitStructure;
33     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE );
34     PWR_BackupAccessCmd( ENABLE );/* 允许修改RTC和后备寄存器*/
35     RCC_LSEConfig( RCC_LSE_OFF ); /* 关闭外部低速时钟,PC14+PC15可以用作普通IO*/
36     BKP_TamperPinCmd(DISABLE);  /* 关闭入侵检测功能,PC13可以用作普通IO*/
37 
38     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
39     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
40     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
41     GPIO_Init(GPIOC, &GPIO_InitStructure);
42 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值