您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > DS18B20单总线多点式测温系统
DS18B20单总线多点式测温系统1(2011-01-1519:53:40)转载标签:ds18b20多点测量分类:DS18B20主文件:#includereg51.h#includexuanze.hunsignedintshu[]={0x30,0x31,0x32,0x33,0x34,0X35,0x36,0x37,0x38,0x39};unsignedlongt;voidflcd_1602()//当为负温度时,液晶显示可以高位为0屏蔽.{init(0x80);write_data(0x4e);//NOinit(0x81);write_data(0x4f);init(0x82);write_data(0x80);init(0x85);write_data(0x74);//temperatureinit(0x86);write_data(0x65);init(0x87);write_data(0x6d);init(0x88);write_data(0x70);init(0x89);write_data(0x65);init(0x8a);write_data(0x72);init(0x8b);write_data(0x61);init(0x8c);write_data(0x74);init(0x8d);write_data(0x75);init(0x8e);write_data(0x72);init(0x8f);write_data(0x65);init(0xc0);write_data(0x80);init(0xc1);write_data(0x80);init(0xc2);write_data(0x69);//is:init(0xc3);write_data(0x73);init(0xc4);write_data(0x3a);if((t/1000)!=0){init(0xc5);write_data(0x2d);init(0xc6);write_data(shu[t/1000]);init(0xc7);write_data(shu[t/100]);}else{init(0xc5);write_data(0xfe);init(0xc6);write_data(0x2d);init(0xc7);write_data(shu[t/100]);}init(0xc8);write_data(0x2e);init(0xc9);write_data(shu[(t0)/10]);init(0xca);write_data(shu[t]);init(0xcb);write_data(0x27);init(0xcc);write_data(0x43);init(0xcd);write_data(0x80);init(0xce);write_data(0x80);init(0xcf);write_data(0x80);}voidlcd_1602()//当为正温度时,液晶显示可以高位为0屏蔽.{init(0x80);write_data(0x4e);//NOinit(0x81);write_data(0x4f);init(0x82);write_data(0x80);init(0x84);write_data(0x80);init(0x85);write_data(0x74);//temperatureinit(0x86);write_data(0x65);init(0x87);write_data(0x6d);init(0x88);write_data(0x70);init(0x89);write_data(0x65);init(0x8a);write_data(0x72);init(0x8b);write_data(0x61);init(0x8c);write_data(0x74);init(0x8d);write_data(0x75);init(0x8e);write_data(0x72);init(0x8f);write_data(0x65);init(0xc0);write_data(0x80);init(0xc1);write_data(0x80);init(0xc2);write_data(0x69);//is:init(0xc3);write_data(0x73);init(0xc4);write_data(0x3a);if(t/10000!=0){init(0xc5);write_data(shu[t/10000]);init(0xc6);write_data(shu[t/1000]);init(0xc7);write_data(shu[t/100]);}else{if((t/1000)!=0){init(0xc5);write_data(0xfe);init(0xc6);write_data(shu[t/1000]);init(0xc7);write_data(shu[t/100]);}else{init(0xc5);write_data(0xfe);init(0xc6);write_data(0xfe);init(0xc7);write_data(shu[t/100]);}}init(0xc8);write_data(0x2e);init(0xc9);write_data(shu[(t0)/10]);init(0xca);write_data(shu[t]);init(0xcb);write_data(0x27);init(0xcc);write_data(0x43);init(0xcd);write_data(0x80);init(0xce);write_data(0x80);init(0xcf);write_data(0x80);}voidjiance()//初始化,即检测是否存在DS18B20.{unsignedchark=0;loop:DS=1;DS=0;//主机将总线从高电平拉到低电平del(100);//持续400us~960usDS=1;//然后释放总线del(10);//DS18B20检测到总线上升沿后,等待15us~60u后发低电平。k=DS;del(20);//低电平至少要持续60~240usif(k==1)//60~240us内若为高电平则要重新检测。gotoloop;}read()//从DS18B20中读出数据{unsignedchari;unsignedlongdate=0;for(i=0;i16;i++){DS=0;//主机在某一时刻将总线从高电平拉到低电平.date=1;DS=1;del(3);//保持15us将总线拉到高电平,产生读时间隙if(DS)date|=0x8000;del(8);//读数据需要持续35us~60us.}return(date);}voidmain(){unsignedlongflag=0;EA=0;SP=0X60;init(0x01);//对液晶屏初始化init(0x38);init(0x0c);init(0x06);while(1){jiance();//对DS18B20初始化matchrom();write(0x44);//启动温度变换del(100);jiance();matchrom();if(f==1){f=0;}else{write(0xbe);//读暂存存储器t=read();flag=t&0x8000;//对读取的数据进行处理if(flag==0x8000){t=~t;t=t+1;t=t*25;t=2;flcd_1602();}else{t=t*25;t=2;lcd_1602();}}}}头文件:#includexuanze.h#ifndef__XUANZE_H__#define__XUANZE_H__unsignedchark,f=0;sbitRS=P2^0;sbitRW=P2^1;sbitE=P2^2;sbitDS=P1^1;voiddel(intcount)//延时程序{while(count--);}voiddelay(unsignedintcount)//延时程序{intp;while(count--)for(p=0;p125;p++);}voidwrite(unsignedchardate)//向DS18B20中写入数据{inti;for(i=0;i8;i++)//由于是单总线每次只能写一位,一个字节需循环8次{DS=0;//主机在某一时刻将总线从高电平拉到低电平,产生写时间隙DS=date&0x01;//写入数据。del(15);//写如数据要15us,ds18b20对数据采样需要15us~60us,共需35us~70us.DS=1;date=1;}}voidinit(unsignedintn)//RW=0,RS=0;向指令寄存器中写入命令,即对1602初始化。{delay(10);E=0;RS=0;RW=0;E=1;P0=n;E=0;}voidwrite_data(unsignedcharn)//RS=1,RW=0;向数据寄存器中写入数据,即显示的数符。{delay(10);E=0;RS=1;RW=0;E=1;P0=n;E=0;}voidmatchrom()//匹配ROM{k=P3;switch(k){case0:{f=1;init(0x80);write_data(0x57);//whichinit(0x81);write_data(0x68);init(0x82);write_data(0x69);init(0x83);write_data(0x63);init(0x84);write_data(0x68);init(0x85);write_data(0x80);init(0x86);write_data(0x4e);//NOinit(0x87);write_data(0x4f);init(0x88);write_data(0x79);//youinit(0x89);write_data(0x6f);init(0x8a);write_data(0x75);init(0x8b);write_data(0x80);init(0x8c);write_data(0x57);//wantinit(0x8d);write_data(0x61);init(0x8e);write_data(0x6e);init(0x8f);write_data(0x74);init(0xc0);write_data(0x70);//pressinit(0xc1);write_data(0x72);init(0xc2);write_data(0x65);init(0xc3);write_data(0x73);init(0xc4);write_data(0x73);init(0xc5);write_data(0x80);init(0xc6);write_data(0x57);//whichinit(0xc7);write_data(0x68);init(0xc8);write_data(0x69);init(0xc9);write_data(0x63);init(0xca);write_data(0x68);init(0xcb);write_data(0x80);init(0xcc);write_data(0x6b);//keyinit(0xcd);write_data(0x65);init(0xce);write_data(0x79);init(0xcf);write_data(0x80);}break;case1:{init(0x83);write_data(0x31);//NO1write(0x55);write(0x28);write(0x30);write(0xc5);write(0xb8);write(0x00);write(0x00);write(0x00);write(0x8e);}break;case2:{
本文标题:DS18B20单总线多点式测温系统
链接地址:https://www.777doc.com/doc-4744041 .html