#include <reg52.h>
#include<intrins.h>
#include<stdio.h>
#include"./lcd/lcd.h"
#include"./delay/delay.h"
sbit ds = P2^3;
sbit LED1 = P2^1;
bit ack = 0;
#define SUCC 1
#define ERR 0
#define HIGH 1
#define LOW 0
void Ds18b20_init()
{
ds = 0;
delay_us(200);
delay_us(200);
ds = 1;
delay_us(30);
if(ds == 0)
{
ack = SUCC;
}
else
{
ack = ERR;
}
delay_us(200);
}
void Ds18b20_write_byte(unsigned char byte)
{
unsigned char i;
for( i = 0; i < 8; i++)
{
ds = 0;
_nop_();
_nop_();
ds = byte&0x01;
byte >>= 1;
delay_us(30);
ds = 1;
}
delay_us(30);
}
bit Ds_read_bit()
{
bit tmp;
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = 1;
tmp = ds;
return tmp;
}
unsigned char Ds_read_byte()
{
unsigned char i,j,k;
for( i = 0; i < 8; i++)
{
j = Ds_read_bit();
k = (j << 7)|(k >> 1);
}
return k;
}
void main()
{
unsigned char a;
unsigned int temp,b;
float temp_f;
unsigned char disbuf[20];
LCD_init();
while(1)
{
Ds18b20_init();
Ds18b20_write_byte(0xcc);
Ds18b20_write_byte(0x44);
delay_ms(20);
Ds18b20_init();
Ds18b20_write_byte(0xcc);
Ds18b20_write_byte(0xbe);
a = Ds_read_byte();
b = Ds_read_byte();
temp = (b << 8)|a;
temp_f = (float)temp * 0.0625;
sprintf(disbuf,"temp is %7.3f",temp_f);
LCD_Write_String(0,0,disbuf);
}
}
单片机ds18b20测量温度
最新推荐文章于 2022-01-04 18:03:52 发布