历史上的今天
返回首页

历史上的今天

今天是:2025年01月04日(星期六)

2019年01月04日 | stm32 ds18b20 温度传感器

2019-01-04 来源:eefocus

1

1


举例


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.\n");

        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\n", temp);


        delay_ms(1000);

    }

}


推荐阅读

史海拾趣

Advanced Interconnections Corp公司的发展小趣事

为了进一步提升国际竞争力,AIC公司开始实施全球化布局战略。公司先后在多个国家设立了研发中心和生产基地,以便更好地服务全球客户。同时,AIC公司还积极参加国际展览和交流活动,与海外企业建立合作关系,推动产品的全球化销售。这些举措使AIC公司的国际影响力不断提升,市场份额也进一步扩大。

Abbatron公司的发展小趣事

Abbatron公司深知合作的重要性,积极寻求与业内其他企业的合作机会。通过与某知名电子制造商的合作,Abbatron公司成功将其创新技术应用于实际产品中,进一步扩大了市场份额。这种合作模式不仅促进了双方的发展,也为整个电子行业带来了更多的可能性。

全鹏(CHAMPION)公司的发展小趣事

全鹏公司一直重视研发和创新。为了不断满足市场需求,公司投入大量资源用于新技术和新产品的研发。通过引进高素质、高学历的研发人员,建立先进的研发实验室和测试中心,全鹏公司在产品研发方面取得了显著成果。这些新技术和新产品的推出不仅提升了全鹏公司的市场竞争力,也为客户带来了更好的使用体验。

Chino-Excel公司的发展小趣事

面对日益严峻的环境问题,Chino-Excel公司积极倡导环保理念,将绿色生产贯穿于整个产业链。公司采用环保材料和节能技术,降低产品生产和运营过程中的能耗和排放。同时,公司还积极参与环保公益活动,推动整个行业向更加环保、可持续的方向发展。

Endicott Research Group Inc (ERG)公司的发展小趣事

面对日益激烈的市场竞争,ERG始终坚持技术研发和创新。他们与多所知名大学和科研机构建立合作关系,共同研发新型电源技术和照明解决方案。这些合作不仅为ERG带来了先进的技术和研发资源,还使其在行业中保持了技术领先地位。通过与科研机构的紧密合作,ERG不断推出更具创新性和竞争力的产品。

Daykin Electric Corp公司的发展小趣事

随着公司实力的不断增强,大金开始将目光投向国际市场。1972年,“DaikinEuropeN.V”在比利时奥斯坦斯市成立,标志着大金正式进入欧洲市场。此后,大金通过不断的技术创新和市场拓展,逐渐在全球范围内建立了广泛的销售网络。

问答坊 | AI 解惑

LabVIEW 实践教学教程

  一个自己用了后,感觉效率很高的LabVIEW 学习教程,两个星期包你学会使用!…

查看全部问答>

招聘照明行业研发总监

北京照明集团招聘: 研发总监(负责灯具研发、10-15k+其他) 工作职责:     1.负责公司技术中心的管理工作,制定技术人员的培训计划、负责日常工作协调、员工沟通、绩效考核等;     2.负责研究同行业节能改造的发展方向, ...…

查看全部问答>

单片机模拟比较器错误

我这里有一个程序,用TKS-936仿真时没有反应。我单片机用的是:P89LPC901 该单片机有一个比较器,由P0.4引脚输入电压,与内部参考电压进行比较,当比较器输出改变时,触压中断。 程序如下: #include \"reg932.h\"   #define &n ...…

查看全部问答>

vxworks6.6 FTP 加载错误

使用平台vxworks6.6   开发环境worksbench3.0 在config.h文件中添加了相应的FTP宏定义: #define INCLUDE_IPFTPC #define INCLUDE_IPFTPS 在编译bootrom.bin的时候,系统提示错误: undefined reference to \'ipftps_create\' unde ...…

查看全部问答>

uboot移植的问题

cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a dtt/libdtt.a driv ...…

查看全部问答>

关于U盘分区格式

我的可分区U盘,每次分为NTFS格式,可是下次看就变成了RAW格式,而且可以访问,可以正常的读写数据,还有我看到爱国者的一款虎符,分区格式为CWKD文件结构,这些东西,WINDOWS是怎么分辨出来的啊 ? 我的分区格式变为RAW是怎么回事,对数据有影响吗? 盼高手 ...…

查看全部问答>

好东东

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 东东  …

查看全部问答>

信号的提取与产生

朋友你好,我想在接下来的两年时间专门学习信号的提取与产生,但不知道从何入手,还希望知道的朋友不吝赐教!!!在这里先谢过大家…

查看全部问答>

EEWORLD大学堂TI教室 现在如何登陆啊?

如题:现在如何登陆啊。提示填写信息,弄完了还是不行,提示我已经注册过。 …

查看全部问答>

diy 可编程投影灯

可以用单片机控制来把你想要的效果投影出来,可以是动画,图片,文字等, 不知从何下手。。…

查看全部问答>