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

📄 pcf8563.c

📁 RTC8563时钟芯片的读写程序
💻 C
字号:

/////////////////////////////////////////////////
//    功能:初始化时钟pcf8563       
void instpcf8563()
{
  tp=(char *)temd;
  *tp=0x00;//普通模式TEST1=0, 芯片时钟运行STOP=0,电源复位功能失效TESTC=0
  *(tp+1)=0x00;//
  ISendStr(0xa2,0x00,tp,2,SUBADDR8);
  *tp=0x80;
  *(tp+1)=0x80;
  *(tp+2)=0x80;
  *(tp+3)=0x80;
  *(tp+4)=0x00;//CLOCKOUT 禁止
  *(tp+5)=0x00;//倒计数定时 禁止
  *(tp+6)=0x00;
  ISendStr(0xa2,0x09,tp,7,SUBADDR8);

}

/////////////////////////////////////////////////////////
//功能:读取时间数据                          
//   *P 为指向接收本函数输出数据的缓冲区         
//  格式:0---7: 秒 分 时 日 星期 月 年(低) 年(高)  
//  返回值:BIT =0出错  =1正确                  
// 数据格式为BCD码
////////////////////////////////////////////////////////  
bit ReadSysClk(unsigned char* p)
{
	if(IRcvStr(0xa2,0x02,p,7,SUBADDR8))
	//if(t_IRcvStr(0xa2,0x02,p,7))
	{
		if((*p&0x80)==0x00)
		{
			*(p+1)=*(p+1)&0x7f;//分
			*(p+2)=*(p+2)&0x3f;//时
			*(p+3)=*(p+3)&0x3f;//日
			*(p+4)=*(p+4)&0x07;//星期
			*(p+5)=*(p+5)&0x9f;//月
			if((*(p+5)&0x80)==0x80)//世纪
			{
				*(p+7)=0x19;//
			}
			else
			{
				*(p+7)=0x20;//
			}
			*(p+5)=*(p+5)&0x7f;//月
			if(*p>0x59)
			{
				return(0);
			}
			if(*(p+1)>0x59)
			{
				return(0);
	  		}
			if(*(p+2)>0x24)
			{
				return(0);
			}
			if(*(p+3)>0x31)
			{
				return(0);
			}
	  		if(*(p+4)>0x07)
			{
				return(0);
			}
			if(*(p+5)>0x12)
			{
				return(0);
			}
			if(*(p+6)>0x99)
			{
				return(0);
			}
			return(1);
		}
	}
	return(0);
}

/*************************************************/
/**功能:写(初始化)时间数据                   **/
/*   *P为指向输入数据的缓冲区                    */
/*  格式:0-7 秒 分 时 日 星期 月 年(低) 年(高)  */
//数据格式为BCD码
bit WriteSysClk(unsigned char * p)
{
	if((*(p+7)&0xf0)==0x20)
	{
		*(p+5)=*(p+5)&0x7f;//世纪数为20**
	}
	else
	{
		*(p+5)=*(p+5)+0x80;//世纪数为19**
	}
	//ISendStr(0xa2,0x02,p,7);
	return(ISendStr(0xa2,0x02,p,7,SUBADDR8));
	//t_ISendStr(0xa2,0x02,p,7);
}

// 功能:将BCD格式数据转换成BIN格式数据

//将n个BCD数转换成相对应的BIN数
void BCD_to_BIN(unsigned char *p,unsigned char n)
{
	unsigned char i,j,k;
	for(i=0;i<=n;i++)
	{
		j=(*(p+i))&0xf0;
		j=(j>>4);
		j=j*10;
		k=(*(p+i))&0x0f;
		j=j+k;
		(*(p+i))=j;
	}

}

//将nBIN个数转换成相对应的BCD数
//
void  BIN_to_BCD(unsigned char *p,unsigned char n)
{
	unsigned char i,j;
	for(i=0;i<=n;i++)
	{
		j=(*(p+i))/10;
		j=j<<4;
		(*(p+i))=j+(*(p+i))%10;
	}
}

⌨️ 快捷键说明

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