📄 ds12887.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 + -