📄 ds1302.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 + -