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

📄 18b20.h

📁 AVR驱动18B20例子 AVR驱动18B20例子
💻 H
字号:
#ifndef __18b20_H
#define __18b20_H

#include "avr/io.h"
#include "c12864.h"


//变量类型标识的宏定义 
#define                uchar        unsigned char 
#define                uint        unsigned int  

#define   DS18B20_IO  2
#define   DS18B20_IO_DDR  DDRA
#define   DS18B20_IO_POR  PORTA
#define   DS18B20_IO_PIN  PINA

#define   DS18B20_IO_OUT  DS18B20_IO_DDR |= (1<<DS18B20_IO)//设为输出
#define   DS18B20_IO_IN   DS18B20_IO_DDR &=~(1<<DS18B20_IO)//设为输入
#define   DS18B20_IO_H    DS18B20_IO_POR |= (1<<DS18B20_IO)//置高电平
#define   DS18B20_IO_L    DS18B20_IO_POR &=~(1<<DS18B20_IO)//置低电平
#define   DS18B20_IO_DATA DS18B20_IO_PIN &(1<<DS18B20_IO)//读出电平a


//精确延时us函数
//延时时间=(n*16 + 53) 1M晶振
//延时时间=(n*3.2 + 10.6) 5M晶振
//延时时间=(n*16/6 + 53/6) 6M晶振
//延时时间=(n*2.0 + 6.62) 8M晶振
void delay_10us(unsigned int n)//3.2us
{
	while(n--);
}



//----------------------------------------------------------------------
//函数名称:DS18B20复位 												
//函数功能: 															
//注意事项:主机发送复位脉冲最少保持低电平480US,DS18B20等待15~60US 	
//提示说明:无 																
//输    入: 															
//返    回:1表示有检测到器件存在,0表示没检测到器件存在 															
//----------------------------------------------------------------------
unsigned char ds1820_reset(void) 
{ 
  unsigned char i; 
  DS18B20_IO_OUT;
  DS18B20_IO_H;
  DS18B20_IO_L;
  delay_10us(380);//延时480-960us
  DS18B20_IO_H;
  DS18B20_IO_IN;
  delay_10us(40);//延时15-60us
  i=DS18B20_IO_DATA;
  delay_10us(250);//延时>480us  
  if (i)
    {
      return 0;
    }
  else  
    {
      return 1;
    }     
} 


//-------------------------------------------------------------------- 
//函数名称:DS18B20读一个字节 
//函数功能: 
//注意事项:无 
//提示说明:无 
//输    入: 
//返    回:读出的一个字节 
//--------------------------------------------------------------------
unsigned char ds1820_read_byte(void) 
{ 
 unsigned char i,j; 
 unsigned char value = 0; 
 
 for (i = 0; i <8; i++) 
 { 
   DS18B20_IO_OUT;
   DS18B20_IO_L;
   delay_10us(1);
   DS18B20_IO_H;
   DS18B20_IO_IN; 
   j=DS18B20_IO_DATA;
   if (j)
     {
       value |=(1<<i);
     }
   else
     {
       value &=~(1<<i);
     }
   delay_10us(35);//延时>60us
 } 
 return(value); 
} 


//-------------------------------------------------------------------- 
//函数名称:DS18B20写一个字节 
//函数功能: 
//注意事项:无 
//提示说明:无 
//输    入: 
//返    回:无 
//--------------------------------------------------------------------
void ds1820_write_byte(unsigned char value) 
{ 
 unsigned char i; 
 
 for (i = 0; i <8; i++) 
  { 
    DS18B20_IO_OUT;
	DS18B20_IO_L;
    if (value&0x01)
      {
        DS18B20_IO_H;
       }
    else
      {
        DS18B20_IO_L;
      }
    delay_10us(40);//延时>64us
    DS18B20_IO_H;
    value>>=1;
  } 
} 


//-------------------------------------------------------------------- 
//函数名称:DS18B20(1个)开始转换 
//函数功能: 
//注意事项:无 
//提示说明:无 
//输    入: 
//返    回:无 
//--------------------------------------------------------------------
void ds1820_start(void) { 

 ds1820_reset(); 
 ds1820_write_byte(0xCC); //发出 Match (ROM)指令
 ds1820_write_byte(0x44); /*启动转换*/ 
} 


//-------------------------------------------------------------------- 
//函数名称:DS18B20(1个)读温度 
//函数功能: 
//注意事项:无 
//提示说明:无 
//输    入: 
//返    回:一个long型的温度值,4位小数,范围-125.0000~+125.0000
//-------------------------------------------------------------------- 
unsigned long ds1820_read_temp(void) { 

 long i; 
 float data;
 unsigned char buf[9]; 
 ds1820_reset(); 
 ds1820_write_byte(0xCC); //发出 Match (ROM)指令
 ds1820_write_byte(0xbe); //发出读取温度指令 
 for (i = 0; i < 9; i++) 
  { 
  buf[i] = ds1820_read_byte(); 
  } 
i=buf[1];
i<<=8;
i|=buf[0];
data=i*0.0625;
i=data*10000;
 return i; 
}


#endif

⌨️ 快捷键说明

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