📄 ds12887_1.h
字号:
/*--------------------------------------------------------------*/
//File: DS12887驱动程序
//Date: 08-10-20 ~ 10-23
//Time: 21:20 ~ 16:53
//Source: Web
/*--------------------------------------------------------------*/
#ifndef __DS12887_1_H__
#define __DS12887_1_H__
/*--------------------------------------------------------------*/
//接口定义
sbit DS_AS = P3^0; //地址选择
sbit DS_RW = P3^1; //读写选择
sbit DS_DS = P3^2; //数据选择
sbit DS_IRQ = P3^3; //中断,低电平有效,通过读出0x0c来清除信号
sfr DS_DAT = 0x90; //8位数据线P1口
/*--------------------------------------------------------------*/
//数据地址定义
#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 //年
/*--------------------------------------------------------------*/
//定义时间类型
typedef struct _SYSTEMTIME_
{
unsigned char Second;
unsigned char Minute;
unsigned char Hour;
unsigned char Week;
unsigned char Day;
unsigned char Month;
unsigned char Year;
unsigned char DateString[9];
unsigned char TimeString[9];
}SYSTEMTIME;
/*--------------------------------------------------------------*/
//函数声明
void DS12887_Init(void); //DS12887初始化
void DS12887_Write(unsigned char Address, unsigned char Value); //DS12887指定地址写入数据
unsigned char DS12887_Read(unsigned char Address); //DS12887指定地址中读出数据
void DS12887_SetTime(unsigned char Address, unsigned char Value); //设置时间函数
void DS12887_GetTime(SYSTEMTIME *Time); //读出时间
void DateToStr(SYSTEMTIME *Time); //日期转化成字符
void TimeToStr(SYSTEMTIME *Time); //时间转化成字符
/*--------------------------------------------------------------*/
//DS12887指定地址写入数据
void DS12887_Write(unsigned char Address, unsigned char Value)
{
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;
}
/*--------------------------------------------------------------*/
//DS12887指定地址中读出数据
unsigned char DS12887_Read(unsigned char Address)
{
unsigned char DS_RDAT;
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;
return (DS_RDAT);
}
/*--------------------------------------------------------------*/
//DS12887初始化
void DS12887_Init(void)
{
DS12887_Write(0x0a, 0x20); //启动DS12887
DS12887_Write(0x0b, 0x86); //禁止更新,接下来初始化数据,即写入时间,日期等
DS12887_Write(0x0b, 0x06); //正常更新,二进制格式,24进制小时
}
/*--------------------------------------------------------------*/
//设置时间函数
void DS12887_SetTime(unsigned char Address, unsigned char Value)
{
DS12887_Write(0x0b, 0x86); //禁止更新,接下来初始化数据,即写入时间,日期等
DS12887_Write(Address,Value);
DS12887_Write(0x0b, 0x06); //正常更新,二进制格式,24进制小时
}
/*--------------------------------------------------------------*/
//读出时间
void DS12887_GetTime(SYSTEMTIME *Time)
{
Time->Second = DS12887_Read(DS12887_Second);
Time->Minute = DS12887_Read(DS12887_Minute);
Time->Hour = DS12887_Read(DS12887_Hour );
Time->Day = DS12887_Read(DS12887_Day );
Time->Week = DS12887_Read(DS12887_Week );
Time->Month = DS12887_Read(DS12887_Month );
Time->Year = DS12887_Read(DS12887_Year );
}
/*--------------------------------------------------------------*/
//日期转化成字符
void DateToStr(SYSTEMTIME *Time)
{
Time->DateString[0] = Time->Year/10 + '0';
Time->DateString[1] = Time->Year%10 + '0';
Time->DateString[2] = '-';
Time->DateString[3] = Time->Month/10 + '0';
Time->DateString[4] = Time->Month%10 + '0';
Time->DateString[5] = '-';
Time->DateString[6] = Time->Day/10 + '0';
Time->DateString[7] = Time->Day%10 + '0';
Time->DateString[8] = '\0';
}
/*--------------------------------------------------------------*/
//时间转化成字符
void TimeToStr(SYSTEMTIME *Time)
{
Time->TimeString[0] = Time->Hour/10 + '0';
Time->TimeString[1] = Time->Hour%10 + '0';
Time->TimeString[2] = ':';
Time->TimeString[3] = Time->Minute/10 + '0';
Time->TimeString[4] = Time->Minute%10 + '0';
Time->TimeString[5] = ':';
Time->TimeString[6] = Time->Second/10 + '0';
Time->TimeString[7] = Time->Second%10 + '0';
Time->TimeString[8] = '\0';
}
/*--------------------------------------------------------------*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -