📄 ds1302.h
字号:
#ifndef _REAL_TIMER_DS1302_2003_7_21_
#define _REAL_TIMER_DS1302_2003_7_21_
sbit DS1302_CLK = P1^6;
sbit DS1302_IO = P1^7;
sbit DS1302_RST = P1^5;
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
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;
#define AM(X) X
#define PM(X) (X+12)
#define DS1302_SECOND 0x80
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
#define DS1302_RAM(X) (0xC0+(X)*2)
void DS1302InputByte(unsigned char d)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0;
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}
unsigned char DS1302OutputByte(void)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}
void Write1302(unsigned char ucAddr, unsigned char ucDa)
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr);
DS1302InputByte(ucDa);
DS1302_CLK = 1;
DS1302_RST = 0;
}
unsigned char Read1302(unsigned char ucAddr)
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01);
ucData = DS1302OutputByte();
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}
void DS1302_SetProtect(bit flag)
{
if(flag)
Write1302(0x8E,0x10);
else
Write1302(0x8E,0x00);
}
void DS1302_SetTime(unsigned char Address, unsigned char Value)
{
DS1302_SetProtect(0);
Write1302(Address, ((Value/10)<<4 | (Value%10)));
}
void gettime(void)
{
unsigned char ReadValue;
ReadValue =Read1302(0x8c) ;
dat[0]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))/10;
dat[1]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))%10;
ReadValue =Read1302(0x88) ;
dat[3]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))/10;
dat[4]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))%10;
ReadValue =Read1302(0x86) ;
dat[6]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))/10;
dat[7]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))%10;
ReadValue =Read1302(0x84) ;
dat[9]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))/10;
dat[10]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))%10;
ReadValue =Read1302(0x82) ;
dat[12]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))/10;
dat[13]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))%10;
ReadValue =Read1302(0x80) ;
dat[15]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))/10;
dat[16]=(((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F))%10;
}
void Initial_DS1302(void)
{
unsigned char Second=Read1302(DS1302_SECOND);
if(Second&0x80) DS1302_SetTime(DS1302_SECOND,0);
}
void int_time(void)
{
DS1302_SetTime(0x80,8);
DS1302_SetTime(0x82,8);
DS1302_SetTime(0x84,8);
DS1302_SetTime(0x86,8);
DS1302_SetTime(0x88,8);
DS1302_SetTime(0x8C,8);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -