📄 ds1302.h
字号:
/*********************************************************************
目 的: 建立DS1302的操作库
目标系统: 基于AVR单片机
应用软件: ICCAVR 6.31a
版 本: Version 1.0
圆版时间: 2007年4月12日
开发人员: shinea8868
说 明: 若用于商业用途,请保留此段文字或注明代码来源
扬州精雅科技有限公司拥有版权
*********************************************************************/
/*-------------------------------------------------------------------
函数名称: void DS1302SetTime(uchar hour,uchar minutes,uchar second)
函数功能: DS1302时间设定
参 数: uchar hour,uchar minutes,uchar second
返 回 值: 无
---------------------------------------------------------------------
函数名称: void DS1302Init(void)
函数功能: 初始化时钟端口信息
参 数:
返 回 值: 无
---------------------------------------------------------------------
函数名称: void DS1302GetTime(uchar *time)
函数功能: 读DS1302时间
参 数: uchar hour,uchar minutes,uchar second
返 回 值: 无
-------------------------------------------------------------------*/
#ifndef DS1302_H
#define DS1302_H
#define DS1302RstOut DDRD |= (1<<7)
#define DS1302IOIn DDRD &=~(1<<6)
#define DS1302IOOut DDRD |= (1<<6)
#define DS1302SckOut DDRD |= (1<<5)
#define DS1302DataIn (PIND & (1<<6))
#define DS1302DataSet PORTD |= (1<<6)
#define DS1302DataClr PORTD &=~(1<<6)
#define DS1302SckSet PORTD |= (1<<5)
#define DS1302SckClr PORTD &=~(1<<5)
#define DS1302RstSet PORTD |= (1<<7)
#define DS1302RstClr PORTD &=~(1<<7)
//#define DS1302WrAdd 0x80
//#define DS1302RdAdd 0x81
uchar AA;
/********************************************************************
函 数 名:DS1302WrByte()
功 能:实时时钟写入一字节
说 明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无
***********************************************************************/
void DS1302WrByte(uchar x)
{
uchar i;
DS1302IOOut;
for (i = 0; i < 8; i ++)
{
if (x&(1<<i))
{
DS1302DataSet;
}
else
{
DS1302DataClr;
}
DS1302SckSet; /* CLK to H */
DS1302SckClr; /* CLK to L */
}
}
/********************************************************************
函 数 名:uchar DS1302RdByte(void)
功 能:实时时钟读取一字节
说 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无
返 回 值:ACC
***********************************************************************/
uchar DS1302RdByte(void)
{
uchar i,k;
DS1302IOIn;
for (i = 0; i < 8; i ++)
{
k = DS1302DataIn; /*读数据,从低位开始 */
if (k)
{
AA|=(1<<i);
}
else
{
AA&=~(1<<i);
}
DS1302SckSet; /* CLK to H */
DS1302SckClr; /* CLK to L */
}
DS1302SckSet; /* CLK to H */
DS1302SckClr; /* CLK to L */
DS1302IOOut;
return AA;
}
/********************************************************************
函 数 名:void DS1302Write(uchar ucAddr, uchar ucDa)
功 能:往DS1302写入数据
说 明:先写地址,后写命令/数据 (内部函数)
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
***********************************************************************/
void DS1302Write(uchar ucAddr, uchar ucDa)
{
DS1302RstClr; /* RST to L */
DS1302SckClr; /* CLK to L */
DS1302RstSet; /* RST to H */
DS1302WrByte(ucAddr); /* 地址,命令 */
DS1302WrByte(ucDa); /* 写1Byte数据*/
DS1302SckSet; /* CLK to H */
DS1302RstClr; /* RST to L */
}
/********************************************************************
函 数 名:uchar DS1302Read(uchar ucAddr)
功 能:读取DS1302某地址的数据
说 明:先写地址,后读命令/数据 (内部函数)
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
***********************************************************************/
uchar DS1302Read(uchar ucAddr)
{
uchar ucData;
DS1302RstClr; /* RST to L */
DS1302SckClr; /* CLK to L */
DS1302RstSet; /* RST to H */
DS1302WrByte(ucAddr); /* 地址,命令 */
ucData = DS1302RdByte(); /* 读1Byte数据 */
DS1302SckSet; /* CLK to H */
// PORTD |= (1<<7);
DS1302RstClr; /* RST to L */
return ucData;
}
/*-----------------------------------------------------------------
函数名称: void DS1302SetTime(uchar hour,uchar minutes,uchar second)
函数功能: DS1302时间设定
参 数: uchar hour,uchar minutes,uchar second
返 回 值: 无
-----------------------------------------------------------------*/
void DS1302SetTime(uchar hour,uchar minutes,uchar second)
{
DS1302Write(0x80,second);
DS1302Write(0x82,minutes);
DS1302Write(0x84,hour);
}
/*-----------------------------------------------------------------
函数名称: void DS1302GetTime(uchar *time)
函数功能: 读DS1302时间
参 数: uchar hour,uchar minutes,uchar second
返 回 值: 无
-----------------------------------------------------------------*/
void DS1302GetTime(uchar *time)
{
*time++ = DS1302Read(0x85);
*time++ = DS1302Read(0x83);
*time++ = DS1302Read(0x81);
}
/*-----------------------------------------------------------------
函数名称: void DS1302Init(void)
函数功能: 初始化时钟端口信息
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
void DS1302Init(void)
{
DS1302RstOut; //DS1302复位信号设置为输出
DS1302IOOut; //DS1302数据信号设置为输出
DS1302SckOut; //DS1302时钟信号设定为输出
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -