当前位置:
文档之家› DS18B20温度采集程序代码
DS18B20温度采集程序代码
*输入: x (延时一毫秒的个数)
*输出:无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
/********************************************************************
*名称: delay()
*功能:延时函数
*输入:无
*输出:无
***********************************************************************/
P2 = 6;
Delay_1ms(5);
P0 = table[temp%10];
P2 = 7;
Delay_1ms(5);
}
}
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define jump_ROM 0xCC
*名称: Main()
*功能:主函数
*输入:无
*输出:无
***********************************************************************/
void main()
{
uint temp;
P2 = 0x00;
while(1)
{
Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
temp = TMPL / 16 + TMPH * 16;
P0 = table[temp/10%10];
*输出:无Байду номын сангаас
***********************************************************************/
void write_bit(uchar bitval)
{
DQ=0;if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}
/********************************************************************
/********************************************************************
*文件名:温度采集DS18B20.c
*描述:该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上显示出来。
*创建人:东流,2012年2月10日
*版本号:2.0
void delay(uint N)
{
int i;
for(i=0; i<N; i++)
;
}
/********************************************************************
*名称: Delay_1ms()
*功能:延时子程序,延时时间为1ms * x
for(x=0;x<=148;x++);
}
/********************************************************************
*名称: Reset()
*功能:复位DS18B20
*输入:无
*输出:无
***********************************************************************/
{
uchar i,temp;
for(i=0; i<8; i++)
{
temp = val >> i;
temp = temp & 0x01;
write_bit(temp);
delay(5);
}
}
/********************************************************************
*名称: read_byte()
*功能:从DS18B20读一个字节
*输入:无
*输出:从DS18B20读到的值
***********************************************************************/
uchar read_byte(void)
{
uchar i,m,receive_data;
*名称: read_bit()
*功能:从DS18B20读一个位值
*输入:无
*输出:从DS18B20读出的一个位值
***********************************************************************/
uchar read_bit(void)
{
uchar i;
#define start 0x44
#define read_EEROM 0xBE
sbit DQ = P2^3; //DS18B20数据口
unsigned char TMPH,TMPL;
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
DQ = 0;
DQ = 1;
for(i=0; i<3; i++);
return(DQ);
}
/********************************************************************
*名称: write_bit()
*功能:向DS18B20写一位
*输入: bitval(要对DS18B20写入的位值)
*名称: write_byte()
*功能:向DS18B20写一个字节
*输入: val(要对DS18B20写入的命令值)
*输出:无
***********************************************************************/
void write_byte(uchar val)
m = 1;
receive_data = 0;
for(i=0; i<8; i++)
{
if(read_bit())
{
receive_data = receive_data + (m << i);
}
delay(6);
}
return(receive_data);
}
/********************************************************************
uchar Reset(void)
{
uchar deceive_ready;
DQ = 0;
delay(29);
DQ = 1;
delay(3);
deceive_ready = DQ;
delay(25);
return(deceive_ready);
}
/********************************************************************