#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x89,0xc7};
uchar code table1[4]={0xfe,0xfd,0xfb,0xf7};
uchar data discop[4]={0};
uchar num1=0;
uchar KEY_SET_Flog=0; //设置标示位
uchar TH_DAT=0,TL_DAT=0;
uchar temp1=0,temp2=0;
sbit dic=P0^7;
sbit KEY1=P3^5;
sbit KEY2=P3^6;
sbit KEY3=P3^7;
sbit BEEP=P1^3;
sbit Relay=P1^0;
sbit LED_Y=P1^2;
sbit LED_R=P1^1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
#include"DS18B20.H"
void keyscan()
{
if(KEY1==0)
{
delay(10);
if(KEY1==0)
{
KEY_SET_Flog++;
if(KEY_SET_Flog>2)
{
Set_DS18B20(TH_DAT,TL_DAT);
KEY_SET_Flog=0;
Read_18B20_Temperature();
Read_18B20_Temperature();
Read_18B20_Temperature();
delay(200);
}
while(!KEY1);
}
}
switch(KEY_SET_Flog)
{
case 1: //上限温度设置
if(!KEY2)
{
delay(8);
if(!KEY2)
{
if(TH_DAT<99)
TH_DAT++;
while(!KEY2);
}
}
else if(!KEY3)
{
delay(8);
if(!KEY3)
{
if(TH_DAT>0)
TH_DAT--;
while(!KEY3);
}
}
break;
case 2: //下限温度设置
if(!KEY2)
{
delay(8);
if(!KEY2)
{
if(TL_DAT<99)
TL_DAT++;
while(!KEY2);
}
}
else if(!KEY3)
{
delay(8);
if(!KEY3)
{
if(TL_DAT>0)
TL_DAT--;
while(!KEY3);
}
}
break;
default:
break;
}
}
void didi()
{
BEEP=0;
delay(500);
BEEP=1;
delay(500);
}
void control()
{
if((Tem_dispbuf[4]>TH_DAT)||(Tem_dispbuf[4]==TH_DAT&&Tem_dispbuf[0]>0)) //当前温度大于上限
{
didi();
LED_Y=0;
Relay=1;
LED_R=1;
}
else if(Tem_dispbuf[4]<TL_DAT)
{
Relay=0;
LED_R=0;
LED_Y=1;
// BEEP=0;
didi();
}
else
{
LED_Y=1;
BEEP=1;
}
}
void display()
{
if(KEY_SET_Flog==0)
{
Read_18B20_Temperature();
if(temp1>Tem_dispbuf[4])
temp2=temp1-Tem_dispbuf[4];
else
temp2=Tem_dispbuf[4]-temp1;
if(temp2<5)
{
temp1=Tem_dispbuf[4];
discop[0]=10;
discop[1]=Tem_dispbuf[2];
discop[2]=Tem_dispbuf[1];
discop[3]=Tem_dispbuf[0];
control();
}
}
else if(KEY_SET_Flog==1)
{
discop[0]=11;
discop[1]=TH_DAT/10;
discop[2]=TH_DAT%10;
discop[3]=0;
}
else if(KEY_SET_Flog==2)
{
discop[0]=12;
discop[1]=TL_DAT/10;
discop[2]=TL_DAT%10;
discop[3]=0;
}
}
void main()
{
Read_18B20_Temperature();
Read_18B20_Temperature();
Read_18B20_Temperature();
Read_18B20_Temperature();
Read_18B20_Temperature();
Read_18B20_Temperature();
temp1=Tem_dispbuf[4];
delay(1000);
TH_DAT=DS18B20_Temp_data[2];
TL_DAT=DS18B20_Temp_data[3];
Read_18B20_Temperature();
Read_18B20_Temperature();
temp1=Tem_dispbuf[4];
Read_18B20_Temperature();
Read_18B20_Temperature();
temp1=Tem_dispbuf[4];
if(TH_DAT>99)
TH_DAT=50;
if(TL_DAT>99)
TL_DAT=20;
TMOD=0x01;
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
ET0=1;
TR0=1;
EA=1;
temp1=Tem_dispbuf[4];
while(1)
{
keyscan();
delay(100);
display();
}
}
void timer0() interrupt 1 //定时器1用于数码管动态扫描
{
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
if(num1==2)
P0=table[discop[num1]]-0X80;
else
P0=table[discop[num1]];
P2=table1[num1];
num1++;
if(num1==4)
num1=0;
}