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

📄 ds.c

📁 在单片机上面实现对DS18B20的运用
💻 C
字号:
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define disdata  P0
#define discan  P2
sbit bin=P0^7;
sbit dq=P2^2;
uint h;
uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,
0x08,0x08,0x09,0x09,} ;
uchar code dis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff,0xbf};
uchar code scan_con[4]={0xef,0xdf,0xbf,0x7f};
uchar data temp_data[2]={0x00,0x00};
uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
delay(uint t)
{
   for(;t>0;t--);       
}
scan()
{ uchar i;
  for(i=0;i<4;i++)
  {
     disdata=dis_7[display[i]] ;
     if(i==1
     {bin=0;}
     discan=scan_con[i];delay(99);discan=0xff;
  }
}
reset(void)
{
    uchar presence=1;
    while(presence)
    {   
        while(presence)
        {
            dq=1;_nop_(); _nop_();
            dq=0;delay(50);
            dq=1;delay(6);
            presence=dq;
        }
        delay(45);
        presence=~dq;
    }
    dq=1;
}
void write_byte(uchar val)
{
    uchar i;
    for(i=8;i>0;i--)
    {
        dq=1;_nop_();_nop_();
        dq=0;_nop_();_nop_();_nop_();_nop_();_nop_();
        dq=val&0x01;delay(6);
        val=val/2;
    }
    dq=1;delay(1);    
}
uchar read_byte(void)
{
    uchar i;
    uchar value=0;
    for(i=8;i>0;i--)
    {
        dq=1;_nop_();_nop_();
        value>>=1;
        dq=0;_nop_();_nop_();_nop_();_nop_();
        dq=1;_nop_();_nop_();_nop_();_nop_();
        if(dq)
        value|=0x80;
        delay(6);
    }
    dq=1;
   return(value);
}
read_temp()
{
    reset();
    write_byte(0xcc);
    write_byte(0xbe);
    temp_data[0]=read_byte();
    temp_data[1]=read_byte();
    reset();
    write_byte(0xcc);
    write_byte(0x44);

}
work_temp()
{
    uchar n=0;
    if(temp_data[1]>127)
    {
        temp_data[1]=(256-temp_data[1]);
        temp_data[0]=(256-temp_data[0]);
        n=1;
     }
        display[4]=temp_data[0]&0x0f;
        display[0]=ditab[display[4]];
        display[4]=((temp_data[0]&0xf0>>4)|((temp_data[1]&0x0f)<<4));
        display[3]=display[4]/100;
        display[1]=display[4]%100;
        display[2]=display[1]/10;
        display[1]=display[1]%10;
        if(!display[3])
        {
            display[3]=0x0a;
            if(!display[2])
            {
                display[2]=0x0a;
            }
        }

   if(n)
   display[3]=0x0b;
}
void main()
{
    disdata=0xff;
    discan=0xff;
    for(h=0;h<4;h++)
    {
        display[h]=8;
    }
    reset();
    write_byte(0xcc);
    write_byte(0x44);
    for(h=0;h<500;h++)
    {scan();}
    while(1)
    {
        read_temp();
        work_temp();
        for(h=0;h<400;h++)
        {scan();}
    }
        
}

⌨️ 快捷键说明

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