51单片机单总线控制两个DS18B20

  • 格式:docx
  • 大小:12.72 KB
  • 文档页数:6

下载文档原格式

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

#in clude

#defi ne uchar un sig ned char

#defi ne uint un sig ned int sbit DQ=P1A 0;

sbit rs=P2A0; sbit rw=P2A1;

sbit e=P2A2;

uchar temp1,temp2;

II 定义两个存放温度的变量 //uchar ID[8]; 〃存放DS18B20的64位序列号的数组

uchar code ID_1[]={0x28,0x3a,0x24,0xc6,0x02,0x00,0x00,0xa4}; II 第一个 DS18B20 的序列号

uchar code ID_2[]={0x28,0x66,0xa2,0xc1,0x02,0x00,0x00,0x26};

II 第二个 DS18B20 的序列号 uchar code table[]="0123456789";

uchar code table_temp[]="tempreture:";

uchar code table_0[]="C :

/****************************************************/ II50us 的延时函数 IILCD1602写指令 IILCD1602写数据 IILCD1602 初 始 IIds18b20初始化 IIwhile ( t--)延时函数 IIDS18B20初始化函数 IIds18b20写一个字节函数 IIds18b20读一个字节函数

uchar readtempl(void); uchar

readtemp2(void); void display(void);

I*void readrom(void) II 读取温度传感器

的序列号子函数 {

ini t_ds18b20();

delay_50us(2);

write_byte(0x33);

ID[0]=read_byte();

ID[1]=read_byte();

ID[2]=read_byte();

ID[3]=read_byte();

ID[4]=read_byte();

ID[5]=read_byte();

ID[6]=read_byte();

ID[7]=read_byte();

/*****************************************************

/*void keep_rom(uchar *p) // 存序列号函数

{

uchar i;

void delay_50us( uint time);

void write_com(uchar com); void

write_data(uchar dat);

void in it_LCD1602(void); id

ini t_ds18b20(void);

void delay( uint t);

void ini t_ds18b20(void); void

write_byte(char dat); uchar

read_byte(void);

II 第一个ds18b20读取温度函数 //第二个ds18b20读取温度函数

IILCD1602显示温度函数

*******************************************

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

{

*P=ID[i];

P++;

}

}

/***************************************************** /*void display_rom(void) // 显示序列号函数

{

uchar i;

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

{

write_data(table[ID[i]/16]); write_data(table[ID[i]%16]);

}

}

/****************************************************/ void mai n(void)

{

in it_LCD1602();

while(1)

{

temp1=readtemp1();

temp2=readtemp2();

display();

}

}

]**********************************************'

void delay_50us( uint time)

{

uchar j;

for(;time>0;time--); for(j=19;j>0;j++);

}

/************************************************/

void write_com(uchar com) //LCD1602 写指令{

e=0;

rs=0;

rw=0;

PO=com;

delay_50us(10); e=1;

delay_50us(20);

e=0;

}

/***************************************************/

void write_data(uchar dat) //LCD1602 写数据{