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

📄 ds12887.c

📁 这是一个模拟单片机与12887时钟芯片的通信控制程序 可以对其设定时间年月 可以向芯片内部ram写和读数据
💻 C
字号:
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>

#define DS12887BaseAdds 0x2000
#define TM_SEC_REG 0x00
#define TM_SECAL_REG 0x01
#define TM_MIN_REG 0x02
#define TM_MINAL_REG 0x03
#define TM_HOUR_REG 0x04
#define TM_HOURAL_REG 0x05
#define TM_WEEKDAY_REG 0x06
#define TM_DAY_REG 0x07
#define TM_MONTH_REG 0x08
#define TM_YEAR_REG 0x09
#define TM_A_REG 0x0a
#define TM_B_REG 0x0b
#define TM_C_REG 0x0c
#define TM_D_REG 0x0D

struct DS12887{
	unsigned char  	year;                 /* year                              */
  	unsigned char  	month;                 /* month                            */
  	unsigned char  	date;                 /* date                            */
	unsigned char  	hour;                 /* hour                              */
  	unsigned char  	min;                 /* minute                            */
  	unsigned char  	sec;                 /* second                            */

  	unsigned char	reg_a;	
  	unsigned char	reg_b;	
  	unsigned char	reg_c;	
  	unsigned char	reg_d;	
}chip12887;

extern char code ERROR [];

/******************************************************************************/
/*                           Set Current Time                                 */
/******************************************************************************/
void set_time(unsigned char * buffer)  
{
  unsigned char args;                    /* number of arguments               */

  args = sscanf (buffer, "%bx:%bx:%bx",  /* scan input line for               */
                 &chip12887.hour,             /* hour, minute and second           */
                 &chip12887.min,
                 &chip12887.sec);
	if (chip12887.hour > 0x23  ||  chip12887.min > 0x59  ||    /* check for valid inputs      */
      chip12887.sec > 0x59   ||  args < 2       ||  args == EOF)  
	{
    	printf (ERROR, "INVALID TIME FORMAT");
  	} 
  	else                                  /* if inputs valid then              */
	{
   		EA = 0;                             /* disable interrupts while          */
		XBYTE[DS12887BaseAdds+TM_HOUR_REG] = chip12887.hour;
		XBYTE[DS12887BaseAdds+TM_MIN_REG] = chip12887.min;
		XBYTE[DS12887BaseAdds+TM_SEC_REG] = chip12887.sec;
    	EA = 1;                             /* enable interrupts again           */
  	}
}

void set_date(unsigned char * buffer)  
{
  unsigned char args;                    /* number of arguments               */

  args = sscanf (buffer, "%bx:%bx:%bx",  /* scan input line for               */
                 &chip12887.year,             /* hour, minute and second           */
                 &chip12887.month,
                 &chip12887.date);
	if (chip12887.month > 0x12 || chip12887.date > 0x31 || args < 2 || args == EOF)  /* check for valid inputs      */
	{
    	printf (ERROR, "INVALID TIME FORMAT");
  	} 
  	else                                  /* if inputs valid then              */
	{
   		EA = 0;                             /* disable interrupts while          */
		XBYTE[DS12887BaseAdds+TM_YEAR_REG] = chip12887.year;
		XBYTE[DS12887BaseAdds+TM_MONTH_REG] = chip12887.month;
		XBYTE[DS12887BaseAdds+TM_DAY_REG] = chip12887.date;
    	EA = 1;                             /* enable interrupts again           */
  	}
}


void disp_time(void)
{
	EA = 0;                             /* disable interrupts while          */
	chip12887.hour = XBYTE[DS12887BaseAdds+TM_HOUR_REG];
	chip12887.min = XBYTE[DS12887BaseAdds+TM_MIN_REG];
	chip12887.sec = XBYTE[DS12887BaseAdds+TM_SEC_REG];
    EA = 1;                             /* enable interrupts again           */
	printf("Current time:%02bx:%02bx:%02bx\n",chip12887.hour,chip12887.min,chip12887.sec);
}

void disp_date(void)
{
	EA = 0;                             /* disable interrupts while          */
	chip12887.year = XBYTE[DS12887BaseAdds+TM_YEAR_REG];
	chip12887.month = XBYTE[DS12887BaseAdds+TM_MONTH_REG];
	chip12887.date = XBYTE[DS12887BaseAdds+TM_DAY_REG];
    EA = 1;                             /* enable interrupts again           */
	printf("Current date:%02bx:%02bx:%02bx\n",chip12887.year,chip12887.month,chip12887.date);
}

⌨️ 快捷键说明

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