你好,可以给你的ds18b20简介多点测温的程序给我吗??万分感谢

ds18b20 此程序为 的多点测温 ,试验成功。分享给大家。 SCM 单片机开发 254万源代码下载-
&文件名称: ds18b20& & [
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 2 KB
&&上传时间:
&&下载次数: 111
&&提 供 者:
&详细说明:此程序为DS18b20的多点测温程序,试验成功。分享给大家。-DS18b20 this procedure for the multi-point measurement procedure, the pilot project is successful. For everyone to share.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&[]:很好,推荐下载&[]:很好,推荐下载
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站254万海量源码库中尽情搜索:
&[] - 美国DALAS公司的温度传感器ds1820芯片具有高灵敏度、易用性、编程布线简单等优点,被应用到工控行业的各种产品中。
本C51源码能够实现稳定的一线多点测温系统,液晶显示温度值。结合硬件的通信即可实现远程多点测温。本c51的ds1820的c语言驱动程序通过实践使用,程序效率高、稳定准确,可直接使
&[] - ds18b20多点测温,单片机为AT89s52,液晶显示,实时时钟显示.
&[] - ds18b20的C51 程序 doc格式 多点温度检测
&[] - 介绍ds18b20的基本特性,和基于DS18B20设计的多点测温系统。给出了系统硬件连线及软件流程。
&[] - ds18b20 实现多点温度测量和显示,带CRC校验。
&[] - ds18b20多点测温程序
自己调试通过
&[] - 数字温度计设计任务书,详细的代码,详细的电路图,试验通过,可直接运行,硬件采用89S51单片机,18B20温度传感器
&[] - ucosii在2812上的移植,用于dsp嵌入式的开发,这是书中光盘中的源码
&[] - 美国DALAS公司的温度传感器ds1820芯片具有高灵敏度、易用性、编程布线简单等优点,被应用到工控行业的各种产品中。
本C51源码能够实现稳定的一线多点测温系统,液晶显示温度值。结合硬件的通信即可实现远程多点测温。本c51的ds1820的c语言驱动程序通过实践使用,程序效率高、稳定准确,可直接使
&[] - 单总线多点测温系统,单总线它采用单根信号线既传输时钟又传输数据,而且数据传输是双向的它具有节省I/O 口线资源结构简单成本低廉便于总线扩展和
维护等诸多优点。本系统中所有的ds18b20都接在单片机的P1.1口上。用一个液晶屏显示,从单片机P3口接上8个开关,与右边的DS18B20
编号对应。当基于DS18B20 的多点测温方法_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于DS18B20 的多点测温方法
上传于||文档简介
&&主​要​介​绍​了​多​个​D​S8​B0​测​温​的​两​种​硬​件​连​接​方​式​,​供​大​家​选​择​使​用​。
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
你可能喜欢嵌入式(73)
单片机(37)
DS18B20多点测温(读序列,匹配序列,程序,显示)
&&&&&&& 由于本人在前两天找多点测温(程序),网上下载了很多,但是都不是很理想,后来,自己总结前人的知识,重新写了这个程序。其中包括程序一:单个读序列号。程序二,匹配并且读两个,当然,读多个与读两个基本原理一样,只要加上其序列号等即可。本程序所有显示都是用显示。
程序一:度序列号,并用显示,从左到右分别是低到高位。
#include&reg51.h&
#define&uchar&unsigned&char
#define&uint&unsigned&int
sbit&DQ=P3^7;//ds18b20与单片机连接口
sbit&RS=P3^0;
sbit&RW=P3^1;
sbit&EN=P3^2;
unsigned&char&code&str1[]={&&&&&&&&&&&&&&&&};
unsigned&char&code&str2[]={&&&&&&&&&&&&&&&&};
uchar&fCode[8];
uchar&data&disdata[5];
uint&//温度值
uchar&//温度正负标志
/*************************lcd1602程序
void&delay1ms(unsigned&int&ms)//延时毫秒(不够精确的)
&&& unsigned&int&i,j;
&&& for(i=0;i&i++)
&&&&for(j=0;j&100;j++);
void&wr_com(unsigned&char&com)//写指令
&& delay1ms(1);
&&&delay1ms(1);
&&&delay1ms(1);
void&wr_dat(unsigned&char&dat)//写数据
&& delay1ms(1);;
&&&delay1ms(1);
&&&delay1ms(1);
void&lcd_init()//初始化设置
&& delay1ms(15);
&&wr_com(0x38);delay1ms(5);
&&wr_com(0x08);delay1ms(5);
&&wr_com(0x01);delay1ms(5);
&&wr_com(0x06);delay1ms(5);
&&wr_com(0x0c);delay1ms(5);
void&display(unsigned&char&*p)//显示
&&& while(*p!='\0')
&&&&&& wr_dat(*p);
&&&&&& p++;
&&&&&& delay1ms(1);
void&init_play()//初始化显示
&& &lcd_init();
&&&&wr_com(0x80);
&&&&display(str1);
&&&&wr_com(0xc0);
&&&&display(str2);
/******************************ds1820&*********************/
void&delay_18B20(unsigned&int&i)//延时微秒
&&&while(i--);
void&ds1820rst()/*ds1820复位
&&&&uchar&x=0;
&&&&DQ&=&1;&&&&&&&&&&//DQ复位
&&& delay_18B20(4);&//延时
&&& DQ&=&0;&&&&&&&&&&//DQ拉低
&&& delay_18B20(100);&//精确延时大于
&&& DQ&=&1;&&&&&&&&&&//拉高
&&& delay_18B20(40);&
uchar&ds1820rd()/*读数据
&&& uchar&i=0;
&&& uchar&dat&=&0;
&&& for&(i=8;i&0;i--)
&&&&&&& DQ&=&0;&//给脉冲信号
&&&&&&& dat&&=1;
&&&&&&& DQ&=&1;&//给脉冲信号
&&&&&&& if(DQ)
&&&&&&& dat|=0x80;
&&&&&& delay_18B20(10);
&&& return(dat);
void&ds1820wr(uchar&wdata)/*写数据
&&& uchar&i=0;
&&&&for&(i=8;&i&0;&i--)
&&&&& &DQ&=&0;
&&&&&& DQ&=&wdata&0x01;
&&&&&& delay_18B20(10);
&&&&&& DQ&=&1;
&&&&&& wdata&&=1;
read_temp()/*读取温度值并转换
&&& uchar&a,b;
&&& ds1820rst();&&&&
&&& ds1820wr(0xcc);//*跳过读序列号
&&& ds1820wr(0x44);//*启动温度转换
&&& ds1820rst();&&&&
&&& ds1820wr(0xcc);//*跳过读序列号
&&& ds1820wr(0xbe);//*读取温度
&&& a=ds1820rd();
&&& b=ds1820rd();
&&& tvalue=b;
&&& tvalue&&=8;
&&& tvalue=tvalue|a;
&&&&if(tvalue&0x0fff)
&&& tflag=0;
&&&&&&& tvalue=~tvalue+1;
&&&&&&& tflag=1;
&&& tvalue=tvalue*(0.625);//温度值扩大倍,精确到位小数
&&& return(tvalue);
/*******************************************************************/
void&ds1820disp()//温度值显示
&&&& uchar&
&&&&&disdata[0]=tvalue/x30;//百位数
&&&&&disdata[1]=tvalue%;0x30;//十位数
&&&&&disdata[2]=tvalue%100/10+0x30;//个位数
&&&&&disdata[3]=tvalue%10+0x30;//小数位
&&&&&if(tflag==0)
&&&&&flagdat=0x20;//正温度不显示符号
&&&&&&&flagdat=0x2d;//负温度显示负号
&&&&&if(disdata[0]==0x30)
&&&&&&&& disdata[0]=0x20;//如果百位为,不显示
&&&&&& &if(disdata[1]==0x30)
&&&&&&&&&&& disdata[1]=0x20;//如果百位为,十位为也不显示
&&&&wr_com(0xc0);
&&&&wr_dat(flagdat);//显示符号位
&&&&wr_com(0xc1);
&&&&wr_dat(disdata[0]);//显示百位
&&&&wr_com(0xc2);
&&&&wr_dat(disdata[1]);//显示十位&
&&&&wr_com(0xc3);
&&&&wr_dat(disdata[2]);//显示个位&
&&&&wr_com(0xc4);
&&&&wr_dat(0x2e);//显示小数点&
&&&&wr_com(0xc5);
&&&&wr_dat(disdata[3]);//显示小数位
void&DispCode()
&&& unsigned&char&i,
&& ds1820rst();
&& ds1820wr(0x33);
&&&for&(i=0;i&8;i++)
&&&& &fCode[i]=ds1820rd();
&wr_com(0x80+0x40);&
&for&(i=0;i&8;i++)
&&&&& temp&=&fCode[i]&&4;&//显示高四位
&&&&& if&(temp&10)&
&&&& &wr_dat(temp&+&0x30);
&&&&wr_dat(temp&+&0x37);
&&& temp&=&fCode[i]&0x0f;//显示低四位
&&if&(temp&10)&
&&& wr_dat(temp+&0x30);
&&&&wr_dat(temp&+&0x37);
/********************主程序
void&main()
&&& init_play();//初始化显示
&&& DispCode(); &&//系列号显示
&&& delay1ms(1000);
&&&while(1)
&&&&&&& //read_temp();//读取温度
&&&&&&& //ds1820disp();//显示
程序二:匹配序列号,并读温度。
#include&&reg51.h&
#include&&intrins.h&
#define&uchar&unsigned&char
#define&uint&unsigned&int
sbit&RS=P3^0;
sbit&RW=P3^1;
sbit&EN=P3^2;
sbit&DQ=P3^7;
uchar&code&str1[]={0x28,0x08,0xA7,0xBA,0x02,0x00,0x00,0x18}; //ROM&1
uchar&code&str2[]={0x28,0x0C,0xBA,0xBA,0x02,0x00,0x00,0x54}; //ROM2&
uchar&code&table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00}; //&摄氏温度符号
uchar&data&disdata[5];
uint&//温度值
uchar&//温度正负标志
/*************************lcd1602程序
void&delay1ms(uint&ms)//延时毫秒(不够精确的)
&&& uint&i,j;
&&&&for(i=0;i&i++)
&&&&for(j=0;j&100;j++);
void&wr_com(uchar&com)//写指令
&&&& delay1ms(1);
&&&&&RS=0;
&&&&&RW=0;
&&&&&EN=0;
&&&&&delay1ms(1);
&&&&&EN=1;
&&&&&delay1ms(1);
&&&&&EN=0;
void&wr_dat(uchar&dat)//写数据
&&&& delay1ms(1);;
&&&&&RS=1;
&&&&&RW=0;
&&&&&EN=0;
&&&&&delay1ms(1);
&&&&&EN=1;
&&&&&delay1ms(1);
&&&&&EN=0;
void&wr_new() &&&//写新字符
&&& uchar&i;
&&& wr_com(0x40);
&&& for(i=0;i&8;i++)
&&&&&& wr_dat(table[i]);
void&lcd_init()//初始化设置
&&& delay1ms(15);
&& &wr_com(0x38);delay1ms(5);
&&& wr_com(0x08);delay1ms(5);
&&& wr_com(0x01);delay1ms(5);
&& &wr_com(0x06);delay1ms(5);
&&& wr_com(0x0c);delay1ms(5);
&&& wr_new();
&&& wr_com(0x80);
&&&&wr_dat('A');
&&& wr_com(0x81);
&&&&wr_dat(':');
&& &wr_com(0x89);
&&&&wr_dat(0x00);
&&& wr_com(0x8a);
&&&&wr_dat('C');
&&& wr_com(0xc9);
&&&&wr_dat(0x00); //摄氏温度字符
&&& wr_com(0xca);
&&&&wr_dat('C');
&&& wr_com(0xc0);
&&&&wr_dat('B');
&&& wr_com(0xc1);
&&&&wr_dat(':');
/******************************ds1820程序
void&delay_18B20(uint&i)//延时微秒
&&&&&while(i--);
void&ds1820rst()/*ds1820复位
&&& uchar&x=0;
&&& DQ&=&1;&&&&&&&&&&//DQ复位
&&& delay_18B20(4);&//延时
&&& DQ&=&0;&&&&&&&&&&//DQ拉低
&&& delay_18B20(100);&//精确延时大于
&&& DQ&=&1;&&&&&&&&&&//拉高
&&& delay_18B20(40);&
uchar&ds1820rd()/*读数据
&& &uchar&i=0;
&&&&uchar&dat&=&0;
&&& for&(i=0;i&8;i++)
&&& && DQ&=&0;&//给脉冲信号
&&&&& &dat&&=1;
&&&&&& DQ&=&1;&//给脉冲信号
&&&&&& if(DQ)
&&&&&& dat|=0x80;
&&&&&& delay_18B20(10);
&&&return(dat);
void&ds1820wr(uchar&dat)/*写数据
&&&& uchar&i=0;
&&&&for&(i=0;&i&8;&i++)
&&&&&&& DQ&=&0;
&&&& && DQ&=&dat&0x01;
&&&& && delay_18B20(10);
&&&& && DQ&=&1;
&&&& && dat&&=1;
void&b20_Matchrom(uchar&a) &//匹配
&&& char&j;
&&& ds1820wr(0x55); &&&//发送匹配命令
&&& if&(a==1)
&&&&&&& for(j=0;j&8;j++)
&&&&&&& ds1820wr(str1[j]); //发送的序列号,先发送低字节&
&&& if(a==2)
&&&&&& for(j=0;j&8;j++)
&&&&&&& ds1820wr(str2[j]); //发送的序列号,先发送低字节&
uchar&read_temp(uchar&z)/*读取温度值并转换
&&& uchar&a,b;
&&& float&
&&& ds1820rst();&&&&
&&& ds1820rst();&
&&& if(z==1)
&&&&&&& b20_Matchrom(1); &//匹配
&&& if(z==2)
&&&&&&& b20_Matchrom(2); &//匹配
&& ds1820wr(0xbe);//*读取温度
&& a=ds1820rd();//低位
&& b=ds1820rd();//高位
&& tvalue=b;
&& tvalue&&=8;
&& tvalue=tvalue|a;
&&&&if(tvalue&0x0fff)
&&&&tflag=0;
&&&&&&& tvalue=~tvalue+1;
&&&&&&& tflag=1;
&&& tt=tvalue*0.0625;
&&& tvalue=tt*10;
&&& return(tvalue);
/*****************显示函数
void&ds1820disp(uchar&z)//温度值显示
&&&& uchar&
&&&&&disdata[0]=tvalue/x30;//百位数
&&&&&disdata[1]=tvalue%;0x30;//十位数
&&&&&disdata[2]=tvalue%100/10+0x30;//个位数
&&&&&disdata[3]=tvalue%10+0x30;//小数位
&&&&&if(tflag==0)
&&&&&flagdat=0x20;//正温度不显示符号
&&&&&&&flagdat=0x2d;//负温度显示负号
&&&&&if(disdata[0]==0x30)
&&&&&&& disdata[0]=0x20;//如果百位为,不显示
&&&&&& &if(disdata[1]==0x30)
&&&&&&&&&& &disdata[1]=0x20;//如果百位为,十位为也不显示
&& &if(z==1)
&&&&&&& wr_com(0x82);
&&&&&& &wr_dat(flagdat);//显示符号位
&&&&&& &wr_com(0x83);
&&&&& &&wr_dat(disdata[0]);//显示百位
&&&&&&& wr_com(0x84);
&&&&&& &wr_dat(disdata[1]);//显示十位&
&&&&&& &wr_com(0x85);
&&&&& &&wr_dat(disdata[2]);//显示个位&
&&&&&& &wr_com(0x86);
&&&&&& &wr_dat(0x2e);//显示小数点&
&&&&&& &wr_com(0x87);
&&&&& &wr_dat(disdata[3]);//显示小数位
&&if(z==2)
&&&& &wr_com(0xc2);
&&&& &wr_dat(flagdat);//显示符号位
&&&&& wr_com(0xc3);
&&&&& wr_dat(disdata[0]);//显示百位
&&&& &wr_com(0xc4);
&&&& &wr_dat(disdata[1]);//显示十位&
&&&& &wr_com(0xc5);
&&&&& wr_dat(disdata[2]);//显示个位&
&&&&& wr_com(0xc6);
&&&&& wr_dat(0x2e);//显示小数点&
&&&&& wr_com(0xc7);
&&&&& wr_dat(disdata[3]);//显示小数位
/********************主程序
void&main()
&&&&lcd_init();//初始化显示
&&&&while(1)
&&&&&& &read_temp(1);//读取温度
&&&&&&& ds1820disp(1);//显示
&&&&&&& read_temp(2);//读取温度
&&&&&&& ds1820disp(2);//显示
//&&&& &delay1ms(10000);
文章转载处链接:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:131959次
积分:2179
积分:2179
排名:第12303名
原创:74篇
转载:69篇
评论:42条
(2)(3)(4)(7)(17)(5)(1)(10)(2)(6)(7)(1)(6)(1)(3)(4)(2)(15)(16)(4)(28)能不能把您的DS18B20多点测温程序发给我,我都编了一个多星期了,不行啊!谢谢_百度知道
能不能把您的DS18B20多点测温程序发给我,我都编了一个多星期了,不行啊!谢谢
提问者采纳
用在什么单片机上呢?
提问者评价
其他类似问题
为您推荐:
ds18b20的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁数字温度传感器DS18B20在多点测温系统中的应用_甘勇_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
数字温度传感器DS18B20在多点测温系统中的应用_甘勇
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
你可能喜欢

我要回帖

更多关于 ds18b20简介 的文章

 

随机推荐