if((min&0x80)==0x80) //若读取的下限温度的最高位(符号位)
为‘1’表明是负温度
{f_min=1;min=(min-0x80);} //将下限温度符号标志位置‘1’表示负温度,将下限温度装换成无符号数。 i=b; i>>=4; if (i==0) {
f=0; //i为0,正温度,设立正温度标记 temp=((a>>4)|(b<<4)); //整数部分
a=(a&0x0f);
temp_d=a; } else {
f=1; a=~a+1; b=~b;
temp=((a>>4)|(b<<4));
//小数部分
//i为1,负温度,设立负温度标记
//整数部分
a=(a&0x0f); //小数部分 temp_d=a; } }
/******************************************************/ /* 存储极限温度函数 /
/*****************************************************/ void store_t()
{
if(f_max==1) //若上限温度为负,将上限温度转换成有符号数(最高位为1是负,为0是正) max=max+0x80;
if(f_min==1) //若下限温度为负,将上限温度转换成有符号数
min=min+0x80;
ds18b20_init();
//向DS18B20发写字节至暂存器2和3(TH //向暂存器TH(上限温度暂存器)写 //向暂存器TL(下限温度暂存器)写 //向配置寄存器写命令,进行温度值分辨
ds18b20_write(0xcc);
ds18b20_write(0x4e); 和TL)命令
ds18b20_write(max); 温度
ds18b20_write(min); 温度
ds18b20_write(0xff); 率设置
ds18b20_init();
ds18b20_write(0xcc);
ds18b20_write(0x48); //向DS18B20发将RAM中2、3字节的内容写入EEPROM
} //DS18B20上电后会自动将EEPROM中的上下限温度拷贝到TH、TL暂存器
/******************************************************/
/* 温度超限报警函数 /
/*****************************************************/ void alarm()
{ //若上限值是正值 if(f_max==0) {
if(f_min==0) //若下限值是正值 {
if(f==0) //若测量值是正值 { 警
时不报警
if(temp<=min||temp>=max)
{w=1;TR1=1;} //当测量值小于最小值或大于最大值时报 if((temp
{w=0;} //当测量值大于最小值且小于最大值
}
if(f==1){w=1;TR1=1;}
//若测量值是负值时报警
}
if(f_min==1) //若下限值是负值 {
if(f==0) //若测量值是正值 {
if(temp>=max)//当测量值大于最大值时报警 {w=1;TR1=1;}
if(temp if(f==1) //若测量值是负值 { if(temp>=min)//当测量值大于最小值时报警 {w=1;TR1=1;} if(temp if(f_max==1) //若下限值是负值 { if(f_min==1) //若下限值是负值 { if(f==1) //若测量值是负值 { if((temp<=max)||(temp>=min)) {w=1;TR1=1;} //当测量值小于最大值或大于最小值时报警 if((temp } if(f==0){w=1;TR1=1;} } } } //当测量值小于最小值且大于最大值 //若测量值是正值时报警 #endif /********************************************************************** * 程序名; ds18b20keyscan函数 * 功能:通过键盘设定设定上下限报警温度 * 编程者:彭明闯 * 编程时间:2014/5/30 **********************************************************************/ #ifndef __keyscan_H__ #define __keyscan_H__ sbit key1=P2^2; sbit key2=P2^1; sbit key3=P2^0; sbit key4=P3^3; //定义头文件 uchari=0; //定义全局变量i用于不同功能模式的选择,‘0’正常模式,‘1’上限调节模式,‘2’下限调节模式 uchar a=0; //定义全局变量a用于不同模式下数码管显示的选择 bit k4=0; //K4按键双功能选择位,k4=0时K4按键选择消按键音的功能,k4=1时K4按键选择正负温度设定功能 bit v=0; //K2、K3按键双功能选择位,v=0时选择上下限查看功能,v=1时选择上下限温度加减功能 bit v1=0; //v1=1时定时1250ms时间到自动关闭报警上下限查看功能 bit v2=0; //消按键音功能调整位,为‘0’时开按键音,为‘1’时关按键音 /******************************************************/ /* 读键盘延时子函数 / /*****************************************************/ void keyscan_delay(uint z) //延时1ms左右