📄 soft_rtc.h
字号:
void second_change_dis_use()
// when second change ,and display time ---->drive
{
if((RCURRENT_REFERENCE==8)||(RLCD_DISPLAY_STATUS==DISPLAY_DATE))
RFLAG_DISPLAY_05SEC=1;
}
unsigned char rtc_8025_3time_read()
{unsigned char l,value;
value=0;
for(l=0;l<3;l++)
if(1==rtc8025_read())
{
value=1;
l=3;
}
else
delay_1ms();
return value;
}
void rtc_use()
{unsigned char a;
unsigned char b,c;
a=(RSOFT_RTC_SECOND>>4)*10+(RSOFT_RTC_SECOND&0xf);
if(a>=59)
{
RSOFT_RTC_SECOND=0;
if(remote_jiehuo_10day!=0)
remote_jiehuo_10day=remote_jiehuo_10day-1;
if(quanshiya_10day!=0)
quanshiya_10day=quanshiya_10day-1;
if(remote_display_7day!=0)
remote_display_7day=remote_display_7day-1;
a=RSOFT_RTC_MINUTE&0xf0; //minute
a=a>>4;
a=a*10;
a=a+(RSOFT_RTC_MINUTE&0x0f);
if(a>=59)
{
RSOFT_RTC_MINUTE=0;
// if(remote_jiehuo_10day!=0) remote_jiehuo_10day=remote_jiehuo_10day-1;
// if(quanshiya_10day!=0) quanshiya_10day=quanshiya_10day-1;
a=RSOFT_RTC_HOUR&0xf0; //hour
a=a>>4;
a=a*10;
a=(0xf&RSOFT_RTC_HOUR)+a;
if (a>=23)
{
RSOFT_RTC_HOUR=0;
tingchao_enabled=3;
a=RSOFT_RTC_DAY&0xf0; //day
a=a>>4;
a=a*10;
a=a+(RSOFT_RTC_DAY&0x0f)+1;
b=one_byte_hex_to_bcd(a);//((a/10)<<4)+(a%10);
if(RSOFT_RTC_WEEK>=6)
RSOFT_RTC_WEEK=0; //week
else
RSOFT_RTC_WEEK=RSOFT_RTC_WEEK+1;
switch(RSOFT_RTC_MONTH) //month
{
case 0x1:
case 0x3:
case 0x5:
case 0x7:
case 0x8:
case 0x10:
case 0x12:
if(b>0x31)
{
RSOFT_RTC_DAY=1;
RSOFT_RTC_MONTH=RSOFT_RTC_MONTH+1;
if(RSOFT_RTC_MONTH>0x12)
{
RSOFT_RTC_MONTH=1;
a=10*(RSOFT_RTC_YEAR>>4)+(0xf&RSOFT_RTC_YEAR);
a=a+1;// year<35
RSOFT_RTC_YEAR=one_byte_hex_to_bcd(a);//((a/10)<<4)+(a%10);
}
}
else
RSOFT_RTC_DAY=b;
break;
case 0x4:
case 0x6:
case 0x9:
case 0x11:
if (b>0x30)
{
RSOFT_RTC_DAY=1;
b=RSOFT_RTC_MONTH+1;
a=b&0x0f;
if(a>9)
RSOFT_RTC_MONTH=0x10;
else
RSOFT_RTC_MONTH=b;
}
else
RSOFT_RTC_DAY=b;
break;
case 0x2:
a=value_hex_from_bcd(RSOFT_RTC_YEAR);
a=a%4;
if(a==0)
{
if(b>0x29)
{
RSOFT_RTC_DAY=1;
RSOFT_RTC_MONTH=RSOFT_RTC_MONTH+1;
}
else
RSOFT_RTC_DAY=b;
}
else
{
if(b>0x28)
{
RSOFT_RTC_DAY=1;
RSOFT_RTC_MONTH=RSOFT_RTC_MONTH+1;
}
else
RSOFT_RTC_DAY=b;
}
break;
}
}
else
{
a=a+1;
RSOFT_RTC_HOUR=one_byte_hex_to_bcd(a);//((a/10)<<4)+(a%10);
}
}
else
{
a=a+1;
RSOFT_RTC_MINUTE=one_byte_hex_to_bcd(a);//((a/10)<<4)+(a%10);
}
}
else
{
a=a+1;
RSOFT_RTC_SECOND=one_byte_hex_to_bcd(a);//((a/10)<<4)+(a%10);
}
}
// fm copy
void rtc()
{static unsigned char second_pointer,num;
unsigned char a,c;
unsigned char b;
unsigned char baojing_use;
c=0;
if(second_rtc_point_timera0!=second_pointer)
{
second_pointer=second_rtc_point_timera0;
pulse_delaysecond_7758=pulse_delaysecond_7758+1;
if(pulse_delaysecond_7758>power_delay)
init_7758();
second_change_dis_use();
rtc_use();
if((RSOFT_RTC_SECOND==0x30)&&((0xf&RSOFT_RTC_MINUTE)==0))
c=1; // 10 minute dui shi
if(qingqiuduishi_rtc==1)
{
c=1;
qingqiuduishi_rtc=0;
}
// 1 hour dui shi
// 1 good 0 err
time_to_bianchengqian();
baojing_use=1;
if(0== testsecond_minute_hour_day_month_year(&RSOFT_RTC_SECOND,&RSOFT_RTC_DAY))
{
c=1;
baojing_use=0;
}
if(c==1)
{
if(1==rtc_8025_3time_read())
{
if(1==testsecond_minute_hour_day_month_year(&rtc8025_timevalue[0],&rtc8025_timevalue[4]))
{
if(0==compare_date_time(3,&rtc8025_timevalue[0],&rtc8025_timevalue[4]))// <3second
baojing_use=0;
if((0==compare_date_time(1,&rtc8025_timevalue[0],&rtc8025_timevalue[4]))||(num>20))// <=1 20num--->do
{
move_rtc8025_to_softrtc();
num=0;
}
else
num=num+1;
}
else
baojing_use=0;
}
else
baojing_use=0;
}
do_ledspeek(baojing_use,1);
RSOFT_RTC_WEEK=week_from_day_month_year(&RSOFT_RTC_DAY);
if(baojing_use==0)
err_time_envent();
copy_ram_to_fm(R_SOFT_SECOND,7,R_SOFT_SECOND);
}
}
void zhongduan_8025_second_set()
{
tb1s=0;
tb1ic=0;
tb1mr=0xc0;
tb1=1023; //1023;
udf0=0;
tb1s=0;
tb1ic=7;
tb1s=1;
}
#pragma INTERRUPT zhongduan_8025_second
void zhongduan_8025_second()// power down
{
//
// ting dian rtc wei hu
second_rtc_point_timerb1=second_rtc_point_timerb1+1;
// ting dian
RTIME_QUANSHIYA_PANDUAN_USE=RTIME_QUANSHIYA_PANDUAN_USE+1;
if(RTIME_QUANSHIYA_PANDUAN_USE>600) //600
{
RTIME_QUANSHIYA_PANDUAN_USE=1;// 0
}
RQINGQIU_PANDUAN_TINGDIANCHAOBIAO=1;
if(tingchaojiehuo_use_num_second<14)
tingchaojiehuo_use_num_second=tingchaojiehuo_use_num_second+1;
else
tingchaojiehuo_use_num_second=0;
}
void rtc_tingdian()
{
unsigned char a;
unsigned char b,c;
unsigned char baojing_use;
if(second_rtc_point_timerb1!=second_tingdian)
{
second_tingdian=second_rtc_point_timerb1;
second_change_dis_use();
rtc_use();
RTIME_6MINUTE_USE=RTIME_6MINUTE_USE+1;
// bu shi zhong------------------>start
if(numlm75second<3600)
numlm75second= numlm75second+1;
// bu shi zhong------------------>end
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -