|
下面是程序和要求
产品要求
质量标准 电路设计要求:
1、 温度在10度以下,每间隔X分钟工作一次,工作时间Y分钟
温度在11-20度,每间隔X分钟工作一次,工作时间Y分钟
温度在21-30度,每间隔X分钟工作一次,工作时间Y分钟
温度在31-40度,每间隔X分钟工作一次,工作时间Y分钟
温度在41度以上,每间隔X分钟工作一次,工作时间Y分钟
注意:X在5-999分钟范围,Y在1-60分钟范围
2、 白天工作,晚上工作一次(最好是采用光感)
3、 继电器输出,
4、 工作电压:12V直流电(要求少于12V停止工作)
配套程序
#include <stc89.h>
#include<intrins.h>
#include<eeprom.h>
#include <ds18b20.h>
#include <display.h>
#include <worktime.h>
#define uchar unsigned char
#define uint unsigned int
int count[7]={0,0,0,0,0,0,0};
void Work_Time_Set();
void KEY();
void DS18_delay(int useconds);
unsigned char ow_reset(void);
void write_bit(char bitval);
void ds18write_byte(char val);
unsigned char read_bit(void);
unsigned char DSread_byte(void);
unsigned int ReadTemperature(void);
sbit P1_1=P1^1;
sbit P1_7=P1^4;
uint sec;
uint tcnt;
uchar i,j;
uchar mcount[7]={0,0,0,0,0,0,0};
uchar ncount[7]={0,0,0,0,0,0,0};
//int num;
/********************************************************************
定时中断服务函数
*********************************************************************/
void t0(void) interrupt 1 using 0 //定时中断服务函数
{
tcnt++; //每过250ust tcnt 加一
if(tcnt==400) //计满400 次(1/10 秒)时
{
tcnt=0; //重新再计
sec++;
if(sec==600) //定时1s,在从零开始计时
{
sec=0;
switch(num1)
{
case 1:count[1]++;
if((count[1]<(DSY_Buffer[1]))) P1_1=1;
else if((count[1]>=(DSY_Buffer[1]))&&(count[1]<((DSY_Buffer[1])+(DSY_Buffer[6])))) {P1_1=0;i++;}
else {P1_1=1;j++;count[1]=0;}
/* EEPROMSectorErase((*(p)));
mm=DSY_Buffer[1]/255;
mn=DSY_Buffer[1]%255;
mcount[1]=count[1]/255;
ncount[1]=count[1]%255;
EEPROMWriteByte((*(p))+5,mm);
EEPROMWriteByte((*(p))+mm,mn);
EEPROMWriteByte((*(p))+10,mcount[1]);
EEPROMWriteByte((*(p))+mcount[1]+11,ncount[1]); */
break;
case 2:count[2]++;if((count[2]<(DSY_Buffer[2]))) P1_1=1;
else if((count[2]>=(DSY_Buffer[2]))&&(count[2]<((DSY_Buffer[2])+(DSY_Buffer[6])))) {P1_1=0;i++;}
else {P1_1=1;j++;count[2]=0;}
/* EEPROMSectorErase((*(p+1)));
mm=DSY_Buffer[2]/255;
mn=DSY_Buffer[2]%255;
mcount[2]=count[2]/255;
ncount[2]=count[2]%255;
EEPROMWriteByte((*(p+1))+5,mm);
EEPROMWriteByte((*(p+1))+mm,mn);
EEPROMWriteByte((*(p+1))+10,mcount[2]);
EEPROMWriteByte((*(p+1))+mcount[2]+11,ncount[2]); */
break;
case 3:count[3]++;
if((count[3]<(DSY_Buffer[3]))) P1_1=1;
else if((count[3]>=(DSY_Buffer[3]))&&(count[3]<((DSY_Buffer[3])+(DSY_Buffer[6])))) {P1_1=0;i++;}
else {P1_1=1;j++;count[3]=0;}
/* EEPROMSectorErase((*(p+2)));
mm=DSY_Buffer[3]/255;
mn=DSY_Buffer[3]%255;
mcount[3]=count[3]/255;
ncount[3]=count[3]%255;
EEPROMWriteByte((*(p+2))+5,mm);
EEPROMWriteByte((*(p+2))+mm,mn);
EEPROMWriteByte((*(p+2))+10,mcount[3]);
EEPROMWriteByte((*(p+2))+mcount[3]+11,ncount[3]); */
break;
case 4:count[4]++;
if((count[4]<(DSY_Buffer[4]))) P1_1=1;
else if((count[4]>=(DSY_Buffer[4]))&&(count[4]<((DSY_Buffer[4])+(DSY_Buffer[6])))) {P1_1=0;i++;}
else {P1_1=1;j++;count[4]=0;}
/* EEPROMSectorErase((*(p+3)));
mm=DSY_Buffer[4]/255;
mn=DSY_Buffer[4]%255;
mcount[4]=count[4]/255;
ncount[4]=count[4]%255;
EEPROMWriteByte((*(p+3))+5,mm);
EEPROMWriteByte((*(p+3))+mm,mn);
EEPROMWriteByte((*(p+3))+10,mcount[4]);
EEPROMWriteByte((*(p+3))+mcount[4]+11,ncount[4]); */
break;
case 5:count[5]++;if((count[5]<(DSY_Buffer[5]))) P1_1=1;
else if((count[5]>=(DSY_Buffer[5]))&&(count[5]<((DSY_Buffer[5])+(DSY_Buffer[6])))) {P1_1=0;i++;}
else {P1_1=1;j++;count[5]=0;}
/* EEPROMSectorErase((*(p+4)));
mm=DSY_Buffer[5]/255;
mn=DSY_Buffer[5]%255;
mcount[5]=count[5]/255;
ncount[5]=count[5]%255;
EEPROMWriteByte((*(p+4))+5,mm);
EEPROMWriteByte((*(p+4))+mm,mn);
EEPROMWriteByte((*(p+4))+10,mcount[5]);
EEPROMWriteByte((*(p+4))+mcount[5]+11,ncount[5]); */
break;
}
}
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
/*
mcount[1]=EEPROMReadByte((*(p))+10);
count[1]=((EEPROMReadByte((*(p))+mcount[1]+11))+((mcount[1])*(EEPROMReadByte((*(p))+10))));
mcount[2]=EEPROMReadByte((*(p+1))+10);
count[2]=((EEPROMReadByte((*(p+1))+mcount[2]+11))+((mcount[2])*(EEPROMReadByte((*(p+1))+10))));
mcount[3]=EEPROMReadByte((*(p+2))+10);
count[3]=((EEPROMReadByte((*(p+2))+mcount[3]+11))+((mcount[3])*(EEPROMReadByte((*(p+2))+10))));
mcount[4]=EEPROMReadByte((*(p+3))+10);
count[4]=((EEPROMReadByte((*(p+3))+mcount[4]+11))+((mcount[4])*(EEPROMReadByte((*(p+3))+10))));
mcount[5]=EEPROMReadByte((*(p+4))+10);
count[5]=((EEPROMReadByte((*(p+4))+mcount[5]+11))+((mcount[5])*(EEPROMReadByte((*(p+4))+10))));
*/
ctime=0;
TMOD=0x02; //定时器工作在方式2
ET0=1;
EA=1;
sec=0;
while(1)
{
if(P1_7==0)
{
i=0;
j=0;
Key_Time_Set();
KEY();
Work_Time_Set();
mm=EEPROMReadByte((*(p+address_count))+5);
DSY_Buffer[ctime]=(((mm)*(EEPROMReadByte((*(p+address_count)))))+(EEPROMReadByte((*(p+address_count))+mm)));
if(ctime==0) DSY_Buffer[ctime]=count[ctime];
if((DSY_Buffer[ctime]>count[ctime])||(DSY_Buffer[ctime]==0)) Led(DSY_Buffer[ctime]-count[ctime],ctime);
else if(((DSY_Buffer[ctime])<=(count[ctime]))&&((DSY_Buffer[ctime]!=0))) Led(DSY_Buffer[ctime]+DSY_Buffer[6]-count[ctime],6);
}
if(P1_7==1)
{
i=0;
j=0;
TR0=1;
num1=1;
Key_Time_Set();
KEY();
//Work_Time_Set();
//mm=EEPROMReadByte((*(p+address_count))+5);
//DSY_Buffer[ctime]=(((mm)*(EEPROMReadByte((*(p+address_count)))))+(EEPROMReadByte((*(p+address_count))+mm)));
if((ctime==1)||(ctime==2)||(ctime==3)||(ctime==4)||(ctime==5)) DSY_Buffer[ctime]=300;
if(ctime==0) DSY_Buffer[ctime]=count[ctime];
if((DSY_Buffer[ctime]>count[ctime])) Led(DSY_Buffer[ctime]-count[ctime],1);
else if((DSY_Buffer[ctime]<=(count[ctime]))) Led(DSY_Buffer[ctime]+DSY_Buffer[6]-count[ctime],6);
if(i==1)
{
while(j==0);
TR0=0;
while(P1_7);
}
}
}
}
/********************************************************************
结束
*********************************************************************/
|
|