📄 51
字号:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
//DS12C887寄存器地址定义
#define M12887 XBYTE [0x3f00] //秒
#define MA12887 XBYTE [0x3f01] //秒报警
#define F12887 XBYTE [0x3f02] //分
#define FA12887 XBYTE [0x3f03] //分报警
#define S12887 XBYTE [0x3f04] //时
#define SA12887 XBYTE [0x3f05] //时报警
#define X12887 XBYTE [0x3f06] //星期
#define R12887 XBYTE [0x3f07] //日
#define Y12887 XBYTE [0x3f08] //月
#define N12887 XBYTE [0x3f09] //年
#define A12887 XBYTE [0x3f0a] //寄存器A,A.7—只读判断忙闲
#define B12887 XBYTE [0x3f0b] //寄存器B,B.7—控制工作状态:0正常、1停止
// B.2—BCD码或二进制选择:0 二进制
// B.1—24/12小时模式选择:1 24小时进制
#define C12887 XBYTE [0x3f0c] //寄存器C 标志位在读寄存器C后清0
#define D12887 XBYTE [0x3f0d] //寄存器D 只读,读取该寄存器可使设置的时间和工作模式生效
//DS12C887相关变量定义
uchar year;
uchar month;
uchar day;
uchar hour;
uchar minute;
uchar second;
void CLK_BSY(void);
void RD_DATA(void);
void WR_DATA(void);
void main() //主程序
{
year = 9; //写入时间:2009年06月1日13时24分35秒(要设定的时间)
month = 6;
day = 1;
hour = 13;
minute = 24;
second = 35;
WR_DATA(); //写入
RD_DATA(); //读取的时间数据在变量year/month/day/hour/minute/second中
}
void CLK_BSY(void) //时钟判断忙闲
{
while(A12887&0x80); //忙则循环等待
}
void RD_DATA(void) //时钟读数据
{
CLK_BSY(); //忙则等待
year = N12887; //读年
CLK_BSY();
month = Y12887; //读月
CLK_BSY();
day = R12887; //读日
CLK_BSY();
hour = S12887; //读时
CLK_BSY();
minute = F12887; //读分
CLK_BSY();
second = M12887; //读秒
}
void WR_DATA(void) //时钟写数据
{
uchar i;
B12887 = 0x82; //芯片更新禁止 禁止中断 无方波输出 二进制编码 24进制
N12887 = year; //写年
Y12887 = month; //写月
R12887 = day; //写日
S12887 = hour; //写时
F12887 = minute; //写分
M12887 = second; //写秒
A12887 = 0x20; //振荡器开启并且保持时钟运行 无方波输出
i= C12887; //标志位在读寄存器C后清0
i= D12887; //使设置的时间和工作模式生效
B12887 = 0x02; //芯片更新正常进行
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -