ds18b20多路温度采集程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本程序为ds18b20的多路温度采集程序,是我自己参考其他程序后改写而成,可显示4路正负温度值,并有上下限温度报警(声音、灯光报警)。

亲测,更改端口即可使用。(主要器件:51单片机,ds18b20,lcd 显示器)

附有proteus仿真图,及序列号采集程序

/****上限62度下限-20度****/

#include

#define uchar unsigned char

#define uint unsigned int

sbit ds=P1^1;

sbit rs=P1^4;

sbit e=P1^6;

sbit sp=P1^0;

sbit d1=P1^2;

sbit d2=P1^3;

uchar lcdrom[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},

{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},

{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},

{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}};

unsigned char code table0[]={"TEMPERARTURE:U "}; unsigned char code table1[]={"0123456789ABCDEF"};

int f[4];

int tvalue;

float ftvalue;

uint warnl=320;

uint warnh=992;

/****lcd程序****/

void delayms(uint ms)//延时

{

uint i,j;

for(i=ms;i>0;i--)

for(j=110;j>0;j--);

}

void wrcom(uchar com)//写指令{

delayms(1);

rs=0;

P3=com;

delayms(1);

e=1;

delayms(1);

e=0;

}

void wrdat(uchar dat)//写数据{

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);

. }

/****ds18b20程序****/

void dsrst()//ds18b20复位

{

uint i;

ds=0;

i=103;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

}

bit dsrd0()//读一位数据

{

uint i;

bit dat;

ds=0;i++;

ds=1;i++;i++;

dat=ds;

i=8;while(i>0)i--;

return(dat);

}

uchar dsrd()//读1个字节数据{

uchar i,j,dat;

dat=0;

for(i=8;i>0;i--)

{

j=dsrd0();

dat=(j<<7)|(dat>>1);

}

return(dat);

}

void dswr(uchar dat)//写数据{

uint i;

uchar j;

bit testb;

for(j=8;j>0;j--)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)

{

ds=0;

i++;i++;

ds=1;

i=8;while(i>0)i--;

}

else

{

ds=0;

i=8;while(i>0)i--;

ds=1;

i++;i++;

}

}

}

void tmstart()//初始化ds18b20 {

sp=1;

d1=1;

d2=1;

dsrst();

delayms(1);

dswr(0xcc);

dswr(0x44);

}

void read_dealtemp()//读取并处理温度

{

uchar i,j,t;

uchar a,b;

for(j=0;j<4;j++)

{

dsrst();

delayms(1);

dswr(0x55);

for(i=0;i<8;i++)

{

dswr(lcdrom[j][i]);//发送64位序列号}

dswr(0xbe);

a=dsrd();

b=dsrd();

相关文档
最新文档