⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 修改.c

📁 利用单片机与18B20温度测试芯片
💻 C
字号:
#include    "reg51.h"
#include    "intrins.h"
#include    "static.c"
#include    "del_us.c"
#define     uint    unsigned int
#define     uchar   unsigned char
sbit    DQ = P3^4;
bit     FLAG; 
void    Rest_1820(void)
{
    uchar i;
    FLAG = 0;
    DQ = 1;
    _nop_();
    DQ = 0;
    Delay_300us();       //建立的时间在480-960us
    Delay_300us();
    DQ = 1;
    for(i=4;i>0;i--)
    {
        Delay_15us();    //等待的时间在15-60us
        if(DQ==0)   
        {
            FLAG = 1;    //表示DS1820存在
            break;
        }
        else
        {
            FLAG = 0;
        }           
    }
    if(FLAG==1)
    {
        Delay_60us();   //延时240us 
        Delay_60us();
        Delay_60us();
        Delay_60us();       
    }
    Delay_300us();        //延时300us准备主机接收存在信号
}

void    Write_1820(uchar    value)
{
    uchar   i;
    for(i=8;i>0;i--)
    {
        DQ = 1;
        _nop_();
        DQ = 0;
        Delay_15us();    //延时15us
        DQ = value&0x01;
        Delay_60us();     //延时60us
        DQ = 1;
        value>>=1;
    }
}

uint   Read_1820(void)
{
    uchar   i;
    uint   value = 0;
    for(i=16;i>0;i--)
    {
        value>>=1;
        DQ = 1;
        _nop_();
        DQ = 0;
        _nop_();
        DQ = 1;
        Delay_15us();
        if(DQ) value |= 0x8000;
        else   value &= 0x7fff;       
        Delay_60us();    //采样后需要延时60us
    }
    DQ = 1;
    return(value);
}

void    main(void) 
{
    uchar   i;
    uint    temp;
    float   t;
    while(1)
    {
        Rest_1820();        //初始化
        if(FLAG==1)
        {
            Write_1820(0xcc);   //写入跳过序列号命令字 Skip Rom
            Write_1820(0x44);   //写入温度转换命令字 Convert T
            for(i=20;i>0;i--)
            {
                Delay_300us();
                Delay_300us();
                Delay_300us();
            }
            Rest_1820();        //初始化
            if(FLAG==1)
            {
                Write_1820(0xcc);   //写入跳过序列号命令字 Skip Rom
                Write_1820(0xbe);   //写入读取数据命令字 Read Scratchpad
                temp = Read_1820();  //读出温度
                t = temp*0.0625;
                temp = t*100;
                Static_Disp(temp);
                //while(1);
            }
        }
    }   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -