最近了解了一下DS18B20的控制原理...就制作了一個(gè)二路的可調(diào)溫度控制器...
本來想在一根IO上實(shí)現(xiàn)這個(gè)溫度的讀取,但是那樣時(shí)間太長了...就利用二個(gè)IO接二個(gè)18B20...對(duì)二個(gè)同時(shí)進(jìn)行讀寫操作...經(jīng)過實(shí)踐是可行的...
這里面用按鍵+1820+LCD1602完成一個(gè)二路的溫度控制...并且可以利用程序?qū)26 P27的負(fù)載進(jìn)行控制,在這里用來控制二個(gè)LED...大家也可以加上三極管擴(kuò)上繼電器...
下面是這個(gè)的原理圖...
本文中程序可以直接調(diào)用,單片機(jī)為STC89C52,晶振為11.0592M...
本文的程序太長了,所以只發(fā)18B20的部分...其它的部分大家可以自己去實(shí)現(xiàn)...
//////////////////////////////////////////////////////DS18B20.h
#ifndef __DS18B20_H__
#define __DS18B20_H__
#include
#include"Mytype.h"
#include
#include "Display_KEY_Out.H"
#define nop() _nop_()
#define READ_ROM
#define MATCH_ROM
#define SKIP_ROM
#define SEARCH_ROM
#define ALARM_ROM
#define WRITE_SCRATCHPAD
#define READ_SCRATCHPAD
#define COPY_SCRATCHPAD
#define COVERTT
#define RECALLE2
#define READ_P_SUPPLY
#define Bit_12
#define Bit_11
#define Bit_10
#define Bit_9
sbit DS_IO1 = P1^6;
sbit DS_IO2 = P3^3;
extern
extern
bit Init_DS18B20(void);
void Write_DS_8Bit(uint8 Value);
void Read_DS_8Bit(void);
void Read_DS_Da
void Delay_Us(uint8 Value);
void SetStep(uint8 Value);
#endif
//////////////////////////////////////////////////////DS18B20.C
#include "DS18B20.h"
bit
bit
bit
bit
uint8
uint8
////////////////////////////////////////////////////////////////////////////////
//函數(shù)名:PD_DS18B20(void)
//功能描述:檢測DS18B20是否接于總線上;
//函數(shù)說明:
//調(diào)用函數(shù):無;
//全局變量:無;
//輸入:無;
//返回:無;
//修改者:
//創(chuàng)建日期:2009-07-15
//版本:v1.0
////////////////////////////////////////////////////////////////////////////////
bit Init_DS18B20(void)
{
}
////////////////////////////////////////////////////////////////////////////////
//函數(shù)名:void Write_DS_8Bit(uint8 Value)
//功能描述:向DS18B20寫入8位數(shù)據(jù),先寫最低位;
//函數(shù)說明:
//調(diào)用函數(shù):無;
//全局變量:無;
//輸入:VALUE數(shù)據(jù)為8位;
//返回:無;
//創(chuàng)建日期:2009-07-15
//版本:v1.0
////////////////////////////////////////////////////////////////////////////////
void Write_DS_8Bit(uint8 Value)
{
}
////////////////////////////////////////////////////////////////////////////////
//函數(shù)名:uint8 Read_DS_8Bit(void)
//功能描述:讀出DS18B20內(nèi)部數(shù)據(jù),先讀低位.讀完后并返回?cái)?shù)據(jù);
//函數(shù)說明:
//調(diào)用函數(shù):無;
//全局變量:無;
//輸入:無
//返回:讀出的8位數(shù)據(jù);
//修改者:
//創(chuàng)建日期:2009-07-15
//版本:v1.0
////////////////////////////////////////////////////////////////////////////////
void Read_DS_8Bit(void)
{
}
////////////////////////////////////////////////////////////////////////////////
//函數(shù)名:void Read_DS_Da
//功能描述:讀出DS18B20內(nèi)部數(shù)據(jù),先讀低位.讀完后并返回?cái)?shù)據(jù);
//函數(shù)說明:
//調(diào)用函數(shù):Init_DS18B20();復(fù)位DS18B20函數(shù);
//調(diào)用函數(shù):Write_DS_8Bit();寫入數(shù)據(jù)函數(shù);
//調(diào)用函數(shù):Read_DS_8Bit();讀取數(shù)據(jù)函數(shù);
//全局變量:Temp1
//全局變量:Temp2
//輸入:無
//返回:讀出溫度數(shù)據(jù);
//修改者:
//創(chuàng)建日期:2009-07-15
//版本:v1.0
////////////////////////////////////////////////////////////////////////////////
void Read_DS_Da
{
}
////////////////////////////////////////////////////////////////////////////////
//函數(shù)名:SetStep
//功能描述:18B20精度設(shè)置程序
//函數(shù)說明:可以輸入1-7F來設(shè)置9-12位精度;
//調(diào)用函數(shù):Init_DS18B20();
//調(diào)用函數(shù):Write_DS_8Bit();
//調(diào)用函數(shù):Read_DS_8Bit();
//調(diào)用函數(shù):Delay_Us(100);
//全局變量:無;
//輸入:
//返回:無;
//修改者:
//創(chuàng)建日期:2009-08-18
//版本:v1.0
////////////////////////////////////////////////////////////////////////////////
void SetStep(uint8 Value)
{
}
////////////////////////////////////////////////////////////////////////////////
//函數(shù)名:Delay_Us
//功能描述:US級(jí)延時(shí)程序;
//函數(shù)說明:12M晶振下默認(rèn)的狀態(tài)是10US.如果參數(shù)加1;
///////////////則延時(shí)再加上2uS
//調(diào)用函數(shù):無;
//全局變量:無;
//輸入:無;
//返回:無;
//創(chuàng)建日期:2009-08-18
//版本:v1.0
////////////////////////////////////////////////////////////////////////////////
void Delay_Us(uint8 Value)
{
}