📄 ds1302.h
字号:
////////////////////////////////////////////////////////////////////////////
//
//
//
//
//
////////////////////////////////////////////////////////////////////////////
#define DS1302_SEC_Reg 0x80
#define DS1302_MIN_Reg 0x82
#define DS1302_HR_Reg 0x84
#define DS1302_DATE_Reg 0x86
#define DS1302_MONTH_Reg 0x88
#define DS1302_DAY_Reg 0x8a
#define DS1302_YEAR_Reg 0x8c
#define DS1302_CONTROL_Reg 0x8e
#define DS1302_CHARGER_Reg 0x90
#define DS1302_CLKBURST_Reg 0xbe
//定义DS1302内部寄存器地址
//定义DS1302 接口
#define DS1302_RST P1_2 //具体使用时,根据自己的接口自行修改
#define DS1302_SDA P1_1 //
#define DS1302_SCLK P1_0 //
//---------------请注意 ----------------
//以下的程序是1302的调用程序,请你不要动,
void DS1302_ByteWrite(unsigned char reg,unsigned char Data)
{
unsigned char i;
DS1302_RST=0;
_nop_ ();_nop_ ();
DS1302_SCLK=0;
_nop_ ();_nop_ ();
DS1302_RST=1;
_nop_ ();_nop_ ();
for(i=8;i>0;i--)
{
if(reg&0x01) DS1302_SDA=1;
else DS1302_SDA=0;
_nop_ ();_nop_ ();
DS1302_SCLK=1;
_nop_ ();_nop_ ();
DS1302_SCLK=0;
_nop_ ();_nop_ ();
reg>>=1;
}
for(i=8;i>0;i--)
{
if(Data&0x01) DS1302_SDA=1;
else DS1302_SDA=0;
_nop_ ();_nop_ ();
DS1302_SCLK=1;
_nop_ ();_nop_ ();
DS1302_SCLK=0;
_nop_ ();_nop_ ();
Data>>=1;
}
DS1302_RST=0;
_nop_ ();_nop_ ();
}
//读寄存器,结果直接返回
unsigned char DS1302_ByteRead(unsigned char reg)
{
unsigned char Data=0,i;
reg+=1;//读标志
DS1302_RST=0;
_nop_ ();_nop_ ();
DS1302_SCLK=0;
_nop_ ();_nop_ ();
DS1302_RST=1;
_nop_ ();_nop_ ();
for(i=8;i>0;i--)
{
if(reg&0x01)DS1302_SDA=1;
else DS1302_SDA=0;
_nop_ ();_nop_ ();
DS1302_SCLK=1;
_nop_ ();_nop_ ();
DS1302_SCLK=0;
_nop_ ();_nop_ ();
reg>>=1;
}
for(i=8;i>0;i--)
{
Data>>=1;
if(DS1302_SDA==1)Data|=0x80;
DS1302_SCLK=1;
_nop_ ();_nop_ ();
DS1302_SCLK=0;
_nop_ ();_nop_ ();
}
DS1302_RST=0;
P2_0=~P2_0;
_nop_ ();_nop_ ();
return(Data);
}
/*unsigned char Check_DS1302(void)//检查DS1302
{
DS1302_Write(DS1302_CONTROL_Reg,0x80);
if(DS1302_Read(DS1302_CONTROL_Reg)==0x80) return 1;
return 0;
}*/
//如果要修改时间,只要调用DS1302_Init()这个子函数
void DS1302_Initial(void)
{
DS1302_ByteWrite(DS1302_CONTROL_Reg,0x00);//关闭写保护
DS1302_ByteWrite(DS1302_SEC_Reg,0x80);//暂停
DS1302_ByteWrite(DS1302_CHARGER_Reg,0xa9);//涓流充电
DS1302_ByteWrite(DS1302_YEAR_Reg,0x07); //年
DS1302_ByteWrite(DS1302_MONTH_Reg,0x06); //月
DS1302_ByteWrite(DS1302_DATE_Reg,0x18); //日
DS1302_ByteWrite(DS1302_DAY_Reg,0x01); //周
DS1302_ByteWrite(DS1302_HR_Reg,0x18); //时
DS1302_ByteWrite(DS1302_MIN_Reg,0x17); //分
DS1302_ByteWrite(DS1302_SEC_Reg,0x00); //秒
DS1302_ByteWrite(DS1302_CONTROL_Reg,0x80);//打开写保护
}
//显示时间时,只要调用DS1302_Init(void)这个函数
//年、月、日、星期、时、 分、秒都是BCD码,拆字时除以16取整和取余即可得//到高低位
/*void ReadTime(void)
{
year=DS1302_Read(DS1302_YEAR_Reg);//年
month=DS1302_Read(DS1302_MONTH_Reg);//月
date=DS1302_Read(DS1302_DATE_Reg);//日
day=DS1302_Read(DS1302_DAY_Reg);//周
hour=DS1302_Read(DS1302_HR_Reg);//时
minute=DS1302_Read(DS1302_MIN_Reg);//分
second=DS1302_Read(DS1302_SEC_Reg);//秒
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -