51单片机单总线控制两个DS18B20
- 格式:docx
- 大小:12.72 KB
- 文档页数:6
#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 写数据{