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

📄 ds1302.h

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