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

📄 ds1302.h

📁 万年历哇附件的话减肥霎时间了款到付货就阿里斯顿符合 飞洒
💻 H
字号:
#ifndef _REAL_TIMER_DS1302_
#define _REAL_TIMER_DS1302_

/*Mini51板实时时钟接口*/
sbit  DS1302_RT = P1^3;
sbit  DS1302_CK = P1^4; 
sbit  DS1302_IO = P1^5;

sbit  ACC0 = ACC^0;
sbit  ACC7 = ACC^7;

#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

void DS1302_Input_Byte(unsigned char d) 	//实时时钟写入一字节(内部函数)
{ 
    unsigned char i;
    ACC = d;
    for(i=8; i>0; i--)
    {
        DS1302_IO = ACC0;           	//相当于汇编中的 RRC
        DS1302_CK = 1;
        DS1302_CK = 0;
        ACC = ACC >> 1; 
    } 
	//DS1302_IO = 0;//实物板需要该语句
}

unsigned char DS1302_Output_Byte(void) 	//实时时钟读取一字节(内部函数)
{ 
    unsigned char i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         			//相当于汇编中的 RRC 
        ACC7 = DS1302_IO;
        DS1302_CK = 1;
        DS1302_CK = 0;
    } 
	//DS1302_IO = 0;//实物板需要该语句
    return(ACC); 
}

void Write1302(unsigned char addr, unsigned char da)	//ucAddr: DS1302地址, ucData: 要写的数据
{
    DS1302_RT = 0;
    DS1302_CK = 0;
    DS1302_RT = 1;
    DS1302_Input_Byte(addr);       	// 地址,命令 
    DS1302_Input_Byte(((da/10)<<4)|(da%10));// 写1Byte数据
    DS1302_CK = 1;
    DS1302_RT = 0;
} 

unsigned char Read1302(unsigned char addr)	//读取DS1302某地址的数据
{
    unsigned char dat;
    DS1302_RT = 0;
    DS1302_CK = 0;
    DS1302_RT = 1;
    DS1302_Input_Byte(addr|0x01);        // 地址,命令 
    dat = DS1302_Output_Byte();         // 读1Byte数据
    DS1302_CK = 1;
    DS1302_RT = 0;
    return(dat);
}

void DS1302_Set_Protect(bit flag)        //是否写保护
{
	if(flag) Write1302(0x8E,0x10);
	else Write1302(0x8E,0x00);
}

void DS1302_Set_Time(RTC_TIME *Time) // 设置时间函数
{
	 unsigned char ReadValue;
	 DS1302_Set_Protect(0);	 
	 Write1302(DS1302_MINUTE, Time->Minute);   
     Write1302(DS1302_HOUR, Time->Hour);   
     Write1302(DS1302_DAY, Time->Day);
     Write1302(DS1302_MONTH,Time->Month);
     Write1302(DS1302_YEAR,Time->Year); 
     Write1302(DS1302_WEEK,Time->Week); 
	 DS1302_Set_Protect(1);

	 ReadValue = Read1302(DS1302_SECOND);//保持秒钟自然走钟	
	 Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
}

void ds1302_init(void)
{
	unsigned char Second=Read1302(DS1302_SECOND);
	DS1302_Set_Protect(0);
	if(Second&0x80)		
		Write1302(DS1302_SECOND,0); 
	DS1302_Set_Protect(1);
}

void DS1302_Get_Time(RTC_TIME *Time)
{
	unsigned char ReadValue;
	ReadValue = Read1302(DS1302_SECOND);
	Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
	ReadValue = Read1302(DS1302_MINUTE);
	Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
	ReadValue = Read1302(DS1302_HOUR);
	Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);	
	ReadValue = Read1302(DS1302_DAY);
	Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);	
	ReadValue = Read1302(DS1302_WEEK);
	Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
	ReadValue = Read1302(DS1302_MONTH);
	Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
	ReadValue = Read1302(DS1302_YEAR);
	Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);	
} 

void Date_To_Str(RTC_TIME *Time)
{
	//str_buffx为全局变量
	str_buff0[0] = '2';
	str_buff0[1] = '0';
	str_buff0[2] = Time->Year/10 + '0';
	str_buff0[3] = Time->Year%10 + '0';
	str_buff0[4] = '/';
	str_buff0[5] = Time->Month/10 + '0';
	str_buff0[6] = Time->Month%10 + '0';
	str_buff0[7] = '/';
	str_buff0[8] = Time->Day/10 + '0';	
	str_buff0[9] = Time->Day%10 + '0';
	str_buff0[10] = ' ';
	str_buff0[11] = 'W';
	str_buff0[12] = 'e';
	str_buff0[13] = 'e';
	str_buff0[14] = 'k';
	str_buff0[15] = Time->Week + '0';
}

void Time_To_Str(RTC_TIME *Time)
{
	str_buff1[0] = Time->Hour/10 + '0';
	str_buff1[1] = Time->Hour%10 + '0';
	str_buff1[2] = ':';
	str_buff1[3] = Time->Minute/10 + '0';
	str_buff1[4] = Time->Minute%10 + '0';
	str_buff1[5] = ':';
	str_buff1[6] = Time->Second/10 + '0';
	str_buff1[7] = Time->Second%10 + '0';	
	str_buff1[8] = ' ';	
	str_buff1[9] = ' ';	
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -