📄 ds18b20温度转换子程序.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 + -