• stm32 ds18b20 温度传感器


    1

    1

    相关文章:http://blog.csdn.net/zhangxuechao_/article/details/74991985

    举例

    void DS18B20_in()
    {
        GPIO_InitTypeDef gpio = 
        {
            GPIO_Pin_11,
            GPIO_Speed_50MHz,
            GPIO_Mode_IPD
        };  
    
        GPIO_Init(GPIOG, &gpio);
    }
    
    void DS18B20_out()
    {
        GPIO_InitTypeDef gpio = 
        {
            GPIO_Pin_11,
            GPIO_Speed_50MHz,
            GPIO_Mode_Out_PP
        };  
    
        GPIO_Init(GPIOG, &gpio);
    }
    
    u8 DS18B20_check()
    {
        u8 flag = 0;
    
        DS18B20_in();
    
        while(ds18b20_in == 1)
        {
            flag++;
            if(flag > 100)
            {
                return 1;
            }
            delay_us(1); //一次循环1us
        }
    
        flag = 0;
        while(ds18b20_in == 0)
        {
            flag++;
            if(flag > 240)
            {
                return 1;
            }
            delay_us(1);
        }
    
        return 0;
    }
    
    u8 DS18B20_reset()
    {
        DS18B20_out();
    
        ds18b20_out = 0;
        delay_us(500);  
        ds18b20_out = 1;
        delay_us(1);
    
        return DS18B20_check();
    }
    
    u8 DS18B20_init()
    {
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);   
    
        return DS18B20_reset();
    }
    
    u8 DS18B20_read_bit()
    {
        DS18B20_out();
    
        ds18b20_out = 0;
        delay_us(1);
    
        ds18b20_out = 1; //释放总线
        delay_us(1);
    
        DS18B20_out();
        delay_us(15);
    
        return ds18b20_in;
    }
    
    u8 DS18B20_read()
    {
        u8 i = 0;
        u8 r, tmp;
    
        for(i = 0; i < 8; i++)
        {
            tmp = DS18B20_read_bit();
            r = (tmp << 7 | r >> 1);
    
            delay_us(45);
            ds18b20_out = 1;
            delay_us(1);
        }
        return r;
    }
    
    void DS18B20_write(u8 d)
    {
        u8 i = 0;
        u8 tmp = 0;
        DS18B20_out();
    
        for(i = 0; i < 8; i++)
        {
            tmp = d & 0x01;
            d >>= 1;
    
            ds18b20_out = 0;
            delay_us(1);
    
            if(tmp == 0)
            {
                delay_us(60);   
            }
            else
            {
                ds18b20_out = 1;            
                delay_us(60);   
            }
    
            ds18b20_out = 1;    
            delay_us(1);    
        }
    
    }
    
    void DS18B20_ChangeTemp()
    {
        DS18B20_write(0xcc); //忽略ROM 
        DS18B20_write(0x44); //温度转换
    
        return;
    }
    
    void DS18B20_ReadTemp()
    {
        DS18B20_write(0xcc); 
        DS18B20_write(0xbe); //读取RAM
    
        return;
    }
    
    u16 readTemp()
    {
        int temp = 0;
        u8 tmph = 0, tmpl = 0;
    
        DS18B20_reset(); //必须的
        DS18B20_ChangeTemp();
    
        DS18B20_reset(); //必须的
        DS18B20_ReadTemp();
    
        tmpl = DS18B20_read(); //低字节   
        tmph = DS18B20_read(); //高字节       
    
        temp = tmph;
        temp <<= 8;
        temp |= tmpl; 
    
        return temp;           
    }
    
    int main(void)
    {
        while(DS18B20_init() != 0)
        {
            printf("DS18B20_init failed.
    ");
            delay_ms(500);
        }
        while(1)
        {
            led1 = ~led1;
    
            r = readTemp();
    
            if((r & 0xf800) == 0xf800)
            {
                r = (~r) + 1;
                temp = r * (-0.0625);
            }
            else 
            {
                temp = r * 0.0625;
            }
    
            printf("temp %.2f
    ", temp);
    
            delay_ms(1000);
        }
    }
  • 相关阅读:
    结语
    创建ejs模板的express工程
    浏览器控制台命令调试——console
    JS获取URL中参数值(QueryString)的4种方法分享
    oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
    javascript 获取页面的高度及滚动条的位置的代码
    javascript 页面各种高度宽度
    导出Excel之Epplus使用教程2(样式设置)
    索引 'GXHRCS.PK_A253' 或这类索引的分区处于不可用状态
    数据库操作
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709551.html
Copyright © 2020-2023  润新知