ds18b20

#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);

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值