基于51单片机课程设计报告 - 图文 下载本文

内容发布更新时间 : 2024/11/16 23:44:32星期一 下面是文章的全部内容请认真阅读。

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((tempmin))

{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((tempmax)) {w=0;} 时不报警

}

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左右