举报
#include "DS18b20.h" #include "myfun.h" /******************************************************* +-------------------------------------+ | 振南电子 驱动程序模块 DS18B20 部分 | +-------------------------------------+ 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知 严禁随意用于商业目的,违者必究,后果自负 振南电子 ->产品网站 http://www.znmcu.cn/ ->产品网店 http://shop.znmcu.cn/ ->产品咨询 QQ:987582714 MSN:yzn07@126.com WW:yzn07 ********************************************************/ /****************************************************************** - 功能描述:DS18B20初始化 - 隶属模块:DS18B20模块 - 函数属性:外部,供用户使用 - 参数说明:无 - 返回说明:返回值为0说明初始化成功,否则失败 - 注:初始化是正确操作DS18B20是重要一步,必须初始化成功 ******************************************************************/ unsigned char DS18B20_Init() { unsigned char x=0; DQ=1; //DQ复位 delay(96); //稍做延时 DQ=0; //单片机将DQ拉低 delay(960); //精确延时 大于 480us DQ=1; //拉高总线 delay(168); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(240); return x; } /****************************************************************** - 功能描述:从DS18B20读取一个字节 - 隶属模块:DS18B20模块 - 函数属性:内部 - 参数说明:无 - 返回说明:从DS18B20读到的字节 - 注:无 ******************************************************************/ unsigned char DS18B20_ReadByte() { unsigned char i=0,dat=0; for(i=0;i<8;i++) { DQ=0; //给脉冲信号 dat>>=1; DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay(48); } return(dat); } /****************************************************************** - 功能描述:向DS18B20写入一个字节 - 隶属模块:DS18B20模块 - 函数属性:内部 - 参数说明:dat:将要向DS18B20写入字节 - 返回说明:无 - 注:无 ******************************************************************/ void DS18B20_WriteByte(unsigned char dat) { unsigned char i=0; for(i=0;i<8;i++) { DQ=0; DQ=dat&0x01; delay(60); DQ=1; dat>>=1; } } /****************************************************************** - 功能描述:从DS18B20中读取温度 - 隶属模块:DS18B20模块 - 函数属性:外部,供用户使用 - 参数说明:无 - 返回说明:由于返回的温度是浮点数(即小数),为了方便返回的值将为原 值的100倍,即精确到小数点后2位,用户需要对返回值除以100 得到实际的温度值 - 注:这里读取温度是以DS18B20的最高精度来读取的,即12位 ******************************************************************/ unsigned int DS18B20_ReadTemperature() { unsigned int t=0; DS18B20_Init(); DS18B20_WriteByte(0xcc); // 跳过读序号列号的操作 DS18B20_WriteByte(0x44); // 启动温度转换 DS18B20_Init(); DS18B20_WriteByte(0xcc); //跳过读序号列号的操作 DS18B20_WriteByte(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 ((unsigned char *)&t)[1]=DS18B20_ReadByte(); ((unsigned char *)&t)[0]=DS18B20_ReadByte(); return (t!=1360)?(t*6.25):0; //DS18B20有一个常见的问题,即所谓的85问题 //刚上电时可能读回的温度值是85,这是错误的值,应舍弃 } DS18b20.h复制 #ifndef _DS18B20_H_ #define _DS18B20_H_ #include "reg51.h" /******************************************************* +-------------------------------------+ | 振南电子 驱动程序模块 DS18B20 部分 | +-------------------------------------+ 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知 严禁随意用于商业目的,违者必究,后果自负 振南电子 ->产品网站 http://www.znmcu.cn/ ->产品网店 http://shop.znmcu.cn/ ->产品咨询 QQ:987582714 MSN:yzn07@126.com WW:yzn07 ********************************************************/ sbit DQ=P1^4; //DS18B20的数据端 unsigned char DS18B20_Init(); unsigned char DS18B20_ReadByte(); void DS18B20_WriteByte(unsigned char dat); unsigned int DS18B20_ReadTemperature(); #endif
#ifndef _DS18B20_H_ #define _DS18B20_H_ #include "reg51.h" /******************************************************* +-------------------------------------+ | 振南电子 驱动程序模块 DS18B20 部分 | +-------------------------------------+ 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知 严禁随意用于商业目的,违者必究,后果自负 振南电子 ->产品网站 http://www.znmcu.cn/ ->产品网店 http://shop.znmcu.cn/ ->产品咨询 QQ:987582714 MSN:yzn07@126.com WW:yzn07 ********************************************************/ sbit DQ=P1^4; //DS18B20的数据端 unsigned char DS18B20_Init(); unsigned char DS18B20_ReadByte(); void DS18B20_WriteByte(unsigned char dat); unsigned int DS18B20_ReadTemperature(); #endif
#ifndef _MYFUN_H_ #define _MYFUN_H_ /******************************************************* +------------------------------------+ |振南电子 原创程序模块 公共函数部分 | +------------------------------------+ 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知 严禁随意用于商业目的,违者必究,后果自负 振南电子 ->产品网站 http://www.znmcu.cn/ ->产品论坛 http://bbs.znmcu.cn/ ->产品网店 http://shop.znmcu.cn/ ->产品咨询 QQ:987582714 MSN:yzn07@126.com WW:yzn07 ********************************************************/ void delay(unsigned int time); //延时函数 void u32tostr(unsigned long dat,char *str); //将一个32位的变量dat转为字符串 unsigned long strtou32(char *str); //将一个字符串转为32位的变量 #endif myfun.c复制 #include "myfun.h" #include "string.h" /******************************************************* +------------------------------------+ |振南电子 原创程序模块 公共函数部分 | +------------------------------------+ 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知 严禁随意用于商业目的,违者必究,后果自负 振南电子 ->产品网站 http://www.znmcu.cn/ ->产品论坛 http://bbs.znmcu.cn/ ->产品网店 http://shop.znmcu.cn/ ->产品咨询 QQ:987582714 MSN:yzn07@126.com WW:yzn07 ********************************************************/ /****************************************************************** - 功能描述:延时函数 - 隶属模块:公开函数模块 - 函数属性:外部,用户可调用 - 参数说明:time:time值决定了延时的时间长短 - 返回说明:无 - 注:..... ******************************************************************/ void delay(unsigned int time) { while(time--); } /****************************************************************** - 功能描述:将一个32位的变量dat转为字符串,比如把1234转为"1234" - 隶属模块:公开函数模块 - 函数属性:外部,用户可调用 - 参数说明:dat:带转的long型的变量 str:指向字符数组的指针,转换后的字节串放在其中 - 返回说明:无 ******************************************************************/ void u32tostr(unsigned long dat,char *str) { char temp[20]; unsigned char i=0,j=0; i=0; while(dat) { temp[i]=dat%10+0x30; i++; dat/=10; } j=i; for(i=0;i<j;i++) { str[i]=temp[j-i-1]; } if(!i) {str[i++]='0';} str[i]=0; } /****************************************************************** - 功能描述:将一个字符串转为32位的变量,比如"1234"转为1234 - 隶属模块:公开函数模块 - 函数属性:外部,用户可调用 - 参数说明:str:指向待转换的字符串 - 返回说明:转换后的数值 ******************************************************************/ unsigned long strtou32(char *str) { unsigned long temp=0; unsigned long fact=1; unsigned char len=strlen(str); unsigned char i; for(i=len;i>0;i--) { temp+=((str[i-1]-0x30)*fact); fact*=10; } return temp; }
#include "myfun.h" #include "string.h" /******************************************************* +------------------------------------+ |振南电子 原创程序模块 公共函数部分 | +------------------------------------+ 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知 严禁随意用于商业目的,违者必究,后果自负 振南电子 ->产品网站 http://www.znmcu.cn/ ->产品论坛 http://bbs.znmcu.cn/ ->产品网店 http://shop.znmcu.cn/ ->产品咨询 QQ:987582714 MSN:yzn07@126.com WW:yzn07 ********************************************************/ /****************************************************************** - 功能描述:延时函数 - 隶属模块:公开函数模块 - 函数属性:外部,用户可调用 - 参数说明:time:time值决定了延时的时间长短 - 返回说明:无 - 注:..... ******************************************************************/ void delay(unsigned int time) { while(time--); } /****************************************************************** - 功能描述:将一个32位的变量dat转为字符串,比如把1234转为"1234" - 隶属模块:公开函数模块 - 函数属性:外部,用户可调用 - 参数说明:dat:带转的long型的变量 str:指向字符数组的指针,转换后的字节串放在其中 - 返回说明:无 ******************************************************************/ void u32tostr(unsigned long dat,char *str) { char temp[20]; unsigned char i=0,j=0; i=0; while(dat) { temp[i]=dat%10+0x30; i++; dat/=10; } j=i; for(i=0;i<j;i++) { str[i]=temp[j-i-1]; } if(!i) {str[i++]='0';} str[i]=0; } /****************************************************************** - 功能描述:将一个字符串转为32位的变量,比如"1234"转为1234 - 隶属模块:公开函数模块 - 函数属性:外部,用户可调用 - 参数说明:str:指向待转换的字符串 - 返回说明:转换后的数值 ******************************************************************/ unsigned long strtou32(char *str) { unsigned long temp=0; unsigned long fact=1; unsigned char len=strlen(str); unsigned char i; for(i=len;i>0;i--) { temp+=((str[i-1]-0x30)*fact); fact*=10; } return temp; }
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
3
36
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号