⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20温度转换子程序.c

📁 DS18B20芯片的温度转换子程序精度为0.5
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#define T_CONVER    0x44
#define T_CONFIG    0x5f
#define T_READ      0xbe
#define T_WRITE     0x4e
#define T_ROM_JMP   0xcc
#define T_COPY_E2   0x48
#define T_RECALL_E2 0xb8
#define T_cont   0.0625
#define  uint   unsigned int
#define  uchar	unsigned char
sbit      BZ	= P2^4 ;
sbit      DQ    = P1^0;
sbit     a_0    =ACC^0;
bit   T_sign;
bit   flag=1;
float temp = 0;
uchar  t_bai,t_shi,t_ge,t_point1,t_point2;

void  delay(uint delay_time)
{
while(delay_time--);
}

//DS18B20子程序
void DS18B20_init()
{
uchar  i=1;
while(flag==0)
{
DQ = 1;
delay(8);
DQ = 0;
delay(52);
DQ = 1;
delay(2);
while(1)
{
i = DQ;
if(i==0)
{
flag=1;
delay(10);
break;
}
}
}
flag=0;
}

void DS18B20_send(uchar out_data)
{
uchar  i=0;
for(i=8;i>0;i--)
{
DQ = 0;
ACC=out_data&0x01;
DQ = a_0;
delay(5);
DQ = 1;
out_data>>=1;
}
}

uchar DS18B20_read(void)
{
uchar i,in_data;
in_data=0;
for(i=8;i>0;i--)
{
DQ = 0;
in_data>>=1;
DQ = 1;
if(DQ)  in_data|=0x80;
delay(4);
}
return(in_data);
}

void ReadTemperature()
{
uint   yu;
uchar  T_L=0;
uchar  T_H=0;
uchar  k;
DS18B20_init();
DS18B20_send(T_ROM_JMP);
DS18B20_send(T_CONVER);
DS18B20_init();
DS18B20_send(T_ROM_JMP);
DS18B20_send(T_READ);
T_L=DS18B20_read();
T_H=DS18B20_read();
k=T_H&0x08;
if(k==0x08) T_sign=1;
else       T_sign=0;
T_H=T_H&0x07;
temp=(T_H*256+T_L)*T_cont;
temp =temp *100;
t_bai=(uint)temp/10000;
yu   =(uint)temp%10000;
t_shi=yu/1000;
yu   =(uint)yu%1000;
t_ge =yu/100;
yu   =(uint)yu%100;
t_point1=yu/10;
t_point2=(uint)yu%10;
}

void main (void)
{
BZ=0;			 //关蜂鸣器
while(1)
{
ReadTemperature();
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -