📄 ds12887.c
字号:
/*
管脚配置:
MOT: 接地
CS: 接地 地址:0xbf00
AS: 接单片机 ALE
R/W: 接 RW
DS: 接 RD
RESET: 接高
IRQ: 空
SQW: 空
*/
#include <reg52.h>
#define DS12887 0xbf00 //定义时钟芯片的片选基址
#define DS12887_sec DS12887+0x00 // 秒
#define DS12887_min DS12887+0x02 // 分
#define DS12887_hour DS12887+0x04 // 时
#define DS12887_day DS12887+0x06 // 星期
#define DS12887_date DS12887+0x06 // 日期
#define DS12887_month DS12887+0x08 //月份
#define DS12887_year DS12887+0x09 //年
#define DS12887_Reg_A DS12887+0x0a //寄存器A
#define DS12887_Reg_B DS12887+0x0b //寄存器B
#define DS12887_Reg_C DS12887+0x0c //寄存器C
#define DS12887_Reg_D DS12887+0x0d //寄存器D
unsigned char xdata *REG_ADD;
unsigned char Date_Time[7]={8,12,28,7,19,46,21};//定义时间数组并设定初始值
void WriteDs12887()
{
REG_ADD=DS12887_Reg_B;
*REG_ADD=0x80;
REG_ADD=DS12887_year; *REG_ADD=Date_Time[0]; //年
REG_ADD=DS12887_month; *REG_ADD=Date_Time[1]; //月
REG_ADD=DS12887_date; *REG_ADD=Date_Time[2]; //日期
REG_ADD=DS12887_day; *REG_ADD=Date_Time[3]; //星期
REG_ADD=DS12887_hour; *REG_ADD=Date_Time[4]; //时
REG_ADD=DS12887_min; *REG_ADD=Date_Time[5]; //分
REG_ADD=DS12887_sec; *REG_ADD=Date_Time[6]; //秒
REG_ADD=DS12887_Reg_A; *REG_ADD=0x20;
REG_ADD=DS12887_Reg_B; *REG_ADD=0x06;
}
void ReadDs127887()
{ unsigned char temp;
REG_ADD=DS12887_Reg_B;
do
{
temp=*REG_ADD;
}while((temp&0x80)==0x80);
REG_ADD=DS12887_year; Date_Time[0]=*REG_ADD; //年
REG_ADD=DS12887_month; Date_Time[1]=*REG_ADD; //月
REG_ADD=DS12887_date; Date_Time[2]=*REG_ADD; //日期
REG_ADD=DS12887_day; Date_Time[3]=*REG_ADD; //星期
REG_ADD=DS12887_hour; Date_Time[4]=*REG_ADD; //时
REG_ADD=DS12887_min; Date_Time[5]=*REG_ADD; //分
REG_ADD=DS12887_sec; Date_Time[6]=*REG_ADD; //秒
}
void main()
{
WriteDs12887();
while(1)
{
ReadDs127887();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -