📄 ds12c887.c
字号:
#include<reg52.h>
#include<absacc.h>
#include<ds12c887.h>
//12887初始化子程序
void DS12887_init()
{
DS12887_CS=0xc0;
ds12887_rega=0x7f; //分频复位
ds12887_regb=0x8a; //禁止更新
ds12887_rega=0x2e; //写寄存器A,
ds12887_regb=0x06; //写寄存器B,
DS12887_CS=0;
}
//读即时时间到数组里
void DS12887_readtime(unsigned char *q)
{
DS12887_CS=0xc0;
while(ds12887_rega&0x80!=0) {;} //查询是否更新结束,结束后才能读取数据,未结束则等待
//读出时间日历数据
q[0]=ds12887_secondt;
q[1]=ds12887_minutet;
q[2]=ds12887_hourt;
q[3]=ds12887_week;
q[4]=ds12887_date;
q[5]=ds12887_month;
q[6]=ds12887_year;
q[7]=ds12887_rega;
q[8]=ds12887_regb;
q[9]=ds12887_regc;
q[10]=ds12887_regd;
DS12887_CS=0;
}
//读时钟ram子程序,把读得的值存放在数组里
void DS12887_readram(unsigned char *q)
{
DS12887_CS=0xc0;
while(ds12887_rega&0x80!=0) {;} //查询是否更新结束,结束后才能读取数据,未结束则等待
//读出10字节数据
q[0]=ds12887_m1;
q[1]=ds12887_m2;
q[2]=ds12887_m3;
q[3]=ds12887_m4;
q[4]=ds12887_m5;
q[5]=ds12887_m6;
q[6]=ds12887_m7;
q[7]=ds12887_m8;
q[8]=ds12887_m9;
q[9]=ds12887_ma;
DS12887_CS=0;
}
//写数组里预定时间到寄存器
void DS12887_writetime(unsigned char *p)
{
DS12887_CS=0xc0;
while(ds12887_rega&0x80!=0) {;} //查询是否更新结束,结束后才能读取数据,未结束则等待
//读出时间日历数据
ds12887_secondt=p[0];
ds12887_minutet=p[1];
ds12887_hourt=p[2];
ds12887_week=p[3];
ds12887_date=p[4];
ds12887_month=p[5];
ds12887_year=p[6];
DS12887_CS=0;
}
//写10字节到12887的ram里
void DS12887_writeram(unsigned char *p)
{
DS12887_CS=0xc0;
while(ds12887_rega&0x80!=0) {;} //查询是否更新结束,结束后才能读取数据,未结束则等待
//写入10字节的数据
ds12887_m1=p[0];
ds12887_m2=p[1];
ds12887_m3=p[2];
ds12887_m4=p[3];
ds12887_m5=p[4];
ds12887_m6=p[5];
ds12887_m7=p[6];
ds12887_m8=p[7];
ds12887_m9=p[8];
ds12887_ma=p[9];
///////////////////////////////////////////////////////////
DS12887_CS=0;
}
//允许输出方波
void DS12887_startam(unsigned char am_way) //am_way为方波频率
{
unsigned char temp;
DS12887_CS=0xc0;
temp = ds12887_rega;
temp &= 0xf0;
temp |= am_way; //输出方波频率设置
ds12887_rega = temp;
temp = ds12887_regb;
temp |= 0x08;
ds12887_regb=temp;
// temp |= 0x08;
DS12887_CS=0;
}
//停止输出方波
void DS12887_stopam()
{
unsigned char temp;
DS12887_CS=0xc0;
ds12887_rega &= 0xf0; //打开闹铃后,关闭时要把寄存器A的低四位清零,否则就可能会出错。
temp = ds12887_regb;
temp &= 0xf7;
ds12887_regb = temp;
DS12887_CS=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -