DS18B20单总线多点式测温系统教学文案.docx
- 文档编号:5535830
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:23
- 大小:21.03KB
DS18B20单总线多点式测温系统教学文案.docx
《DS18B20单总线多点式测温系统教学文案.docx》由会员分享,可在线阅读,更多相关《DS18B20单总线多点式测温系统教学文案.docx(23页珍藏版)》请在冰豆网上搜索。
DS18B20单总线多点式测温系统教学文案
DS18B20单总线多点式测温系统
DS18B20单总线多点式测温系统1
(2011-01-1519:
53:
40)
转载
标签:
ds18b20
多点测量
分类:
DS18B20
主文件:
#include
#include
unsigned intshu[]={0x30,0x31,0x32,0x33,0x34,0X35,0x36,0x37,0x38,0x39};
unsignedlongt;
voidflcd_1602() //当为负温度时,液晶显示可以高位为0屏蔽.
{
init(0x80);write_data(0x4e);//NO
init(0x81);write_data(0x4f);
init(0x82);write_data(0x80);
init(0x85);write_data(0x74);//temperature
init(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);//NO
init(0x81);write_data(0x4f);
init(0x82);write_data(0x80);
init(0x84);write_data(0x80);
init(0x85);write_data(0x74);//temperature
init(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~960us
DS=1; //然后释放总线
del(10); //DS18B20检测到总线上升沿后,等待15us~60u后发低电平。
k=DS;
del(20); //低电平至少要持续60~240us
if(k==1) //60~240us内若为高电平则要重新检测。
gotoloop;
}
read() //从DS18B20中读出数据
{unsignedchari;
unsignedlongdate=0;
for(i=0;i<16;i++)
{DS=0; //主机在某一时刻将总线从高电平拉到低电平.
date>>=1;
DS=1;
del(3); //保持15us将总线拉到高电平,产生读时间隙
if(DS)
date|=0x8000;
del(8); //读数据需要持续35us~60us.
}
return(date);
}
void main()
{unsignedlong flag=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();
}
}
}
}
头文件:
#include
#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;p<125;p++);
}
voidwrite(unsignedchardate)//向DS18B20中写入数据
{inti;
for(i=0;i<8;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);//which
init(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);//NO
init(0x87);write_data(0x4f);
init(0x88);write_data(0x79);//you
init(0x89);write_data(0x6f);
init(0x8a);write_data(0x75);
init(0x8b);write_data(0x80);
init(0x8c);write_data(0x57);//want
init(0x8d);write_data(0x61);
init(0x8e);write_data(0x6e);
init(0x8f);write_data(0x74);
init(0xc0);write_data(0x70);//press
init(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);//which
init(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);//key
init(0xcd);write_data(0x65);
init(0xce);write_data(0x79);
init(0xcf);write_data(0x80); }break;
case1:
{ init(0x83);write_data(0x31); //NO1
write(0x55);
write(0x28);
write(0x30);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0x8e); }break;
case2:
{ init(0x83);write_data(0x32);//NO2
write(0x55);
write(0x28);
write(0x31);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0xb9);}break;
case4:
{ init(0x83);write_data(0x33);//NO3
write(0x55);
write(0x28);
write(0x32);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0xe0); }break;
case8:
{ init(0x83);write_data(0x34); //NO4
write(0x55);
write(0x28);
write(0x33);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0xd7); } break;
case16:
{ init(0x83);write_data(0x35);//NO5
write(0x55);
write(0x28);
write(0x34);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0x52); } break;
case32:
{ init(0x83);write_data(0x36); //NO6
write(0x55);
write(0x28);
write(0x35);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0x65); }break;
case64:
{ init(0x83);write_data(0x37);//NO7
write(0x55);
write(0x28);
write(0x36);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0x3c);}break;
case128:
{ init(0x83);write_data(0x38);//NO8
write(0x55);
write(0x28);
write(0x37);
write(0xc5);
write(0xb8);
write(0x00);
write(0x00);
write(0x00);
write(0x0b); }break;
default:
{
f=1;
init(0x80);write_data(0x50);//please
init(0x81);write_data(0x6c);
init(0x82);write_data(0x65);
init(0x83);write_data(0x61);
init(0x84);write_data(0x73);
init(0x85);write_data(0x65);
init(0x86);write_data(0x80);
init(0x87);write_data(0x70);//press
init(0x88);write_data(0x72);
init(0x89);write_data(0x65);
init(0x8a);write_data(0x73);
init(0x8b);write_data(0x73);
init(0x8c);write_data(0x80);
init(0x8d);write_data(0x6f);//one
init(0x8e);write_data(0x6e);
init(0x8f);write_data(0x65);
init(0xc0);write_data(0x80);
init(0xc1);write_data(0x80);
init(0xc2);write_data(0x80);
init(0xc3);write_data(0x6b);//key
init(0xc4);write_data(0x65);
init(0xc5);write_data(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 总线 多点 测温 系统 教学 文案