}
/*****表现开机初始化守候画面*****/
Disp_init()
{
P2 = 0xbf; //表现-
P1 = 0xf7;
Delay(200);
P1 = 0xfb;
Delay(200);
P1 = 0xfd;
Delay(200);
P1 = 0xfe;
Delay(200);
P1 = 0xff; //封锁表现
}
/*****表现温度子措施*****/
Disp_Temperature() //表现温度
{
P2 =0xc6; //表现C
P1 = 0xf7;
Delay(300);
P2 =LEDData[n]; //表现个位
P1 = 0xfb;
Delay(300);
P2 =LEDData[m%10]; //表现十位
DIAN = 0; //表现小数点
P1 = 0xfd;
Delay(300);
P2 =LEDData[m/10]; //表现百位
P1 = 0xfe;
Delay(300);
P1 = 0xff; //封锁表现
}
/*****表现报警温度子措施*****/
Disp_alarm(uchar baojing)
{
P2 =0xc6; //表现C
P1 = 0xf7;
Delay(200);
P2 =LEDData[baojing%10]; //表现十位
P1 = 0xfb;
Delay(200);
P2 =LEDData[baojing/10]; //表现百位
P1 = 0xfd;
Delay(200);
if(set_st==1)P2 =0x89;
else if(set_st==2)P2 =0xc7; //上限H、下限L标示
P1 = 0xfe;
Delay(200);
P1 = 0xff; //封锁表现
}
/*****报警子措施*****/
void Alarm()
{
if(x>=10){beep_st=~beep_st;x=0;}
if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0;
else BEEP=1;
}
/*****主函数*****/
void main(void)
{
uint z;
InitTimer(); //初始化按时器
EA=1; //全局间断开关
TR0=1;
ET0=1; //开启按时器0
IT0=1;
IT1=1;
check_wendu();
check_wendu();
for(z=0;z<300;z++)
{
Disp_init();
}
while(1)
{
if(SET==0)
{
Delay(2000);
do{}while(SET==0);
set_st++;x=0;shanshuo_st=1;
if(set_st>2)set_st=0;
}
if(set_st==0)
{
EX0=0; //封锁外部间断0
EX1=0; //封锁外部间断1
check_wendu();
Disp_Temperature();
Alarm(); //报警检测
}
else if(set_st==1)
{
BEEP=1; //封锁蜂鸣器
EX0=1; //开启外部间断0
EX1=1; //开启外部间断1
if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
if(shanshuo_st) {Disp_alarm(shangxian);}
}
else if(set_st==2)
{
BEEP=1; //封锁蜂鸣器
EX0=1; //开启外部间断0
EX1=1; //开启外部间断1
if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
if(shanshuo_st) {Disp_alarm(xiaxian);}
}
}
}
/*****END*****/
DS18B20.h:
#include <AT89X52.h>
#define DQ P3_6 //界说DS18B20总线I/O
/*****延时子措施*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
Delay_DS18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay_DS18B20(80); //准确延时,大于480us
DQ = 1; //拉高总线
Delay_DS18B20(14);
x = DQ; //稍做延时后,假如x=0则初始化乐成,x=1则初始化失败
(责任编辑:admin) |