DS1302时钟芯片51单片机c语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#ifndef __DS1302_H__
#define __DS1302_H__
#define uchar unsigned char
#define uint unsigned int
#include
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);