#include<reg51.h>
#include"delay.h"
#include"lcd602.h"
#include"ds18b20.h"
//**************端口定义*******************
sbit LED = P1^0;
sbit k1 = P1^4;
sbit k2 = P1^5;
sbit k3 = P1^6;
//**************数组定义*******************
uchar code tab2[]={"Temp: "}; //5
uchar code tab3[]={" H "}; //3
uchar code tab4[]={"L "}; //8
//**************变量定义*******************
int temp1 = 400; //上限
int temp3 = 100; //下限
bit flag = 0; //上下限选择标志
int temp4; //当上限减到负数时
uchar temp5 = 0;
/*******************按键********************/
void key()
{
if(flag == 0) //上限
{
write_zifu(2,0,'*');
write_zifu(2,8,' ');
if(k1 == 0)
{
delayxms(5);
while(k1 == 0);
temp1 += 10;
}
if(k2 == 0)
{
delayxms(5);
while(k2 == 0);
temp1 -= 10;
}
}
if(flag == 1) //下限
{
write_zifu(2,0,' ');
write_zifu(2,8,'*');
if(k1 == 0)
{
delayxms(5);
while(k1 == 0);
temp3 += 10;
}
if(k2 == 0)
{
delayxms(5);
while(k2 == 0);
temp3 -= 10;
}
}
if(k3 == 0) //上下限选择标志
{
delayxms(5);
while(k3 == 0);
flag = ~flag;
}
}
/*******************定时器T1初始化********************/
void T1_init()
{
TMOD = TMOD | 0x10; //设T1为方式1
TH1 = (65535-20000)/256; //计数20000个
TL1 = (65535-20000)%256;
EA = 1; //开启总中断
ET1 = 1; //允许T1中断
TR1 = 1; //启动
}
/*******************主函数********************/
void main()
{
chushihua();//lcd1602初始化
write_string(1,0,tab2);
write_string(2,0,tab3);
write_string(2,9,tab4);
T1_init();
while(1)
{
key();
ds1820disp();
/*温度上限*/
if(temp1 < 0)
{
write_zifu(2,2,'-');
temp4 = temp1;
temp4 = ~temp4;
temp4 += 1;
write_num3(2,3,temp4);
write_zifu(2,7,' ');
}
else
{
write_zifu(2,2,'+');
if(temp1>=1000)
{
write_num4(2,3,temp1);
}
else
{
write_num3(2,3,temp1);
}
}
/*温度下限*/
if(temp3 < 0)
{
write_zifu(2,10,'-');
write_num3(2,11,-(temp3));
write_zifu(2,15,' ');
}
else
{
write_zifu(2,10,'+');
if(temp3>=1000)
{write_num4(2,11,temp3);}
else
{write_num3(2,11,temp3);}
}
/*报警*/
if(flag_temp == 1) //温度小于零
{
if((-t)>temp1 || (-t)<temp3) {LED = 0;}
else {LED = 1;}
}
else //温度大于零
{
if(t>temp1 || t<temp3) {LED = 0;}
else {LED = 1;}
}
}
}
/**************************定时器T1中断服务函数************************************/
void T1_time() interrupt 3
{
TH1 = (65535-20000)/256; //计数20000个
TL1 = (65535-20000)%256;
temp5 += 1;
if(temp5 >= 25)
{
temp5 = 0;
TR1 = 0;
ReadTemperature();
TR1 = 1;
}
}