LetAllLinesOfCodeSpeak

/****************************************************************************************************************

*************************

*Author:JYW

*Time:2019_04_03

*Describe:LetAllLinesOfCodeSpeak

*****************************************************/

 

/*************************************************
*Auther:JYW
*Time:2019_04_02
*Describe:03基础实验17_DS18B20温度实验代码学习
Ds18b20.c的练习
******************************/
#include"ds18b20.h"

#define Ds18b20IO P0_7

void Delay_us(unsigned int k)
{
    T1CC0L = 0x06;
    T1CC0H = 0x00;
    T1CTL = 0x02;//模模式,不分频
    while(k)
    {
        while(!(T1CNTL >= 0x04));
        k--;
    }
    T1CTL = 0x00;
}

void Delay_ms(unsigned int k)
{
    T1CC0L = 0xe8;
    T1CC0H = 0x03;
    T1CTL = 0x0A; //0000 1010 32分频 模模式
    while(k)
    {
        while(!((T1CNTL >= 0xE8)&&(T1CNTH >= 0x03)));
        k--;
    }
    T1CTL = 0x00;

}

void Delay_s(unsigned int k)
{
    while(k)
    {
        Delay_ms(1000);
        k--;
    }
}

void Ds18b20Delay(unsigned int k)
{
    unsigned int i,j;
    for(i=0;i<k;i++)
        for(j = 0;j<2;j++);
}

void Ds18b20InputInitial(void)
{
    P0DIR &= 0x7F;
}

void Ds18b20OutputInitial(void)
{
    P0DIR |= 0x80;
}

unsigned char Ds18b20Initial(void)
{
    unsigned char Status = 0x00;
    unsigned int CONT_1 = 0;
    unsigned char Flag_1 = 1;
    Ds18b20OutputInitial();
    Ds18b20IO = 1;
    Ds18b20Delay(260);
    Ds18b20IO = 0;
    Ds18b20Delay(750);
    Ds18b20IO = 1;
    Ds18b20InputInitial();
    while((Ds18b20IO != 0)&&(Flag_1 == 1))
    {
        CONT_1++;
        Ds18b20Delay(10);
        if(CONT_1 > 8000) Flag = 0;
        Status = Ds18b20IO;
    
    }
    Ds18b20OutputInitial();
    Ds18b20IO = 1;
    DS18b20Delay(100);
    return Status;//返回初始化状态
}

void Ds18b20Write(unsigned char infor)
{
    unsigned int i;
    Ds18b20OutputInitial();
    for(i=0; i<8; i++)
    {
        if((infor & 0x01))
        {
            Ds18b20IO = 0;
            Ds18b20Delay(6);
            Ds18b20IO = 1;
            Ds18b20Delay(50);
        }
        else
        {
            Ds18b20IO  = 0;
            Ds18b20Delay(50);
            Ds18b20IO = 1;
            Ds18b20Delay(6);
        }
        infor >>= 1;
    
    }


}

unsigned char Ds18b20Read(void)
{
    unsigned char Value = 0x00;
    unsigned int i;
    Ds18b20OutputInitial();
    Ds18b20IO = 1;
    Ds18b20Delay(10);
    for(i=0; i<8; i++)
    {
        Value >>= 1;
        Ds18b20OutputInitial();
        Ds18b20IO = 0;
        Ds18b20Delay(3);
        Ds18b20IO = 1;
        Ds18b20Delay(3);
        Ds18b20InputInitial();
        if(Ds18b20IO == 1)  Value |= 0x80;
        Ds18b20Delay(15);
    }
    return Value;

}

unsigned char ReadDs18b20(void)
{
    unsigned char V1,V2;//定义高低8位
    unsigned char temp;
    
    Ds18b20Initial();
    Ds18b20Write(0xcc);
    Ds18b20write(0x44);
    
    Ds18b20Initial();
    Ds18b20Write(0xcc);
    Ds18b20Write(0xbe);
    
    V1 = Ds18b20Read();//低位
    V2 = Ds18b20Read();
    temp = ((V1 >> 4) + ((V2 & 0x07)*16));//转换数据
    
    return temp;
}

float floatReadDs18B20(void)
{
    unsigned char V1, V2;
    unsigned int temp;
    float fValue;
    Ds18b20Initial();
    Ds18b20Write(0xcc);
    Ds18b20Write(0x44);
    
    Ds18b20Initial();
    Ds18b20Write(0xcc);
    Ds18b20Write(0xbe);
    
    V1 = Ds18b20Read();
    V2 = Ds18b20Read();//高
    //读取顺序为 先低位再高位
    
    temp = V2*0xFF + V1;//temp为int
    fValue = temp* 0.0625;
//
        return fValue;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值