#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include "./delay/delay.h"
#include "./lcd/lcd.h"
#include "./led/led.h"
#include "./uart/uart.h"
sbit ds = P2^0;
sbit BEEP = P2^2;
sbit LED = P2^3;
bit ack = 0;
/ds18b20¸´Î»¼°Ó¦´ðº¯Êý/
void ds_reset()
{
ds = 1;
ds = 0;
delay_us(200);
delay_us(200);
ds = 1;
delay_us(30);
if(0 == ds)
{
ack = 1;
}
else
{
ack = 0;
}
delay_us(200);
delay_us(100);
}
/ds18b20×Ö½Ú·¢Ëͺ¯Êý/
void ds_send_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);
}
/ds18b20¶Áʱ϶º¯Êý/
bit ds_read_bit()
{
bit temp;
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = 1;
temp = ds;
delay_us(30);
return temp;
}
/ds18b20λÊý¾Ý¶ÁÈ¡º¯Êý/
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 beep()
{
unsigned char i;
for(i = 0; i < 70; i++)
{
BEEP = ~BEEP;
delay_us(200);
delay_us(100);
}
}
void main()
{
unsigned char a;
unsigned int temp,b;
float temperature;
unsigned char disbuf[20];
uart_init();
lcd_init();
LED = 0;
while(1)
{
ds_reset();
ds_send_byte(0xcc);
ds_send_byte(0x44);
ds_reset();
ds_send_byte(0xcc);
ds_send_byte(0xbe);
a = ds_read_byte();
b = ds_read_byte();
temp = (b << 8) | a;
temperature = (float)temp * 0.0625;
sprintf(disbuf,"%7.3f",temperature);
lcd_dis_str(0,0,"temp is:");
lcd_dis_str(8,0,disbuf);
lcd_dis_self();
if(temperature >= 31)
{
beep();
led_start();
}
else
{
led_stop();
}
uart_send_str(disbuf);
}
}
#include <intrins.h>
#include <stdio.h>
#include "./delay/delay.h"
#include "./lcd/lcd.h"
#include "./led/led.h"
#include "./uart/uart.h"
sbit ds = P2^0;
sbit BEEP = P2^2;
sbit LED = P2^3;
bit ack = 0;
/ds18b20¸´Î»¼°Ó¦´ðº¯Êý/
void ds_reset()
{
ds = 1;
ds = 0;
delay_us(200);
delay_us(200);
ds = 1;
delay_us(30);
if(0 == ds)
{
ack = 1;
}
else
{
ack = 0;
}
delay_us(200);
delay_us(100);
}
/ds18b20×Ö½Ú·¢Ëͺ¯Êý/
void ds_send_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);
}
/ds18b20¶Áʱ϶º¯Êý/
bit ds_read_bit()
{
bit temp;
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = 1;
temp = ds;
delay_us(30);
return temp;
}
/ds18b20λÊý¾Ý¶ÁÈ¡º¯Êý/
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 beep()
{
unsigned char i;
for(i = 0; i < 70; i++)
{
BEEP = ~BEEP;
delay_us(200);
delay_us(100);
}
}
void main()
{
unsigned char a;
unsigned int temp,b;
float temperature;
unsigned char disbuf[20];
uart_init();
lcd_init();
LED = 0;
while(1)
{
ds_reset();
ds_send_byte(0xcc);
ds_send_byte(0x44);
ds_reset();
ds_send_byte(0xcc);
ds_send_byte(0xbe);
a = ds_read_byte();
b = ds_read_byte();
temp = (b << 8) | a;
temperature = (float)temp * 0.0625;
sprintf(disbuf,"%7.3f",temperature);
lcd_dis_str(0,0,"temp is:");
lcd_dis_str(8,0,disbuf);
lcd_dis_self();
if(temperature >= 31)
{
beep();
led_start();
}
else
{
led_stop();
}
uart_send_str(disbuf);
}
}