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

📄 ds1302.h

📁 本程序能实现数字式可调定时显示复位功能的LCD液晶显示。软件用PROTUES仿真
💻 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 + -