资源描述
#ifndef __DS1302_H__
#define __DS1302_H__
#define uchar unsigned char
#define uint unsigned int
#include <reg52.h>
sbit SCLK = P3^2;
sbit IO = P2^4;
sbit RST = P3^3;
#define R_Second 0x81
#define W_Second 0x80
#define R_Minute 0x83
#define W_Minute 0x82
#define R_Hour 0x85
#define W_Hour 0x84
#define R_Day 0x87
#define W_Day 0x86
#define R_Month 0x89
#define W_Month 0x88
#define R_Week 0x8B
#define W_Week 0x8A
#define R_Year 0x8D
#define W_Year 0x8C
#define R_Control 0x8F
#define W_Control 0x8E
void DS1302_Write_Byte(uchar Date);
uchar DS1302_Read_Byte();
void Write_DS1302(uchar Adr,uchar Date);
uchar Read_DS1302(uchar Adr);
void Init_DS1302();
#endif
#include "ds1302.h"
/**************************************************************
函數名稱 : DS1302_Write_Byte(uchar Date)
函數功能 : 单字节写
輸入參數 : 写的字节
輸出參數 : 无
備 注 :
**************************************************************/
void DS1302_Write_Byte(uchar Date)
{
uchar i;
for(i = 0;i < 8;i++)
{
if(Date & 0x01)
IO = 1;
else
IO = 0;
SCLK = 1;
Date = Date >> 1;
SCLK = 0;
}
}
/**************************************************************
函數名稱 : uchar DS1302_Read_Byte()
函數功能 : 单字节读
輸入參數 : 无
輸出參數 : 读出的数据
備 注 :
**************************************************************/
uchar DS1302_Read_Byte()
{
uchar i,Temp = 0;
for(i = 0;i < 8;i++)
{
Temp = Temp >> 1;
SCLK = 0;
if(IO == 1)
Temp = Temp | 0x80;
SCLK = 1;
}
return Temp;
}
/**************************************************************
函數名稱 : Write_DS1302(uchar Adr,uchar Date)
函數功能 : 写数据
輸入參數 : 写的寄存器地址和数据
輸出參數 : 无
備 注 :
**************************************************************/
void Write_DS1302(uchar Adr,uchar Date)
{
RST = 0;
SCLK = 0;
RST = 1;
DS1302_Write_Byte(Adr);
DS1302_Write_Byte(Date);
RST = 0;
}
/**************************************************************
函數名稱 : uchar Read_DS1302(uchar Adr)
函數功能 : 读数据
輸入參數 : 写的寄存器地址
輸出參數 : 读出的数据
備 注 :
**************************************************************/
uchar Read_DS1302(uchar Adr)
{
uchar Temp = 0;
RST = 0;
SCLK = 0;
RST = 1;
DS1302_Write_Byte(Adr);
Temp = DS1302_Read_Byte();
RST = 0;
Temp = Temp / 16 * 10 + Temp % 16;
return Temp;
}
/**************************************************************
函數名稱 : Init_DS1302()
函數功能 : 初始化DS1302
輸入參數 : 无
輸出參數 : 无
備 注 :
**************************************************************/
void Init_DS1302()
{
Write_DS1302(W_Control,0x00);
Write_DS1302(W_Year,0x11);
Write_DS1302(W_Week,0x06);
Write_DS1302(W_Month,0x09);
Write_DS1302(W_Day,0x10);
Write_DS1302(W_Hour,0x16);
Write_DS1302(W_Minute,0x11);
Write_DS1302(W_Second,0x23);
Write_DS1302(W_Control,0x80);
}
展开阅读全文