📄 sys_status.c
字号:
void delay_time()
{
uint i;
for(i=N_I2C;i>1;i--)
{;}
}
void I2c_start (void)
{
MDE = 1;
MDO = 1;
MCO = 1;
delay_time();
MDO = 0;
delay_time();
MCO = 0;
}
void I2c_stop (void)
{
MDE = 1;
MDO = 0;
MCO = 1;
delay_time();
MDO = 1;
delay_time();
}
bit I2c_write (uchar output_data)
{
uchar index;
MDE = 1;
for(index = 0; index < 8; index++)
{
MDO = ((output_data & 0x80) ? 1 : 0);
output_data <<= 1;
MCO = 1;
delay_time();
MCO = 0;
delay_time();
}
MDE = 0;
delay_time();
MCO = 1;
delay_time();
if (!MDI)
{
MCO = 0;
return 1;
}
else
{
MCO = 0;
return 0;
}
}
uchar I2c_read (bit send_ack)
{
uchar index, input_data;
input_data = 0x00;
MDE = 0;
MCO = 0;
for(index = 0; index < 8; index++)
{
input_data <<= 1;
MCO = 1;
delay_time();
MCO = 0;
delay_time();
input_data |= MDI;
}
MDE = 1;
if(send_ack)
MDO = 0;
else
MDO = 1;
delay_time();
MCO = 1;
delay_time();
MCO = 0;
delay_time();
MDO = 0;
MDO = 0;
MDE = 0;
return input_data;
}
void Init_ISL1208(uchar x)
{
uchar i,temp,temp2;
temp2=x;
I2c_start();
I2c_write(0xde);
I2c_write(0x07);
I2c_write(0x11);
delay_time();
I2c_stop();
delay_time();
if(temp2==0)
{
EEPROM_write_value[0]=0x00;
EEPROM_write_value[1]=0x00;
EEPROM_write_value[2]=0x0B;
EEPROM_write_value[3]=0x00;
EEPROM_write(10);
EEPROM_write_value[0]=HOUR_present|0x80;
EEPROM_write_value[1]=DAY_present;
EEPROM_write_value[2]=MONTH_present;
EEPROM_write_value[3]=YEAR_present;
EEPROM_write(11);
time_ISL_write[0]=MINUTE_present;
time_ISL_write[1]=HOUR_present|0x80;
time_ISL_write[2]=DAY_present;
time_ISL_write[3]=MONTH_present;
time_ISL_write[4]=YEAR_present;
}
if(temp2==1)
{
Pre_Init_ISL1208();
}
for(i=0;i<=5;i++)
{
switch(i)
{
case 0: {temp=0; break;}
case 1: {temp=time_ISL_write[0]; break;}
case 2: {temp=time_ISL_write[1]; break;}
case 3: {temp=time_ISL_write[2]; break;}
case 4: {temp=time_ISL_write[3]; break;}
case 5: {temp=time_ISL_write[4]; break;}
default :break;
}
I2c_start();
I2c_write(0xde);
I2c_write(i);
I2c_write(temp);
delay_time();
I2c_stop();
delay_time();
}
I2c_start();
I2c_write(0xde);
I2c_write(0x12);
I2c_write(JYM_ISL1208);
delay_time();
I2c_stop();
delay_time();
I2c_start();
I2c_write(0xde);
I2c_write(0x07);
I2c_write(0x00);
delay_time();
I2c_stop();
delay_time();
}
void Pre_Init_ISL1208()
{
uchar i1,i2;
EEPROM_read(10);
i1=EEPROM_read_value[2];
if((i1<=10)||(i1>=21))
i1=20;
for(i2=0;i2<=9;i2++)
{
EEPROM_read(i1);
if((EEPROM_read_value[3]<=0x99)&&(EEPROM_read_value[2]<=0x12)&&(EEPROM_read_value[1]<=0x31))
{
if(EEPROM_read_value[3]>YEAR_present)
{
time_ISL_write[0]=0x00;
time_ISL_write[1]=EEPROM_read_value[0];
time_ISL_write[2]=EEPROM_read_value[1];
time_ISL_write[3]=EEPROM_read_value[2];
time_ISL_write[4]=EEPROM_read_value[3];
break;
}
else if((EEPROM_read_value[3]==YEAR_present)&&(EEPROM_read_value[2]>MONTH_present))
{
time_ISL_write[0]=0x00;
time_ISL_write[1]=EEPROM_read_value[0];
time_ISL_write[2]=EEPROM_read_value[1];
time_ISL_write[3]=EEPROM_read_value[2];
time_ISL_write[4]=EEPROM_read_value[3];
break;
}
else if((EEPROM_read_value[3]==YEAR_present)&&(EEPROM_read_value[2]==MONTH_present)&&(EEPROM_read_value[1]>=DAY_present))
{
time_ISL_write[0]=0x00;
time_ISL_write[1]=EEPROM_read_value[0];
time_ISL_write[2]=EEPROM_read_value[1];
time_ISL_write[3]=EEPROM_read_value[2];
time_ISL_write[4]=EEPROM_read_value[3];
break;
}
else
{
i1--;
if(i1==10)
i1=20;
}
}
else
{
i1--;
if(i1==10)
i1=20;
}
}
EEPROM_read(10);
EEPROM_write_value[0]=EEPROM_read_value[0]+1;
EEPROM_write_value[1]=EDATA2;
EEPROM_write_value[2]=EDATA3;
EEPROM_write_value[3]=EDATA4;
EEPROM_write(10);
}
void ISL1208_ROM()
{
uchar i3;
EEPROM_read(10);
i3=EEPROM_read_value[2];
i3+=1;
if((i3>=21)||(i3<=10))
i3=11;
EEPROM_write_value[0]=present_time[2];
EEPROM_write_value[1]=present_time[3];
EEPROM_write_value[2]=present_time[4];
EEPROM_write_value[3]=present_time[5];
EEPROM_write(i3);
EEPROM_read(10);
EEPROM_write_value[0]=EDATA1;
EEPROM_write_value[1]=EDATA2;
EEPROM_write_value[2]=i3;
EEPROM_write_value[3]=EDATA4;
EEPROM_write(10);
}
void present_time_read()
{
uchar i;
I2c_start();
I2c_write(0xde);
I2c_write(0x00);
I2c_start();
I2c_write(0xdf);
for(i=0;i<=4;i++)
{
present_time[i]=I2c_read(1);
}
present_time[5]=I2c_read(0);
delay_time();
I2c_stop();
delay_time();
}
void EEPROM_write(uchar page_add)
{
EADRH=0;
EADRL=page_add;
EDATA1=EEPROM_write_value[0];
EDATA2=EEPROM_write_value[1];
EDATA3=EEPROM_write_value[2];
EDATA4=EEPROM_write_value[3];
ECON=0x05;
ECON=0x02;
}
void EEPROM_read(uchar page_add)
{
EADRH=0;
EADRL=page_add;
ECON=0x01;
EEPROM_read_value[0]=EDATA1;
EEPROM_read_value[1]=EDATA2;
EEPROM_read_value[2]=EDATA3;
EEPROM_read_value[3]=EDATA4;
}
void Init_time_add()
{
uchar add_i3;
for(add_i3=0;add_i3<=3;add_i3++)
{EEPROM_write_value[add_i3]=0x00;}
EEPROM_write(4);
EEPROM_write(5);
}
void time_add_backup()
{
ulong temp1,temp2;
EEPROM_read(5);
temp2=EEPROM_read_value[0]*10000+EEPROM_read_value[1]*100+EEPROM_read_value[2];
EEPROM_read(4);
temp1=EEPROM_read_value[0]*10000+EEPROM_read_value[1]*100+EEPROM_read_value[2];
if((temp1>=temp2)&&(EEPROM_read_value[0]<=100)&&(EEPROM_read_value[1]<100)&&(EEPROM_read_value[2]<100)&&(EEPROM_read_value[3]<60))
{
EEPROM_write_value[0]=EEPROM_read_value[0];
EEPROM_write_value[1]=EEPROM_read_value[1];
EEPROM_write_value[2]=EEPROM_read_value[2];
EEPROM_write_value[3]=EEPROM_read_value[3];
EEPROM_write(5);
}
else
{
EEPROM_read(5);
EEPROM_write_value[0]=EEPROM_read_value[0];
EEPROM_write_value[1]=EEPROM_read_value[1];
EEPROM_write_value[2]=EEPROM_read_value[2];
EEPROM_write_value[3]=EEPROM_read_value[3];
EEPROM_write(4);
}
}
uchar ISL1208_status_check()
{
uchar i4;
I2c_start();
I2c_write(0xde);
I2c_write(0x12);
I2c_start();
I2c_write(0xdf);
i4=I2c_read(0);
delay_time();
I2c_stop();
delay_time();
EEPROM_read(10);
if(EEPROM_read_value[0]<=30)
{
present_time_read();
if((i4==JYM_ISL1208)&&(present_time[5]<=0x99)&&(present_time[4]<=0x12)&&(present_time[3]<=0x31))
{
if(present_time[5]>YEAR_present)
{
ISL1208_ROM();
return(1);
}
else if((present_time[5]==YEAR_present)&&(present_time[4]>MONTH_present))
{
ISL1208_ROM();
return(1);
}
else if((present_time[5]==YEAR_present)&&(present_time[4]==MONTH_present)&&(present_time[3]>=DAY_present))
{
ISL1208_ROM();
return(1);
}
else
{
Init_ISL1208(1);
return(1);
}
}
else
{
Init_ISL1208(1);
return(1);
}
}
else
return(0);
}
void time_deadline_check()
{
present_time_read();
if((Flag_sys_status==1)||(Flag_sys_status==2))
{
if(present_time[5]>YEAR_deadline1)
{
Flag_sys_status=2;
}
else if((present_time[5]==YEAR_deadline1)&&(present_time[4]>MONTH_deadline1))
{
Flag_sys_status=2;
}
else if((present_time[5]==YEAR_deadline1)&&(present_time[4]==MONTH_deadline1)&&(present_time[3]>=DAY_deadline1))
{
Flag_sys_status=2;
}
else
{
Flag_sys_status=1;
}
}
if((Flag_sys_status==3)||(Flag_sys_status==4))
{
if(present_time[5]>YEAR_deadline2)
{
Flag_sys_status=4;
}
else if((present_time[5]==YEAR_deadline2)&&(present_time[4]>MONTH_deadline2))
{
Flag_sys_status=4;
}
else if((present_time[5]==YEAR_deadline2)&&(present_time[4]==MONTH_deadline2)&&(present_time[3]>=DAY_deadline2))
{
Flag_sys_status=4;
}
else
{
Flag_sys_status=3;
}
}
}
void time_add_deadline_check()
{
ulong x;
EEPROM_read(4);
x=EEPROM_read_value[0]*10000+EEPROM_read_value[1]*100+EEPROM_read_value[2];
if((Flag_sys_status==1)||(Flag_sys_status==2))
{
if(x>=HOUR_deadline1)
Flag_sys_status=2;
else
Flag_sys_status=1;
}
if((Flag_sys_status==3)||(Flag_sys_status==4))
{
if(x>=(HOUR_deadline1+HOUR_deadline2))
Flag_sys_status=4;
else
Flag_sys_status=3;
}
}
void time_add_write()
{
uchar add_i1,add_i2;
EEPROM_read(4);
for(add_i1=0;add_i1<=3;add_i1++)
{time_add_value[add_i1]=EEPROM_read_value[add_i1];}
time_add_value[3]+=1;
if(time_add_value[3]>=6)
{
time_add_value[3]-=6;
time_add_value[2]+=1;
}
if(time_add_value[2]>=100)
{
time_add_value[2]-=100;
time_add_value[1]+=1;
}
if(time_add_value[1]>=100)
{
time_add_value[1]-=100;
time_add_value[0]+=1;
}
for(add_i2=0;add_i2<=3;add_i2++)
{EEPROM_write_value[add_i2]=time_add_value[add_i2];}
EEPROM_write(4);
}
void Flag_sys_status_write()
{
EEPROM_read(1);
EEPROM_write_value[0]=JYM_sys;
EEPROM_write_value[1]=Flag_sys_status;
EEPROM_write_value[2]=EDATA3;
EEPROM_write_value[3]=EDATA4;
EEPROM_write(1);
EEPROM_write(2);
EEPROM_write(3);
}
void sys_status_check()
{
ulong i6;
uchar temp1,temp2,temp3;
EEPROM_read(3);
temp3=EEPROM_read_value[1];
EEPROM_read(2);
temp2=EEPROM_read_value[1];
EEPROM_read(1);
temp1=EEPROM_read_value[1];
if((temp1==temp2)&&(temp1<=6))
Flag_sys_status=temp1;
else if((temp1==temp3)&&(temp1<=6))
Flag_sys_status=temp1;
else if((temp2==temp3)&&(temp2<=6))
Flag_sys_status=temp2;
else
{Flag_sys_status=1;}
if(EEPROM_read_value[0]!=JYM_sys)
{
if((EEPROM_read_value[2]>=100)&&(EEPROM_read_value[2]<255))
{
fault_led(5);
display_send();
for(i6=50000;i6>1;i6--)
;
EEPROM_read_value[2]=0;
}
EEPROM_write_value[0]=JYM_sys;
EEPROM_write_value[1]=EDATA2;
EEPROM_write_value[2]=EEPROM_read_value[2]+1;
EEPROM_write_value[3]=EDATA4;
EEPROM_write(1);
EEPROM_write(2);
EEPROM_write(3);
}
}
void sys_status_treat()
{
switch(Flag_sys_status)
{
case 0:
{
Init_ISL1208(0);
Init_time_add();
Flag_sys_status=1;
Flag_sys_status_write();
break;
}
case 1:
{
if(ISL1208_status_check()==1)
{
time_deadline_check();
if(Flag_sys_status!=1)
{
Flag_sys_status_write();
}
}
else
{
time_add_deadline_check();
if(Flag_sys_status!=1)
{
Flag_sys_status_write();
}
}
break;
}
case 2:
{
if(ISL1208_status_check()==1)
{
time_deadline_check();
if(Flag_sys_status!=2)
{
Flag_sys_status_write();
}
}
else
{
time_add_deadline_check();
if(Flag_sys_status!=2)
{
Flag_sys_status_write();
}
}
break;
}
case 3:
{
if(ISL1208_status_check()==1)
{
time_deadline_check();
if(Flag_sys_status!=3)
{
Flag_sys_status_write();
}
}
else
{
time_add_deadline_check();
if(Flag_sys_status!=3)
{
Flag_sys_status_write();
}
}
break;
}
case 4:
{
if(ISL1208_status_check()==1)
{
time_deadline_check();
if(Flag_sys_status!=4)
{
Flag_sys_status_write();
}
}
else
{
time_add_deadline_check();
if(Flag_sys_status!=4)
{
Flag_sys_status_write();
}
}
break;
}
default:
{
ISL1208_status_check();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -