欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 204|回复: 0

基于STC单片机的DS18B20温度程序

[复制链接]
发表于 2022-11-20 15:48:22 | 显示全部楼层 |阅读模式
/*

/*



本人承接毕业设计,程序设计,PCB设计, 电子产品维修,DIY设计,电子装配调试技能竞赛训练套件销售等方面



以下程序来源于本人编写,部分来源于官方,若遇到程序无法运行,或者其他问题可以随时于本人联系

*/
DS18B20程序是用于温度检测
*/

#include "ds18B20.h"
void init_temperature(void)       //初始化
{
            uint i;
            dstemperature=0;                     
            i=500;                   //将总线拉低480us~960us
            while(i--);
            dstemperature=1;                       //然后拉高总线,若DS18B20做出反应会将在15us~60us后将总线拉低
            i=30;                       //15us~60us等待
            while(i--);
}
/********************判忙*****************/
bit temperature_busy()       //判断忙
{
            uint i;
            bit dat;
            dstemperature=0;
            i++;          //i++ for delay
            dstemperature=1;
            i++;
            i++;
            dat=dstemperature;
            i=60;
            while(i--);
            return (dat);
}
/**********************读温度函数*******************/
uchar  read_temperature ()   //读温度出来
{
            uchar i,j,dat;
            dat=0;
            for(i=1;i<=8;i++)
    {
            j=temperature_busy();
            dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
    }
            return(dat);
}
/**********************写字节到18b20*******************/
void  writing_sequence (uchar dat)   //写命令到18B20
{
            uint i;
            uchar j;
            bit testb;
            for(j=1;j<=8;j++)
    {
            testb=dat&0x01;
            dat=dat>>1;
            if(testb)     //write 1
        {
            dstemperature=0;
            i++;
            i++;
            dstemperature=1;
            i=60;
            while(i--);
        }
            else
        {
            dstemperature=0;       //write 0
            i=60;
            while(i--);
            dstemperature=1;
            i++;i++;
        }
    }
}
uint  temperature_transformation()  //温度转换
{
            float calculation;
            uchar l8,h8;//低8位高8位
            uint temp;
            init_temperature();
            delay_ms(5);
            writing_sequence(0xcc);  // address all drivers on bus
            writing_sequence(0x44);  //  initiates a single temperature conversion
            delay_ms(6);//delay(100);
            init_temperature();
            delay_ms(5);
            writing_sequence(0xcc);
            writing_sequence(0xbe);
            l8=read_temperature();//低八位
            h8=read_temperature();//高八位
            temp=h8;
            temp<<=8;             //two byte  compose a int variable
            calculation=temp|l8;
            temp=calculation*0.0625*100+0.5; //算出来的是测到的温度,数值可到小数点后两位
                        //为了显示温度后的小数点后一位并作出四舍五入,因为取值运算不能取小数点后的数
            return temp;
}


这是本人在上中专时候写的一个程序,功能是可以实现的,如果需要按照DS18B20的标准来可能就无法满足了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2026-7-13 01:50

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表