微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机的ds18b20驱动程序

51单片机的ds18b20驱动程序

时间:12-01 来源:互联网 点击:
//////////////////////////////////////////////////////头文件///////////////////////////////////////////////////////

/*******************************************************************************

* 标题: 18b20温度芯片驱动程序 *

* 文件: 18b20.h 18b20.c *

* 日期: 2010-3-11 *

* 版本: 1.12(试验通过版)可用51hei单片机开发板 *

* 邮箱: acsdf139@163.com qq:526083029 *

* 网站: 无 *

********************************************************************************

* 描述: *

* 用法:首先在主程序内添加头文件#include"18b20.c" *

* 在程序中使用ReadTemp();获取温度芯片内数据 *

* 使用 temp_to_str();函数将时间数据转换液晶字符 *

* *

********************************************************************************

*自己参照网上,朋友,以及书本资料上写的,所以没有版权 *

*此程序,可用于学习,参考及实际设计中,欢迎转载复制以及建议批评 *

*qq:526083029 小张 *

********************************************************************************/

#ifndef _18B20_H_

#define _18B20_H_

#define uchar unsigned char

#define rerom1820 0x33 // 读ROM指令

#define matchrom1820 0x55 // 匹配ROM指令

#define skiprom1820 0xCC // 跳过ROM指令

#define searchrom1820 0xF0 // 搜索ROM指令

#define alarmsearch1820 0xEC // 报警搜索指令

#define wrscratchpad1820 0x4E // 写暂存寄存器指令

#define rescratchpad1820 0xBE // 读暂存寄存器指令

#define copyscratchpad1820 0x48 // 复制暂存寄存器指令

#define convert1820 0x44 // 启动温度转换指令

#define recalle21820 0xB8 // 重新调出E2PROM的数据

/***********ds18b20延迟子函数*******/

extern void delaydq(uchar i);

/**********ds18b20初始化函数**********************/

extern void dqinit(void);

/***********ds18b20读一个字节**************/

extern uchar re1820b(void);

/*************ds18b20写一个字节****************/

extern void wr1820b(uchar dat);

extern void ReadTemp(void);

extern void temp_to_str();

#endif

///////////////////////////////////////////////////////////c程序//////////////////////////////////////////////

#include

#include "18b20.h"

#include

//管脚定义

sbit DQ=P3^0;

uchar TempBuffer[8];

uchar temp_value,temp2,xs,fflag;

/*************************************

函数名:delaydq

函数功能:延时

参数:i(秒数)

返回:无

备注:无

*************************************/

void delaydq(uchar i)

{

while(i--);

}

/*************************************

函数名:dqinit

函数功能:初始化

参数:无

返回:无

备注:无

*************************************/

void dqinit(void)

{

uchar x=0;

DQ = 1; //DQ复位

delaydq(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delaydq(80); //精确延时 大于 480us

DQ = 1; //拉高总线

delaydq(14);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

delaydq(20);

}

/*************************************

函数名:re1820b

函数功能:读数据

参数:无

返回:dat(数据)

备注:无

*************************************/

uchar re1820b(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delaydq(4);

}

return(dat);

}

/*************************************

函数名:wr1820b

函数功能:写数据

参数:dat(数据)

返回:无

备注:无

*************************************/

void wr1820b(uchar dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top