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

📄 ds12c887.c

📁 时钟芯片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 + -