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

📄 rtc2025.c

📁 rtc2025 时钟 芯片 源代码
💻 C
字号:
#include "include/RTC2025.h"
#include "include/main.h"
#include "include/SEGMENT.h"

void rtc_out_byte(unsigned char *ptr)
{	
	unsigned char i, temp;

	rtc_data_wr;
	for(i=0;i<8;i++)
	{
		temp = *ptr << i;
		temp &= 0x80;
		if(temp) {rtc_data_hi;}
		else	 {rtc_data_lo;}
		delay760(rtc_Tsetup);
		
		rtc_clk_hi
		delay760(rtc_Thold);
		
		rtc_clk_lo
		delay760(rtc_Thold);
	}
}

void rtc_in_byte(unsigned char *ptr)
{
	unsigned char i, temp=0;
	
	rtc_data_rd;

	for(i=0;i<8;i++)
	{
		rtc_clk_hi
		delay760(rtc_Tcatch);
			
		temp = (unsigned char)((HwGDATA_B & 0x100) >> 8 ); // 
		if(i == 0) *ptr = temp;
		else *ptr = (*ptr << 1) | temp;

		delay760(rtc_Tcatch);
		
		rtc_clk_lo
		delay760(rtc_Thold);
	}
}

void rtc_start()
{
	//rtc_data;
	rtc_data_wr;
	rtc_clk_hi;
	rtc_data_hi;
	delay760(rtc_Tbuf);
	rtc_data_lo;
	delay760(rtc_Thold);
	rtc_clk_lo;
	delay760(rtc_Thold);
}

void rtc_stop()
{
	//rtc_data;
	rtc_data_wr;
	//rtc_clk;
	//rtc_clk_wr;
	rtc_data_lo;
	delay760(rtc_Thold);
	rtc_clk_hi;
	delay760(rtc_Thold);
	rtc_data_hi;
	delay760(rtc_Thold);
}
unsigned char rtc_get_ack(void)
{	
	unsigned int i=0;
	
	rtc_data_rd;

	rtc_clk_hi;
	delay760(rtc_Tcatch);
	
	i = (unsigned int)(HwGDATA_B & 0x100);
	delay760(rtc_Tcatch);
	
	rtc_clk_lo
	delay760(rtc_Thold);
	//if(i==0) 
	return i;
}

void rtc_do_ack(unsigned char bit)
{

	rtc_data_wr;

	if(bit) rtc_data_hi
	else 	rtc_data_lo
	delay760(rtc_Tsetup);
		
	rtc_clk_hi
	delay760(rtc_Thold);
	
	rtc_clk_lo
	delay760(rtc_Thold);
}

unsigned char rtc_write(unsigned char rg, unsigned char *ptr)
{
	unsigned char i;
	rtc_start();
	i = 0x64;
	rtc_out_byte(&i);
	if(rtc_get_ack() != 0) 
	{
		rtc_stop();
		return 0;
	}
	i = (rg<<4);
	rtc_out_byte(&i);
	if(rtc_get_ack() != 0) 
	{
		rtc_stop();
		return 0;
	}
	rtc_out_byte(ptr);
	if(rtc_get_ack() != 0) 
	{
		rtc_stop();
		return 0;
	}
	rtc_stop();
	return 1;
}

unsigned char rtc_read(unsigned char rg, unsigned char *ptr)
{
	unsigned char i;
	rtc_start();
	i = 0x64;
	rtc_out_byte(&i);
	if(rtc_get_ack() != 0) 
	{
		rtc_stop();
		return 0;
	}
	i = (rg<<4)|0x04;
	rtc_out_byte(&i);
	if(rtc_get_ack() != 0) 
	{
		rtc_stop();
		return 0;
	}
	
	rtc_in_byte(ptr);
	rtc_do_ack(1);
	rtc_stop();
	return 1;
}

void GET_clock(void)
{
	rtc_read(0,wr3_data1+2);//sec
	rtc_read(1,wr3_data1+1);//MINUTE
	rtc_read(2,wr3_data1);//hour
}

void GET_date(void)
{
	rtc_read(4,wr3_data+2);//day
	rtc_read(5,wr3_data+1);//month
	rtc_read(6,wr3_data);//year
}

void OUT_date(void)
{
	rtc_write(4,wr3_data+2);//day
	rtc_write(5,wr3_data+1);//month
	rtc_write(6,wr3_data);//year
}

void OUT_clock(void)
{
	rtc_write(0,wr3_data1+2);//sec
	rtc_write(1,wr3_data1+1);//MINUTE
	rtc_write(2,wr3_data1);//hour
}

unsigned char rtc_init(void)
{
	unsigned char i,rg,j,flag1=0;
	rtc_read(0x0f,&i);//判断RESET位,是否复位了,如果复位了则初始化
	j = i & 0x10;
	if(j)
	{
	 rewrite:
	   rtc_start();
	   i = 0x64;
	   rtc_out_byte(&i);
	   if(rtc_get_ack() != 0) 
	   {
	   	return 0;
	   }
	   rg = 0x0E;      //0xEH
	   i =  rg<<4;
	   rtc_out_byte(&i);
	   if(rtc_get_ack() != 0) 
	   {
	   	return 0;
	   }
	   i = 0x20;       //DATA write to 0xEH
	   rtc_out_byte(&i);
	   if(rtc_get_ack() != 0) 
	   {
	   	return 0;
	   }
	   i = 0x20;       //DATA write to 0xFH
	   rtc_out_byte(&i);
	   if(rtc_get_ack() != 0) 
	   {
	   	return 0;
	   }
	   rtc_stop();
	   rtc_read(0x0E,&i);
	   if((i != 0x20)&&(flag1 < 4))
	   {
	   	    flag1++;
	        goto rewrite;
	   }
	   OUT_date();
     OUT_clock();
  }
  else
  {
  	rtc_read(0x0E,&i);
  	if(i != 0x20)
	      goto rewrite;
    if(sysinit_flag == 1)
    {
    	 OUT_date();
       OUT_clock();
    }
  }
  return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -