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

📄 pcf8583.c

📁 采用MPS430控制的项目
💻 C
字号:
#define   _PCF8583_
#include  "..\Inc\Includes.h"
 
/*********************************************************************************************************
* 函数名称:Time_rest
*
* 功能描述:判断某一单元是否为指定数据,否则电池经历过掉电状态,须初始化时间单元
*
* 说明:
* 
********************************************************************************************************/
void  Time_rest(void)
{
	Uint8 x;            // 判断0xf0单元是否位0x23,否则写入0x23,并给时钟芯片给初值
    x = Time_rd(0xF0);
    if(x!=0x23)
    {
    	Time_wr_data();
        Time_wr_data();
        Time_wr(0xF0,0x23);
	}
}   
/*********************************************************************************************************
* 函数名称:Time_yudushej
*
* 功能描述:读时间单元的数据
*
* 说明:时间单元“裕度设计”次数由实际需要确定N>=1
* 
********************************************************************************************************/
void  Time_yudushej(unsigned char k)		  
{
	unsigned char m=0,n=1;  
    Uint32   x=0;
    Time_rd_data();
  	do{
    m++;                                      //   判断结果是否有效,否则重新给值
  	if((Time8583.Seconds>59)||(Time8583.Minutes>59)||(Time8583.Hours>23)||((Time8583.Date==0)||(Time8583.Date>31))||((Time8583.Months==0)||(Time8583.Months>12))) 	
  	{     
    	for(x=0;x<5000;x++);   // 等待在读 
    	Time_rd_data();
   	}
   	else
  		n=0;
    }while((m<k)&&(n==1));                                            
	if(n==1)
		Time_wr_data();
}
/*********************************************************************************************************
* 函数名称:Time_rd_data
*
* 功能描述:读时间单元数据
*
* 说明:
* 
********************************************************************************************************/
void  Time_rd_data(void)
{  						 // 1. 读出时间单元  2.没有在范围内重新给定初值
	IIWR(PCF8583,0x00,0x40); // 保持当前时间单元  
    Time8583.Seconds = Time_rd(0x02); 
    Time8583.Minutes = Time_rd(0x03);
    Time8583.Hours   = Time_rd(0x04);
    Time8583.Date    = Time_rd(0x05);
    Time8583.Months  = Time_rd(0x06);  
    Time8583.Year    = Time_rd(0x07);
                              
    IIWR(PCF8583,0x00,0x00); // 计数状态
    
    Time8583.Seconds = (((Time8583.Seconds&0xf0)>>4)*10)+(Time8583.Seconds&0x0f);
    Time8583.Minutes = (((Time8583.Minutes&0xf0)>>4)*10)+(Time8583.Minutes&0x0f);
    Time8583.Hours   = (((Time8583.Hours&0x30)>>4)*10)+(Time8583.Hours&0x0f);
    Time8583.Date    = (((Time8583.Date&0x30)>>4)*10)+(Time8583.Date&0x0f);
    Time8583.Months  = (((Time8583.Months&0x10)>>4)*10)+(Time8583.Months&0x0f);
    Time8583.Year  = (((Time8583.Year&0x10)>>4)*10)+(Time8583.Year&0x0f);
    
    Time_now[0]=Time8583.Year;
    Time_now[1]=Time8583.Months;
    Time_now[2]=Time8583.Date;
    Time_now[3]=Time8583.Hours;
    Time_now[4]=Time8583.Minutes;
    Time_now[5]=Time8583.Seconds;
}	
/*********************************************************************************************************
* 函数名称:Time_wr_data
*
* 功能描述:初始化时间单元
*
* 说明:
* 
********************************************************************************************************/
void  Time_wr_data(void)
{                 
      IIWR(PCF8583,0x00,0x80); // 停止计数                       
      
      IIWR(PCF8583,0x07,0x06); // 年 --- 06 年
      IIWR(PCF8583,0x06,0x01); // 月 --- 01 月 
      IIWR(PCF8583,0x05,0x01); // 日 --- 01 日
      IIWR(PCF8583,0x04,0x00); // 时 --- 12 点
      IIWR(PCF8583,0x03,0x00); // 分 --- 00 分
      IIWR(PCF8583,0x02,0x00); // 秒 --- 00 秒
      
      IIWR(PCF8583,0x00,0x00); // 启动计数
      
      Time8583.Seconds =0;
      Time8583.Minutes =0;
      Time8583.Hours   =0;
      Time8583.Date    =1;
      Time8583.Months  =1; 
	  Time8583.Year    =6;                 // 10 月 01 日 08 : 15    
	  Time_now[0] = 6;
	  Time_now[1] = 1;
	  Time_now[2] = 1;
	  Time_now[3] = 0;
	  Time_now[4] = 0;
	  Time_now[5] = 0;
}
/*********************************************************************************************************
* 函数名称:NowTime_wr_data
*
* 功能描述:修改当前时间
*
* 说明:
* 
********************************************************************************************************/
void NowTime_wr_data(uchar *p)
{
uchar time;
	  IIWR(PCF8583,0x00,0x80); // 停止计数   
	                      
      time = (p[0]/10)*16 + p[0]%10;
      IIWR(PCF8583,0x07,time); // 年
      
      time = (p[1]/10)*16 + p[1]%10;
      IIWR(PCF8583,0x06,time); // 月 
      
      time = (p[2]/10)*16 + p[2]%10;
      IIWR(PCF8583,0x05,time); // 日 
      
      time = (p[3]/10)*16 + p[3]%10;
      IIWR(PCF8583,0x04,time); // 时 
      
      time = (p[4]/10)*16 + p[4]%10;
      IIWR(PCF8583,0x03,time); // 分 
      
      time = (p[5]/10)*16 + p[5]%10;
      IIWR(PCF8583,0x02,time); // 秒 --- 00 秒
      
      Time_wr(0xF0,0x23);
      
      IIWR(PCF8583,0x00,0x00); // 启动计数
}
/*********************************************************************************************************
* 函数名称:Time_wr
*
* 功能描述:向某一指定地址写一个数据
*
* 说明:x:单元   y:数据
* 
********************************************************************************************************/
void  Time_wr(Uint8 x,Uint8 y)
{  					 
    IIWR(PCF8583,x,y);  
}
/**********************************************************************************************
功能: 向某一指定单元读一个数据
      读 地址x 单元,返回数据
**********************************************************************************************/
Uint8 Time_rd(Uint8 x)
{                       
	Uint8  y;
    y=IIRD(PCF8583,x);
    return(y);
}
/********************************************** END ***********************************************/

⌨️ 快捷键说明

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