. .. . ..
#include\ #include\#include\
/******************************************************/ /*
/
主函数
/*****************************************************/ void main() {
beer=1; led=1;
//关闭蜂鸣器 //关闭LED灯
timer1_init(0); //初始化定时器1(未启动定时器1)
get_temperature(1); //首次启动DS18B20获取温度(DS18B20上
电后自动将EEPROM中的上下限温度复制到TH和TL寄存器)
while(1) { }
keyscan();
get_temperature(0); display(temp,temp_d*0.625); alarm();
学习参考
. .. . ..
}
/******************************************************************** * 程序名; DS18B20头文件 * 编程者:彭明闯 * 编程时间:2014/5/30
* 说 明:用到的全局变量是:无符号字符型变量temp(测得的温度整数部分),temp_d
* (测得的温度小数部分),标志位f(测量温度的标志位‘0’表示“正温度”‘1’表 * 示“负温度”),标志位f_max(上限温度的标志位‘0’表示“正温度”、‘1’表 * 示“负温度”),标志位f_min(下限温度的标志位‘0’表示“正温度”、‘1’表 * 示“负温度”),标志位w(报警标志位‘1’启动报警‘0’关闭报警)。
*********************************************************************/ #ifndef __ds18b20_h__ #define __ds18b20_h__
#define uint unsigned int #define uchar unsigned char
sbit DQ= P2^3;
//DS18B20接口
//定义头文件
学习参考
. .. . ..
sbit beer=P1^0; sbit led=P1^1; uchar temp=0;
//用beer表示P1.0
//用led表示P1.1
//测量温度的整数部分 //测量温度的小数部分
//测量温度的标志位,0’表示“正温度”
uchar temp_d=0; bit f=0;
‘1’表示“负温度”) bit f_max=0; 表示“负温度”) bit f_min=0; ‘1’表示“负温度”) bit w=0; 警
/******************************************************/ /*
/
延时子函数
//报警标志位‘1’启动报警‘0’关闭报
//下限温度的标志位‘0’表示“正温度”、
//上限温度的标志位‘0’表示“正温度” ‘1’
/*****************************************************/ void ds18b20_delayus(uint t) //延时几μs {
while(t--); }
学习参考
. .. . ..
void ds18b20_delayms(uint t) {
uint i,j; for(i=t;i>0;i--)
for(j=120;j>0;j--);
//延时1ms左右
}
/******************************************************/ /*
/
DS18B20初始化函数
/*****************************************************/
void ds18b20_init() {
uchar c=0; DQ=1; DQ=0;
//控制器向DS18B20发低电平
脉冲
ds18b20_delayus(80); DQ=1;
//延时15-80μs
//控制器拉高总线,
while(DQ); //等待DS18B20拉低总线,在60-240μ
学习参考
. .. . ..
s之间
ds18b20_delayus(150); DQ=1;
//延时,等待上拉电阻拉高总线
//拉高数据线,准备数据传
输; }
/******************************************************/ /*
/
DS18B20字节读函数
/*****************************************************/
uchar ds18b20_read() {
uchar i; uchar d=0; DQ = 1;
//准备读;
for(i=8;i>0;i--) {
//低位先发;
d >>= 1;
DQ = 0; _nop_();
学习参考