钻石会员
  
主题
帖子
积分17840
阅读权限50
注册时间2010-4-21
最后登录1970-1-1
在线时间 小时
|
网上找的程序,用着还行!!感觉12887比较好用!!
主程序c中文件
......
#include "ds12b887.h"
SYSTEMTIME CurrentTime;//数据定义
.......
.......
void main(void)
{
........
DS12887_Init();//初始化
.......
while(1)
{
........
DS12887_GetTime(&CurrentTime); //读取数据
a=CurrentTime.Hour/10; //小时
b=CurrentTime.Hour%10; //小时
c=CurrentTime.Minute/10; //分钟
d=CurrentTime.Minute%10; //分钟
e=CurrentTime.Second/10; //秒
f=CurrentTime.Second%10; //秒
g=CurrentTime.Year/10; //年
h=CurrentTime.Year%10; //年
i=CurrentTime.Month/10; //月
j=CurrentTime.Month%10; //月
k=CurrentTime.Day/10; //日
l=CurrentTime.Day%10; //日
m=CurrentTime.Week; //星期
........
}
.........
}
时间设置:只列出分钟调整,其他雷同!!
.....
//分钟加
CurrentTime.Minute++;
if(CurrentTime.Minute>59) CurrentTime.Minute=0;
DS12887_SetTime(DS12887_Minute,(CurrentTime.Minute));
//分钟减
if(CurrentTime.Minute>0) CurrentTime.Minute--;
if(CurrentTime.Minute==0) CurrentTime.Minute=59;
DS12887_SetTime(DS12887_Minute,(CurrentTime.Minute));
.....
以下是ds12b887.h文件内容
#ifndef __DS12b887_H__
#define __DS12b887_H__
sbit DS_DS = P2^7;
sbit DS_RW = P2^6;
sbit DS_AS = P2^5;
sbit DS_CS = P2^4;
#define DS_DAT P0
typedef struct _SYSTEMTIME_
{
unsigned char Second;
unsigned char Minute;
unsigned char Hour;
unsigned char Week;
unsigned char Day;
unsigned char Month;
unsigned char Year;
}SYSTEMTIME;
#define DS12887_Second 0x00 //秒
#define DS12887_Minute 0x02 //分
#define DS12887_Hour 0x04 //时
#define DS12887_Week 0x06 //星期
#define DS12887_Day 0x07 //日
#define DS12887_Month 0x08 //月
#define DS12887_Year 0x09 //年
#define _REG_SEC 0x00
#define _REG_SEC_ALM 0x01
#define _REG_MIN 0x02
#define _REG_MIN_ALM 0x03
#define _REG_HOUR 0x04
#define _REG_HOUR_ALM 0x05
#define _REG_WKD 0x06
#define _REG_DATE 0x07
#define _REG_MONTH 0x08
#define _REG_YEAR 0x09
#define write_data DS12887_Write
void DS12887_Init(void);
void DS12887_Write(unsigned char Address, unsigned char Value)
{
DS_CS = 0;
DS_AS = 0;
DS_DS = 1;
DS_RW = 1;
DS_AS = 1;
DS_DAT= Address;
DS_AS = 0;
DS_RW = 0;
DS_DAT= Value;
DS_RW = 1;
DS_AS = 1;
DS_CS = 1;
}
unsigned char DS12887_Read(unsigned char Address)
{
unsigned char DS_RDAT;
DS_CS = 0;
DS_AS = 0;
DS_DS = 1;
DS_RW = 1;
DS_AS = 1;
DS_DAT= Address;
DS_AS = 0;
DS_DS = 0;
DS_DAT=0xff;
DS_RDAT = DS_DAT;
DS_DS = 1;
DS_AS = 1;
DS_CS = 1;
return (DS_RDAT);
}
unsigned char read_data(unsigned char Address)
{
unsigned char temp;
while(DS12887_Read(0x0a) & 0x80);
temp = DS12887_Read(Address);
return temp;
}
void DS12887_Init(void)
{
if(read_data(100)!=233)
{
write_data(0x0a,0x2f);
write_data(0x0b,0x86);
write_data(100,233);
write_data(_REG_SEC,33);
write_data(_REG_MIN,0);
write_data(_REG_HOUR,22);
write_data(_REG_WKD,3);
write_data(_REG_DATE,26);
write_data(_REG_MONTH,1);
write_data(_REG_YEAR,11);
write_data(0x0b,0x06);
}
else write_data(0x0b,0x06);
}
void DS12887_SetTime(unsigned char Address, unsigned char Value)
{
DS12887_Write(0x0b, 0x86);
DS12887_Write(Address,Value);
DS12887_Write(0x0b, 0x06);
}
void DS12887_GetTime(SYSTEMTIME *Time)
{
Time->Second = read_data(DS12887_Second);
Time->Minute = read_data(DS12887_Minute);
Time->Hour = read_data(DS12887_Hour);
Time->Day = read_data(DS12887_Day );
Time->Week = read_data(DS12887_Week );
Time->Month = read_data(DS12887_Month);
Time->Year = read_data(DS12887_Year);
}
#endif |
|