- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本程序为单传感器温度采集,是我自己参考书中程序改写而成,增加了部分功能,使其可以显示正负温度值,并设有温度值上下限,可以声音、灯光报警。(主要器件:51单片机,ds18b20,lcd显示屏)
亲测,更改端口即可使用。
后续会上传多路温度采集系统的程序设计。
#includereg51.h
#includestdio.h
#define uchar unsigned char
#define uint unsigned int
sbit sp=P1^0;
sbit d1=P1^2;
sbit d2=P1^3;
sbit ds=P1^1;
sbit rs=P1^4;
sbit e=P1^6;
unsigned char code table0[]={TEMPERARTURE:U };
uchar table1[]=0123456789;
int temp;
float ftemp;
uint tvalue;
uint warnl=320;
uint warnh=992;
void delayms(uint ms)//延时
{
uint i,j;
for(i=ms;i0;i--)
for(j=110;j0;j--);
}
void wrcom(uchar com)//写指令
{
delayms(1);
rs=0;
//e=0;
P3=com;
delayms(1);
e=1;
delayms(1);
e=0;
}
void wrdat(uchar dat)//写数据
{
//delayms(1);
rs=1;
e=0;
P3=dat;
delayms(5);
e=1;
delayms(5);
e=0;
}
void lcdinit()//初始化lcd
{
delayms(15);
wrcom(0x38);delayms(5);
wrcom(0x0c);delayms(5);
wrcom(0x06);delayms(5);
wrcom(0x01);delayms(5);
}
void display(uchar *p)//显示
{
while(*p!=\0)
{
wrdat(*p);
p++;
delayms(1);
}
}
displayinit()//初始化显示
{
lcdinit();
wrcom(0x80);
display(table0);
}
void dsrst()//ds18b20复位
{
uint i;
ds=0;
i=103;
while(i0)i--;
ds=1;
i=4;
while(i0)i--;
}
bit dsrd0()//读一位数据
{
uint i;
bit dat;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;while(i0)i--;
return(dat);
}
uchar dsrd()//读1个字节数据
{
uchar i,j,dat;
dat=0;
for(i=8;i0;i--)
{
j=dsrd0();
dat=(j7)|(dat1);
}
return(dat);
}
void dswr(uchar dat)//写数据
{
uint i;
uchar j;
bit testb;
for(j=8;j0;j--)
{
testb=dat0x01;
dat=dat1;
if(testb)
{
ds=0;
i++;i++;
ds=1;
i=8;while(i0)i--;
}
else
{
ds=0;
i=8;while(i0)i--;
ds=1;
i++;i++;
}
}
}
void tmstart()
{
dsrst();
delayms(1);
dswr(0xcc);
dswr(0x44);
}
uint readtemp()//读取并处理温度
{
uchar a,b;
dsrst();
delayms(1);
dswr(0xcc);
dswr(0xbe);
a=dsrd();
b=dsrd();
temp=b;
temp=8;
temp=temp|a;
if(temp0)
{
d1=1;
temp=~temp+1;
wrcom(0xc0);
wrdat(0x2d);
if(tempwarnl)
{
d2=0;
sp=0;
}
else
{
d2=1;
sp=1;
}
}
else
{
wrcom(0xc0);
wrdat( );
文档评论(0)