📄 rtc8025.h
字号:
#define false2 0
#define true2 1
#define writeadder 0x64 //rtc read address
#define readadder 0x65 //rtc write address
//unsigned char rtc8025_timevalue[8];
char iic2_buf;
struct bit_iic2
{
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
};
union byte_iic2
{
struct bit_iic2 bit;
unsigned char byte;
};
void rtc_8025delay ()
{
unsigned char f;
for (f=0;f<15;f++)
{;}
}
void rtc_8025star()
{
scl2=1;
sda2=1;
sdr_clk2=1;
sdr_sda2=1; //output
rtc_8025delay();
sda2=0;
rtc_8025delay();
scl2=0;
rtc_8025delay();
}
void rtc_8025stop()
{
sdr_sda2=1;
sda2=0;
scl2=0;
rtc_8025delay();
scl2=1;
rtc_8025delay();
sda2=1;
rtc_8025delay();
}
void rtc_8025wbyte(unsigned char a)
{
unsigned char a1;
union byte_iic2 eeprom_use;
sdr_sda2=1;
eeprom_use.byte=a;
for(a1=0;a1<8;a1++)
{
sda2=eeprom_use.bit.b7;
rtc_8025delay();
scl2=1;
eeprom_use.byte=eeprom_use.byte<<1;
rtc_8025delay();
scl2=0;
rtc_8025delay();
}
}
unsigned char rtc_8025rbyte()
{
unsigned char a1;
union byte_iic2 eeprom_use;
//sda2=1;
sdr_sda2=0; //input
rtc_8025delay();
for(a1=0;a1<8;a1++)
{
scl2=1;
rtc_8025delay();
eeprom_use.byte=eeprom_use.byte<<1;
eeprom_use.bit.b0=sda2;
scl2=0;
rtc_8025delay();
}
return eeprom_use.byte;
}
void rtc_8025ack()
{
scl2=0;//
sda2=0;
sdr_sda2=1; //output
scl2=1;//
rtc_8025delay();
scl2=0;
rtc_8025delay();
}
void rtc_8025noack()
{
scl2=0;//
sda2=1;
sdr_sda2=1; //output
scl2=1;//
rtc_8025delay();
scl2=0;
rtc_8025delay();
}
unsigned char rtc_8025chack()
{unsigned char a,iic2_flagword;
a=0;
sdr_sda2=0;
rtc_8025delay();
scl2=1;//
//sdr_sda2=0; //input
rtc_8025delay();
//iic2_flagword=0;
while((a!=30)&&(sda2!=0))
{a++;}
if(a==30)
a=0;
else
a=1;
//while(sda2==1){;}
//iic2_flagword=1;
scl2=0;
rtc_8025delay();
return a;
}
unsigned char rtc_8025wrnbyte(ad,b) //ad word adderss, b word counter
unsigned char ad,b;
{unsigned char i,value;
rtc_8025star();
rtc_8025wbyte(writeadder);
if(1==rtc_8025chack())
{
rtc_8025wbyte(ad);
if(1==rtc_8025chack()) //word adderss
{
value=1;
for (i=0;i<b;i++)
{
rtc_8025wbyte(rtc8025_timevalue[i]);
if(0==rtc_8025chack())
{
value=0;
//date
i=b;
}
}
}
else
value=0;
}
else
value=0;
rtc_8025stop();
return value;
}
unsigned char rtc_8025rdnbyte(ad,b) //ad word adderss, b word counter
unsigned char ad,b;
{unsigned char i,value;
value=1;
rtc_8025star();
rtc_8025wbyte(writeadder);
if(1==rtc_8025chack())
{
rtc_8025wbyte(ad);
if(1==rtc_8025chack())
{
rtc_8025star();
rtc_8025wbyte(0x65);
if(1==rtc_8025chack())
for (i=0;i<b;i++)
{
rtc8025_timevalue[i]=rtc_8025rbyte();
if((i+1)<b)
rtc_8025ack();
else
rtc_8025noack();
}
else
value=0;
}
else
value=0;
}
else
value=0;
rtc_8025stop();
return value;
}
void rtc8025_set()
{
rtc8025_timevalue[0]=0x23;
rtc8025_timevalue[1]=0xa0;
if(0==rtc_8025wrnbyte(0xe0,2))
{
delay_10ms();
rtc_8025wrnbyte(0xe0,2);
}
//add------------------------>
rtc8025_timevalue[0]=0;
if(0==rtc_8025wrnbyte(0x70,1))
{
delay_10ms();
rtc_8025wrnbyte(0x70,1);
}
}
unsigned char rtc8025_read() //read ss mm hh ww dd mm yy
{
return rtc_8025rdnbyte(0,7);
} //date<---->bcd
unsigned char rtc8025_read_check() //read ss mm hh ww dd mm yy
{
unsigned char value;
value=0;
if(1==rtc8025_read())
if(1==testsecond_minute_hour_day_month_year(&rtc8025_timevalue[0],&rtc8025_timevalue[4]))
value=1;
return value;
} //date<---->bcd
void hard_timechanged_use()
{if(1!=timenotchanged)// bu chang shi bu cao zuo
if(powerup_changedtime_priceswitch!=0)
XULIANG_MINUTE=RSOFT_RTC_MINUTE+2;
timenotchanged=0;
}
unsigned char rtc8025_write() //read ss mm hh ww dd mm yy
{
if(1==testsecond_minute_hour_day_month_year(&rtc8025_timevalue[0],&rtc8025_timevalue[4]))
{
hard_timechanged_use();
return rtc_8025wrnbyte(0,7);
}
else
return 0;
} //date<---->bcd
unsigned char rtc8025_write_week_day_month_year(unsigned char *week)
{
if(1==test_week_day_month_year(*week,week+1))
{
hard_timechanged_use();
rtc8025_timevalue[0]=*week;
rtc8025_timevalue[1]=*(week+1);
rtc8025_timevalue[2]=*(week+2);
rtc8025_timevalue[3]=*(week+3);
return rtc_8025wrnbyte(0x30,4);
}
else
return 0;
}
unsigned char rtc8025_write_second_minute_hour(unsigned char *second)
{
if(3==testsecond(*second)+testminute(*(second+1))+testhour(*(second+2)))
{
hard_timechanged_use();
rtc8025_timevalue[0]=*second;
rtc8025_timevalue[1]=*(second+1);
rtc8025_timevalue[2]=*(second+2);
return rtc_8025wrnbyte(0,3);
}
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -