📄 ds1302.c
字号:
#include "DS1302.h"
/************************************
名称:DS1302In8Bit
功能:向DS1302输入一字节数据
入口:需要输入的字节DAT
出口:无
说明:
************************************/
void DS1302In8Bit(unsigned char dat)
{
unsigned char cnt;
//端口初始化
DS1302DAT=0;
DS1302DAT_T=0;
//传送数据
for(cnt=8;cnt>0;cnt--)
{
if(dat&0x01)
{DS1302DAT=1;}
else
{DS1302DAT=0;}
DS1302CLK=0;
DS1302CLK=1;
dat>>=1;
}
//端口复位
DS1302DAT=0;
}
/************************************
名称:DS1302Out8Bit
功能:DS1302输出一字节数据
入口:无
出口:DS1302返回值
说明:
************************************/
unsigned char DS1302Out8Bit(void)
{
unsigned char cnt,temp;
//端口初始化
DS1302DAT=0;
DS1302DAT_T=1;
//传送数据
temp=0;
for(cnt=8;cnt>0;cnt--)
{
DS1302CLK=1;
temp>>=1;
DS1302CLK=0;
if(DS1302DAT>0)
{temp|=0x80;}
else
{temp&=0x7f;}
}
//端口复位
DS1302DAT=0;
DS1302DAT_T=0;
return(temp);
}
/************************************
名称:DS1302WritByte
功能:向DS1302中指定地址写入一字节数据
入口:地址add,数据dat
出口:无
说明:
************************************/
void DS1302WritByte(unsigned char add,unsigned char dat)
{
DS1302RTS=1; //使能传输
DS1302In8Bit(add);
DS1302In8Bit(dat);
DS1302CLK=0;
DS1302RTS=0; //关闭传输
}
/************************************
名称:DS1302ReadByte
功能:从DS1302中指定地址读一字节数据
入口:地址add
出口:读出的数据
说明:
************************************/
unsigned char DS1302ReadByte(unsigned char add)
{
unsigned char temp;
DS1302RTS=1; //使能传输
DS1302In8Bit(add);
temp=DS1302Out8Bit();
DS1302CLK=0;
DS1302RTS=0; //关闭传输
return(temp);
}
/************************************
名称:TimeSet
功能:设定DS1302中时间寄存器
入口:时间数据指针
出口:无
说明:指针对应时间数据的顺序为:
秒、分、时、日、月、星期、年,
全部采用BCD编码
************************************/
void TimeSet(unsigned char *timept)
{
unsigned char cnt,addr;
unsigned char *ptbak;
ptbak=timept;
timept++;
DS1302WritByte(PROT_ADD_W,PROTECT_DE); //关闭写保护
addr=MIN_ADD_W; //选择秒写地址
for(cnt=6;cnt>0;cnt--)
{
DS1302WritByte(addr,*timept); //写入参数
addr+=2;timept++; //指针调整
}
DS1302WritByte(SEC_ADD_W,((*ptbak)&0x7f));
DS1302WritByte(PROT_ADD_W,PROTECT_EN); //使能写保护
}
/************************************
名称:TimeRead
功能:读取DS1302中时间寄存器
入口:时间数据指针
出口:无
说明:指针对应时间数据的顺序为:
秒、分、时、日、月、星期、年,
全部采用BCD编码
************************************/
void TimeRead(unsigned char *timept)
{
unsigned char cnt,addr;
addr=SEC_ADD_R; //选择秒读地址
for(cnt=7;cnt>0;cnt--)
{
*timept=DS1302ReadByte(addr); //读出参数
addr+=2;timept++; //指针调整
}
}
/************************************
名称:SNWrit
功能:DS1302中RAM数据写入
入口:数据指针
出口:无
说明:写入顺序为RAM0、RAM1……RAM30
************************************/
void SNWrit(unsigned char *datpt)
{
unsigned char cnt,addr;
DS1302WritByte(PROT_ADD_W,PROTECT_DE); //关闭写保护
addr=RAM0_ADD_W; //选择秒写地址
for(cnt=31;cnt>0;cnt--)
{
DS1302WritByte(addr,*datpt); //写入参数
addr+=2;datpt++; //指针调整
}
DS1302WritByte(PROT_ADD_W,PROTECT_EN); //使能写保护
}
/************************************
名称:SNRead
功能:读取DS1302中RAM寄存器
入口:数据指针
出口:无
说明:读出顺序为RAM0、RAM1……RAM30
************************************/
void SNRead(unsigned char *datpt)
{
unsigned char cnt,addr;
addr=RAM0_ADD_R;
for(cnt=31;cnt>0;cnt--)
{
*datpt=DS1302ReadByte(addr); //读出参数
addr+=2;datpt++; //指针调整
}
}
/************************************
名称:ChargerEnable
功能:使能充电
入口:无
出口:无
说明:
************************************/
void ChargerEnable(void)
{
DS1302WritByte(PROT_ADD_W,PROTECT_DE); //关闭写保护
DS1302WritByte(CHARG_ADD_W,CHARGER_EN);//充电控制
DS1302WritByte(PROT_ADD_W,PROTECT_EN); //使能写保护
}
/************************************
名称:ChargerClose
功能:停止充电
入口:无
出口:无
说明:
************************************/
void ChargerClose(void)
{
DS1302WritByte(PROT_ADD_W,PROTECT_DE); //关闭写保护
DS1302WritByte(CHARG_ADD_W,CHARGER_DE);//充电控制
DS1302WritByte(PROT_ADD_W,PROTECT_EN); //使能写保护
}
/************************************
名称:DS1302Init
功能:DS1302初始化
入口:无
出口:无
说明:
************************************/
void DS1302Init(void)
{
DS1302CLK=0;
DS1302DAT=0;
DS1302RTS=0;
DS1302CLK_T=0;
DS1302DAT_T=0;
DS1302RTS_T=0;
DS1302WritByte(PROT_ADD_W,PROTECT_DE); //关闭写保护
DS1302WritByte(CHARG_ADD_W,CHARGER_DE);//充电控制
DS1302WritByte(PROT_ADD_W,PROTECT_EN); //使能写保护
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -