萬用電路板

----纯属爱好,谁与共鸣

« C51写的公历转农历和星期的程序单片机驱动喇叭经验谈 »

DS18B20温度检测C51驱动程序

/***********************************************
程序名称:DS18B20温度检测C51驱动程序
简要说明:在需要调用的函数中加入i=ReadTemperature()
  读取温度并送至变量i
编    写:JiangX.net
***********************************************/
#include <AT89X52.h>
sbit DQ = P3^4;   //定义DS18B20总线I/O

/*****延时子程序*****/
void Delay_DS18B20(int num)
{
 while(num--) ;
}
 
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
 unsigned char x=0;
 DQ = 1;      //DQ复位
 Delay_DS18B20(8);   //稍做延时
 DQ = 0;      //单片机将DQ拉低
 Delay_DS18B20(80);  //精确延时,大于480us
 DQ = 1;      //拉高总线
 Delay_DS18B20(14);
 x = DQ;        //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
 Delay_DS18B20(20);
}

/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
 unsigned char i=0;
 unsigned char dat = 0;
 for (i=8;i>0;i--)
 {
  DQ = 0;  // 给脉冲信号
  dat>>=1;
  DQ = 1;  // 给脉冲信号
  if(DQ)
  dat|=0x80;
  Delay_DS18B20(4);
 }
 return(dat);
}

/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  Delay_DS18B20(5);
  DQ = 1;
  dat>>=1;
 }
}

/*****读取温度*****/
unsigned int ReadTemperature(void)
{
 unsigned char a=0;
 unsigned char b=0;
 unsigned int t=0;
 float tt=0;
 Init_DS18B20();
 WriteOneChar(0xCC);  //跳过读序号列号的操作
 WriteOneChar(0x44);  //启动温度转换
 Init_DS18B20();
 WriteOneChar(0xCC);  //跳过读序号列号的操作
 WriteOneChar(0xBE);  //读取温度寄存器
 a=ReadOneChar();   //读低8位
 b=ReadOneChar();  //读高8位
 t=b;
 t<<=8;
 t=t|a;
 tt=t*0.0625;
 t= tt*10+0.5;   //放大10倍输出并四舍五入
 return(t);
}

/*****END*****/

  • quote 2.DS18B20温度报警的编程
  • 站长,你有最新的AD89S52与DS18B20温度测量与报警的最新编程吗?就是发布的DS18B20温度报警PCB套装里的编程,我想把程序烧到单片机里,但我不会编程。如果有的话请发到我的邮箱774264656@qq.com。非常感谢、、、、、最好能快点。。。。。
  • 2010-10-19 18:15:51 回复该留言
  • quote 1.tcren
  • 恩,网站办的很不错啊,加油~~~
    jiangx 于 2008-10-21 21:50:37 回复
    呵呵
  • 2008-10-21 20:06:47 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

赞助商广告

最近发表

热文排行

最新评论及回复

广告

图标汇集

Powered By Z-Blog 1.8 Walle Build 100427

Copyright 2008-2011 JiangX.com 萬用電路板 All Rights Reserved.
鄂ICP备08003060号 [login]