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

📄 ds1302.h

📁 一个完整的万年表程序,用Keil uVision可以成功编译
💻 H
字号:
/****************************************Copyright (c)**************************************************
**                               中国矿业大学理学院
**                                  物理系04级                                   
**										
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: lcd1602.h
**创   建   人: 卢家顺
**最后修改日期: 2007年8月24日
**描        述: lcd1602驱动程序,用KEILC编译
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 卢家顺
** 版  本: 1.0
** 日 期: 2007年8月24日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
          
#ifndef	_DS1302_ljs
#define	_DS1302_ljs

#ifndef	uchar 
#define uchar	unsigned char
#endif

#ifndef	uint
#define	uint	unsigned int
#endif
 
#include <reg52.h>
/* *********************************************************************************************************
*	  DS1302_CLK		实时时钟时钟线引脚
*	  DS1302_IO			实时时钟数据线引脚
*     DS1302_RST        实时时钟复位线引脚       
**********************************************************************************************************/
sbit  DS1302_CLK = P1^6;               
sbit  DS1302_IO  = P1^7;               
sbit  DS1302_RST = P1^5;              
sbit  DS1302_ACC0 = ACC^0;
sbit  DS1302_ACC7 = ACC^7;

/* *********************************************************************************************************
*                    定义时间结构
**********************************************************************************************************/
typedef struct __TIME__ds1302
{
	uchar Second;
	uchar Minute;
	uchar Hour;
	uchar Week;
	uchar Day;
	uchar Month;
	uchar  Year;
	uchar DateString[9];
	uchar TimeString[9];
}TIME_ds1302;

#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 DS1302InputByte(uchar d) 	//实时时钟写入一字节(内部函数)
{ 
    unsigned char i;
    ACC = d;
    for(i=8; i>0; i--)
    {
        DS1302_IO = DS1302_ACC0;           	//相当于汇编中的 RRC
        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;         			
        DS1302_ACC7 = DS1302_IO;
        DS1302_CLK = 1;
        DS1302_CLK = 0;
    } 
    return(ACC); 
}

void Write1302(uchar ucAddr, uchar ucDa)	//ucAddr: DS1302地址, ucData: 要写的数据
{
    DS1302_RST = 0;
    DS1302_CLK = 0;
    DS1302_RST = 1;
    DS1302InputByte(ucAddr);       	
    DS1302InputByte(ucDa);       	
    DS1302_CLK = 1;
    DS1302_RST = 0;
}

unsigned char Read1302(uchar ucAddr)	//读取DS1302某地址的数据
{
    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_SetTime(TIME_ds1302 *Time)
{
	Write1302(DS1302_SECOND,(((Time->Second)/10)<<4)+ (Time->Second)%10);
	Write1302(DS1302_MINUTE,(((Time->Minute)/10)<<4)+(Time->Minute)%10);
	Write1302(DS1302_HOUR,(((Time->Hour)/10)<<4)+ (Time->Hour)%10);
	Write1302(DS1302_WEEK,(((Time->Week)/10)<<4)+ (Time->Week)%10);
	Write1302(DS1302_DAY,(((Time->Day)/10)<<4)+ (Time->Day)%10);
	Write1302(DS1302_MONTH,(((Time->Month)/10)<<4)+ (Time->Month)%10);
	Write1302(DS1302_YEAR,(((Time->Year)/10)<<4)+ (Time->Year)%10);	
}
 
void DS1302_GetTime(TIME_ds1302 *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&0xf0)>>4)*10 + (ReadValue&0x0F);	
}


void DateToStr(TIME_ds1302 *Time)
{
	Time->DateString[0] = Time->Year/10 + '0';
	Time->DateString[1] = Time->Year%10 + '0';
	Time->DateString[2] = '-';
	Time->DateString[3] = Time->Month/10 + '0';
	Time->DateString[4] = Time->Month%10 + '0';
	Time->DateString[5] = '-';
	Time->DateString[6] = Time->Day/10 + '0';
	Time->DateString[7] = Time->Day%10 + '0';
	Time->DateString[8] = '\0';
	Time->TimeString[0] = Time->Hour/10 + '0';
	Time->TimeString[1] = Time->Hour%10 + '0';
	Time->TimeString[2] = ':';
	Time->TimeString[3] = Time->Minute/10 + '0';
	Time->TimeString[4] = Time->Minute%10 + '0';
	Time->TimeString[5] = ':';
	Time->TimeString[6] = Time->Second/10 + '0';
	Time->TimeString[7] = Time->Second%10 + '0';
	Time->DateString[8] = '\0';
}

#endif
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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