#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#include "./delay/delay.h"
#include "./delay/lcd.h"
#define SUCC 1
#define ERR 0
#define HIGH 1
#define LOW 0
sbit ds = P2^3;
sbit led = P1^0 ;
void dis18b20_init()
{
ds = LOW;
delay_us(200);
delay_us(200);
ds = HIGH;
delay_us(30);
if(ds == LOW)
{
led = ERR;
}
else
{
led = SUCC;
}
delay_us(200);
}
void dis18b20_write_byte(unsigned char byte)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = byte&0x01;
byte >>= 1;
delay_us(30);
}
ds = 1;
delay_us(30);
}
bit dis18b20_read_bit()
{
bit temp;
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = 1;
temp = ds;
delay_us(30);
return temp;
}
unsigned char dis18b20_read_byte()
{
unsigned char i,j,k;
for(i = 0; i < 8; i++)
{
j = dis18b20_read_bit();
k = (j <<= 7)|(k >>= 1);
}
return k;
}
void main()
{
unsigned char a;
float temp_f;
unsigned char disbuf[20];
unsigned int temp, b;
LCD_Init();
while(1)
{
dis18b20_init();
dis18b20_write_byte(0xcc);
dis18b20_write_byte(0x44);
delay_ms(20);
dis18b20_init();
dis18b20_write_byte(0xcc);
dis18b20_write_byte(0xbe);
a = dis18b20_read_byte();
b = dis18b20_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);
}
}
ds18b20LCD显示
最新推荐文章于 2024-07-07 15:21:46 发布