#include "reg52.h"
#include "intrins.h"
#include "ds1302.h"
#include "i2c.h"
#define uchar unsigned char
#define uint unsigned int
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
uchar code duan1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uchar code wei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
sfr P4=0xc0;
sfr AUXR=0x8e;
sbit p36=P4^2;
sbit p37=P4^4;
bit shuanshuo;
uchar disphuan[8]={11,11,11,11,11,11,11,11};
uchar jianhao,jianhao1=0,s4,s7,s6=0,xieru=0,xiugai=0,shikes=1,shikel=1,xielu=1,xunxu=1;
int shangfa=2000,xiafa=1000;
int xiafa1,shangfa1;
uint frep;
uchar time[7]={0x58,0x59,0x23,0,0,0,0};
uchar dtime[4];
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void disp()
{
uchar i;
for(i=0;i<8;i++)
{
P0=0XFF;
P2|=0XE0;
P2&=0X1F;
P0=wei[i];
P2|=0Xc0;
P2&=0X1F;
P0=duan[disphuan[i]];
P2|=0Xe0;
P2&=0X1F;
Delay1ms();
}
}
void keyxhuan()
{
P3=0XF0;p36=1;p37=1;
if((P3!=0xf0)||!p36||!p37)
{
if(!p37)
{
s7=1;
}
if(!p36)
{
s6=1;
s7=0;
}
}
P3=0x0f;p37=0;p36=0;
if((P3!=0x0f)&&(s7==1))
{
switch(P3)
{
case(0x0e):jianhao=0;s4=0;jianhao1=0;break;
case(0x0d):jianhao=2;s4=0;jianhao1=0;break;
case(0x0b):jianhao=4;s4=0;jianhao1=0;break;
case(0x07):s4++;
if((s4==4)&&(jianhao==0)&&(jianhao1!=5)) s4=1;
if((s4==3)&&((jianhao==2)||(jianhao==4))) s4=1;
if((s4==2)&&(jianhao1==5)) s4=0;
break;
}
while(P3!=0x0f);
}
if((P3!=0x0f)&&s6&&s4&&(jianhao1!=5))
{
switch(P3)
{
case(0x0e):jianhao1=1;break;
case(0x0d):jianhao1=3;break;
}
while(P3!=0x0f);
}
if((P3!=0x0f)&&s6)
{
if(P3==0x0b)
{
jianhao1=5;
s4=0;
}
while(P3!=0x0f);
}
}
void s7shijian()
{
char shuzhi;
if(s4!=0)
{
if(s4==1)
{
shuzhi=(time[0]/16)*10+(time[0]&0x0f);
if(jianhao1==1)
{
shuzhi=shuzhi+1;
if(shuzhi==60)
shuzhi=0;
jianhao1=0;
}
if(jianhao1==3)
{
shuzhi=shuzhi-1;
if(shuzhi<0)
shuzhi=59;
jianhao1=0;
}
time[0]=shuzhi/10*6+shuzhi;
if(!shuanshuo)
{
disphuan[0]=time[0]&0x0f;
disphuan[1]=time[0]/16;
}
if(shuanshuo)
{
disphuan[0]=11;
disphuan[1]=11;
}
disphuan[2]=10;
disphuan[3]=time[1]&0x0f;
disphuan[4]=time[1]/16;
disphuan[5]=10;
disphuan[6]=time[2]&0x0f;
disphuan[7]=time[2]/16;
}
if(s4==2)
{
shuzhi=(time[1]/16)*10+(time[1]&0x0f);
if(jianhao1==1)
{
shuzhi=shuzhi+1;
if(shuzhi==60)
shuzhi=0;
jianhao1=0;
}
if(jianhao1==3)
{
shuzhi=shuzhi-1;
if(shuzhi<0)
shuzhi=59;
jianhao1=0;
}
time[1]=shuzhi/10*6+shuzhi;
if(!shuanshuo)
{
disphuan[3]=time[1]&0x0f;
disphuan[4]=time[1]/16;
}
if(shuanshuo)
{
disphuan[3]=11;
disphuan[4]=11;
}
disphuan[0]=time[0]&0x0f;
disphuan[1]=time[0]/16;
disphuan[2]=10;
disphuan[5]=10;
disphuan[6]=time[2]&0x0f;
disphuan[7]=time[2]/16;
}
if(s4==3)
{
shuzhi=(time[2]/16)*10+(time[2]&0x0f);
if(jianhao1==1)
{
shuzhi=shuzhi+1;
if(shuzhi==24)
shuzhi=0;
jianhao1=0;
}
if(jianhao1==3)
{
shuzhi=shuzhi-1;
if(shuzhi<0)
shuzhi=23;
jianhao1=0;
}
time[2]=shuzhi/10*6+shuzhi;
if(!shuanshuo)
{
disphuan[6]=time[2]&0x0f;
disphuan[7]=time[2]/16;
}
if(shuanshuo)
{
disphuan[6]=11;
disphuan[7]=11;
}
disphuan[0]=time[0]&0x0f;
disphuan[1]=time[0]/16;
disphuan[2]=10;
disphuan[3]=time[1]&0x0f;
disphuan[4]=time[1]/16;
disphuan[5]=10;
}
xieru=0;
}
if(s4==0)
{
if(xieru==0)
{
ds1302rest(time);
xieru=1;
}
ds1302duchu(time);
disphuan[0]=time[0]&0x0f;
disphuan[1]=time[0]/16;
disphuan[2]=10;
disphuan[3]=time[1]&0x0f;
disphuan[4]=time[1]/16;
disphuan[5]=10;
disphuan[6]=time[2]&0x0f;
disphuan[7]=time[2]/16;
}
}
void s6chuli()
{
if(xiugai==0)
{
xiafa1=xiafa;
shangfa1=shangfa;
xiugai=1;
}
if(s4!=0)
{
if(s4==1)
{
if(jianhao1==1)
{
shangfa=shangfa+500;
if(shangfa==5500)
shangfa=0;
jianhao1=0;
}
if(jianhao1==3)
{
shangfa=shangfa-500;
if(shangfa<0)
shangfa=5000;
jianhao1=0;
}
if(!shuanshuo)
{
disphuan[4]=shangfa%10;
disphuan[5]=shangfa/10%10;
disphuan[6]=shangfa/100%10;
disphuan[7]=shangfa/1000;
}
if(shuanshuo)
{
disphuan[4]=11;
disphuan[5]=11;
disphuan[6]=11;
disphuan[7]=11;
}
disphuan[0]=xiafa%10;
disphuan[1]=xiafa/10%10;
disphuan[2]=xiafa/100%10;
disphuan[3]=xiafa/1000;
}
if(s4==2)
{
if(jianhao1==1)
{
xiafa=xiafa+500;
if(xiafa>shangfa)
xiafa=0;
jianhao1=0;
}
if(jianhao1==3)
{
xiafa=xiafa-500;
if(xiafa<0)
xiafa=shangfa;
jianhao1=0;
}
if(!shuanshuo)
{
disphuan[0]=xiafa%10;
disphuan[1]=xiafa/10%10;
disphuan[2]=xiafa/100%10;
disphuan[3]=xiafa/1000;
}
if(shuanshuo)
{
disphuan[0]=11;
disphuan[1]=11;
disphuan[2]=11;
disphuan[3]=11;
}
disphuan[4]=shangfa%10;
disphuan[5]=shangfa/10%10;
disphuan[6]=shangfa/100%10;
disphuan[7]=shangfa/1000;
}
if((shangfa!=shangfa1)||(xiafa!=xiafa1))
{
xiugai=0;
xielu=1;
}
}
if(s4==0)
{
float shuju1;
uint dianya;
shuju1= adc_pcf8591();
dianya=shuju1/255*5000;
disphuan[0]=dianya%10;
disphuan[1]=dianya/10%10;
disphuan[2]=dianya/100%10;
disphuan[3]=dianya/1000;
disphuan[4]=11;
disphuan[5]=10;
disphuan[6]=1;
disphuan[7]=10;
if((dianya>shangfa)&&shikes)
{
E2WriteByte(0x03,0);
Delay10ms();
E2WriteByte(0x04,time[0]);
Delay10ms();
E2WriteByte(0x05,time[1]);
Delay10ms();
E2WriteByte(0x06,time[2]);
xunxu=1;
shikes=0;
}
if(dianya<shangfa)
shikes=1;
if((dianya<xiafa)&&shikel)
{
E2WriteByte(0x03,1);
Delay10ms();
E2WriteByte(0x04,time[0]);
Delay10ms();
E2WriteByte(0x05,time[1]);
Delay10ms();
E2WriteByte(0x06,time[2]);
xunxu=1;
shikel=0;
}
if(dianya>xiafa)
shikel=1;
}
}
void shujuchuli()
{
if(jianhao==0)
{
s7shijian();
}
if(jianhao==2)
{