⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc8025.h

📁 嵌入式单片机开发,嵌入式单片机开发,嵌入式单片机开发
💻 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 + -