#include"DS18B20.h"
uchar DS18B20_ID[8];
bit RESET_DS18B20(void)
{
DS18B20_DQ = 1;
DS18B20_DQ = 0;
Delay_Us(247);
DS18B20_DQ = 1;
Delay_Us(27);
if(DS18B20_DQ == 0)
{
}
{
}
else
}
while(DS18B20_DQ == 0);
return 0;
return 1;
void Write_DS18B20_DATA(uchar Value)
{
uchar i = 0;
for(i = 0; i < 8; i ++)
{
}
DS18B20_DQ = 1;
DS18B20_DQ = 0;
Delay_Us(5);
DS18B20_DQ = Value & 0x01;
Delay_Us(20);
DS18B20_DQ = 1;
Value >>= 1;
}
uchar Read_DS18B20_DATA(void)
{
uchar i = 0;
uchar Value = 0;
for(i = 0; i < 8; i ++)
{
DS18B20_DQ = 1;
DS18B20_DQ = 0;
Delay_Us(1);
DS18B20_DQ = 1;
Delay_Us(1);
if(DS18B20_DQ)
{
}
Value |= 0x01 << i;
Delay_Us(17);
DS18B20_DQ = 1;
nop();
}
return Value;
}
void Read_DS18B20_ID(void)
{
uchar i = 0;
RESET_DS18B20();
Write_DS18B20_DATA(0x33);
for(i = 0; i < 8; i++)
//复位 DS18B20
//读 ROM 命令。读 ID 号
{
}
}
DS18B20_ID[i] = Read_DS18B20_DATA();
uchar Read_DS18B20_TEMP(void)
{
uchar Temp_L = 0;
uchar Temp_H = 0;
uchar Temp = 0;
bit ZF = 0;
RESET_DS18B20();
Write_DS18B20_DATA(0xCC);
Write_DS18B20_DATA(0x44);
RESET_DS18B20();
Write_DS18B20_DATA(0xCC);
Write_DS18B20_DATA(0xBE);
Temp_L = Read_DS18B20_DATA();
Temp_H = Read_DS18B20_DATA();
Temp_L >>= 4;
Temp_H <<= 4;
Temp = Temp_H | Temp_L;
if(Temp & 0x80)
else
{
}
{
}
ZF = 0;
ZF = 1;
return Temp;
}
void Delay_Us(uchar i)
{
while(-- i);
}
/**************************
R7,#0X01;
MOV
LCALL DELAY;
2
DELAY: DJNZ R7,DELAY; 2
RET
2
1
X = 5+I*2;
**************************/
#ifndef
#define
_DS18B20_H_
_DS18B20_H_
#include
#include
#define
#define
uchar
uint
unsigned char
unsigned int
#define
nop()
_nop_()
extern uchar DS18B20_ID[8];
sbit DS18B20_DQ = P1^3;
void Delay_Us(uchar i);
bit RESET_DS18B20(void);
void Read_DS18B20_ID(void);
uchar Read_DS18B20_DATA(void);
void Write_DS18B20_DATA(uchar Value);
uchar Read_DS18B20_TEMP(void);
#endif
#ifndef
#define
_LCD_H_
_LCD_H_
#include
#define LCD_DATA P0
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^2;
void LCD1602(void);
void Read_Busy(void);
void Write_Lcd(unsigned char Value, bit i);
void Init_Lcd(void);
void Delay(unsigned int i);
void Display_LCD_Byte(unsigned char y,unsigned char x,unsigned char Value);
void Display_LCD_TEXT(unsigned char y,unsigned char x,unsigned char *Value);
#endif
#include "LCD.h"
void LCD1602(void)
{
EN = 0;
RS = 1;
RW = 1;
LCD_DATA = 0xFF;
}
void Read_Busy(void)
{
LCD_DATA = 0xFF;
RS = 0;
RW = 1;
EN = 1;
while(LCD_DATA & 0x80);
EN = 0;
}
void Write_Lcd(unsigned char Value, bit i)
{
//i = 0 写指令.i = 1 写数据;
Read_Busy();
LCD_DATA = Value;
RS = i;
RW = 0;
EN = 1;
EN = 0;
}
void Init_Lcd(void)
{
Delay(15000);
Write_Lcd(0x38,0);
Delay(5000);
Write_Lcd(0x38,0);
Delay(5000);
Write_Lcd(0x38,0);
Write_Lcd(0x08,0);
Write_Lcd(0x01,0);
Write_Lcd(0x06,0);
Write_Lcd(0x0c,0);
}
void Display_LCD_Byte(unsigned char y,unsigned char x,unsigned char Value)
{
y &= 0x01;
x &= 0x0F;
if(y)
{
//y 不能大于 1
//x 不能大于 15
//是否显示在第二行;
x += 0x40;
//显示在第二行,加 0X40;
}
x += 0x80;
Write_Lcd(x,0);
Write_Lcd(Value,1);
}
//写入显示的位置
//写入显示数据
/*
void Display_LCD_TEXT(unsigned char y,unsigned char x,unsigned char *Value)
{
unsigned ListLength = 0;
y &= 0x01;
x &= 0x0F;
while(x <= 15)
{
}
}*/
Display_LCD_Byte(y,x,Value[ListLength]);
x ++;
ListLength ++;
void Delay(unsigned int i)
{
while(-- i);
}
#include
#include"DS18B20.H"
#include"LCD.H"
sbit BUZZ = P1^7;
uchar Lcd_Disp[]=
{
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F'
};
void main(void)
{
uchar Temp = 0;
LCD1602();
Init_Lcd();
Read_DS18B20_ID();
while(1)
{
Temp = Read_DS18B20_TEMP();
if(Temp > 25)
else
{
}
{
}
BUZZ = 0;
BUZZ = 1;
Display_LCD_Byte(0,0,'T');
Display_LCD_Byte(0,1,'E');
Display_LCD_Byte(0,2,'M');
Display_LCD_Byte(0,3,'P');
Display_LCD_Byte(0,4,':');
Display_LCD_Byte(0,5,Lcd_Disp[Temp/100]);
Display_LCD_Byte(0,6,Lcd_Disp[Temp/10%10]);
Display_LCD_Byte(0,7,Lcd_Disp[Temp%10%10]);
}
}