普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2261|回复: 0

DS18B20温度模块

[复制链接]

22

主题

24

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2021-1-14 09:54:22 | 显示全部楼层 |阅读模式
/*****************************
功能:和DS18B20温度传感器通信,读出传感器数据,转换为温度值用数码管显示
欢迎各位交流单片机学习困惑和编程思路  QQ30777103

******************************/
#include <reg52.h>
#include "ds18b20.h"
#define Duan1 P0

sbit s1=P1^0;
sbit s2=P1^1;
sbit s3=P1^2;


uchar smg[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};

void main()
{
        uint i,temp;
        float tp;
        while(1)
        {
               
                tp=readtemp();
                temp=tp*0.0625*10+0.5;
                for(i=0;i<3;i++)
                {


                        switch(i)
                        {
                                case 0:s1=0;s2=0;s3=0; Duan1=~smg[temp/100]; break;
                                case 1:s1=1;s2=0;s3=0; Duan1=~smg[temp%100/10]|0x80;break;
                                case 2:s1=0;s2=1;s3=0; Duan1=~smg[temp%100%10];break;
                        }
                delayus(200);
                }
               
        }
}

子程序:DS18B20.C
#include "DS18B20.H"
#include "intrins.h"

void delayus(uint t)
{
        while(t--);
}
uchar Ds_Init()
{
        uchar i;
        ds=0;
        delayus(70);
        ds=1;
        delayus(14);
        while(ds)
        {
                delayus(100);
                i++;
                if(i>5)
                return 0;
               
        }
        return 1;
}

bit ds_read_bit()
{
        bit dat;
        ds=0;
        _nop_();
        _nop_();
        ds=1;
        _nop_();
        dat=ds;
        delayus(9);
        return dat;
       
}

uchar ds_read_byte()
{
        uchar i,dat,j;
        for(i=0;i<8;i++)
        {
                j=ds_read_bit();
                dat=dat>>1;
                dat=(j<<7)|dat;
               
        }
        return dat;
}


void ds_write_bit(bit dat)
{
        ds=0;
       
        _nop_();
        _nop_();
        ds=dat;
        delayus(8);
        ds=1;
        _nop_();
               
}

void ds_write_byte(uchar dat)
{
        uchar i;
        bit j;
        for(i=0;i<8;i++)
        {
                j=dat&0x01;
                ds_write_bit(j);
                dat=dat>>1;
        }
        delayus(1);
}

void changetemp()
{
        Ds_Init();
        delayus(100);
        ds_write_byte(0xcc);
        ds_write_byte(0x44);
        delayus(200);
}

uint readtemp()
{
        uint temp=0;
        uchar th,tl;
        changetemp();
        Ds_Init();
        delayus(5);
        ds_write_byte(0xcc);
        ds_write_byte(0xbe);
        tl=ds_read_byte();
        th=ds_read_byte();
        temp=th;
        temp<<=8;
        temp|=tl;
        return temp;
}

头文件:DS18B20.H
#ifndef _DS18B20_H_
#define _DS18B20_H_

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit ds=P2^2;

void delayus(uint t);
uchar Ds_Init();
bit ds_read_bit();
uchar ds_read_byte();
void ds_write_bit(bit dat);
void ds_write_byte(uchar dat);

void changetemp();
uint readtemp();
#endif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-25 09:22 , Processed in 0.087054 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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