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

📄 ds18b20_driver.c

📁 单片机温度采集系统
💻 C
字号:

/********************************************************************
//模 块 名 :  温度采集演示程序
//创 建 者 :  杨 勇	 
      日期 :   2007年4月29日 17:20				
//修 改 者 : 									
      日期 :
//功能描述 :  
//其他说明 :  22.1184MHz晶振 
//芯片型号 :   AT89S52
//配    置 : 
//版    本 :  V1.0
********************************************************************/


#include <reg52.h>                           //包含51单片机的头文件
#include<absacc.h>
#include<stdio.h>

#define uint unsigned int
#define uchar unsigned char


sbit dq=P3^7;


void delay(uchar usecinds);
uchar ow_reset(void);
uchar read_byte(void);
void write_byte(char val);
int Read_Temperatuture(void);


/*=============================================================================
//函 数 名:  void delay(uchar useconds)
//参    数:  无
//返 回 值:  int
//函数功能:  读取温度函数
//编 写 者:  杨 勇
//编写日期:  2007年4月29日 18:11
===============================================================================*/
int Read_Temperatuture(void)
{
  union{
	     uchar c[2];
		 int x;
		}temp;

  ow_reset();
  write_byte(0xcc);       //跳过ROM
  write_byte(0xbe);       //读RAM
  temp.c[1]=read_byte();
  temp.c[0]=read_byte();
  ow_reset();
  write_byte(0xcc);
  write_byte(0x44);       //开始翻转
  return temp.x/2;
}

/*=============================================================================
//函 数 名:  uchar read_byte(void)
//参    数:  无
//返 回 值:  uchar 
//函数功能:  读取一个字节函数
//编 写 者:  杨 勇
//编写日期:  2007年4月29日 18:11
===============================================================================*/

uchar read_byte(void)
{
   uchar i;
   uchar value=0;
   for(i=8;i>0;i--)
   {
	 value>>=1;
	 dq=0;                        // 低电平
	 dq=1;                        // 返回高电平
     delay(2);
	 if(dq)value|=0x80;
	 delay(12);
	}
	return(value);
}

/*=============================================================================
//函 数 名:  void write_byte(char val)
//参    数:  无
//返 回 值:  uchar 
//函数功能:  写一个字节函数
//编 写 者:  杨 勇
//编写日期:  2007年4月29日 18:11
===============================================================================*/

void write_byte(char val)
{
   uchar i;
   for(i=8;i>0;i--)               //一次写一个字节
   {
	  dq=0;
	  dq=val&0x01;
	  delay(10);                   //端口悬挂
	  dq=1;
	  val=val/2;
	}
	delay(10);
}


/*=============================================================================
//函 数 名:  uchar read_byte(void)
//参    数:  无
//返 回 值:  uchar 
//函数功能:  复位函数
//编 写 者:  杨 勇
//编写日期:  2007年4月29日 18:11
===============================================================================*/
uchar ow_reset(void)
{
   uchar presence;
   dq=0;                   //设低电平
   delay(58);              //延时480us
   dq=1;                   //高电平
   delay(6);               //等待
   presence=dq;            //取允许信号
   delay(50);
   return(presence);       //返回允许信号
}


/*=============================================================================
//函 数 名:  void delay(uchar useconds)
//参    数:  uchar useconds
//返 回 值:  无
//函数功能:  延时函数
//编 写 者:  杨 勇
//编写日期:  2007年4月29日 18:11
===============================================================================*/

void delay(uchar useconds)
{
  for(;useconds>0;useconds--);
}

⌨️ 快捷键说明

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