//----------------------------------------------------------
// 模块名称:DS1302.h
// 模块功能:时钟操作函数
//----------------------------------------------------------
sbit RET = P1^0;
sbit SCLK = P1^1;
sbit IO = P1^2;
//----------------------------------------------------------
// 函数名称:void Write1302(unsigned char addr,dat)
// 函数功能:根据指定地址写入一字节的数据
//----------------------------------------------------------
void Write1302(unsigned char addr,dat)
{
unsigned char i;
RET=0;
SCLK=0;
RET=1;
//发送地址
for(i=0;i<8;i++)
{
IO=(addr&0x01);
addr>>=1;
SCLK=0;
SCLK=1;
}
//发送数据
for(i=0;i<8;i++)
{
IO=(dat&0x01);
dat>>=1;
SCLK=0;
SCLK=1;
}
RET=0;
}
//----------------------------------------------------------
// 函数名称:unsigned char Read1302(unsigned char addr)
// 函数功能:根据指定地址读出一字节的数据
//----------------------------------------------------------
unsigned char Read1302(unsigned char addr)
{
unsigned char i,temp=0,dat;
RET=0;
SCLK=0;
RET=1;
//发送地址
for(i=0;i<8;i++)
{
IO=(addr&0x01);
addr>>=1;
SCLK=0;
SCLK=1;
}
//读取数据
for(i=8; i>0; i--)
{
SCLK = 0;
ACC = ACC>>1;
ACC7 = IO;
SCLK = 1;
}
temp=ACC;
dat=temp/16;
temp=temp%16;
dat=dat*10+temp;
return dat;
}
//----------------------------------------------------------
// 函数名称:WriteControl(unsigned char number)
// 函数功能:向慢速充电器写入控制字节
//----------------------------------------------------------
void WriteControl(unsigned char number)
{
Write1302(0x90,number);
}
//----------------------------------------------------------
// 函数名称:void WriteTime()
// 函数功能:更新时钟的时间
//----------------------------------------------------------
void WriteTime()
{
Write1302(WRITE_PROTECT,0X00);
//禁止写保护
Write1302(WRITE_SECOND,Second);
//秒
Write1302(WRITE_MINUTE,Minute);
//分
Write1302(WRITE_HOUR,Hour);
//时
Write1302(WRITE_DAY,Day);
//日
Write1302(WRITE_MONTH,Month);
//月
Write1302(WRITE_YEAR,Year);
//年
Write1302(WRITE_WEEK,Week);
//星期
WriteControl(0xa6);
//慢速充电
Write1302(WRITE_PROTECT,0X80);
//允许写保护
}
//----------------------------------------------------------
// 函数名称:void ReadTime()
// 函数功能:从时钟中获取时间
//----------------------------------------------------------
void ReadTime()
{
Second = Read1302(READ_SECOND);
//秒
Minute = Read1302(READ_MINUTE);
//分
Hour = Read1302(READ_HOUR);
//时
Day = Read1302(READ_DAY);
//日
Month = Read1302(READ_MONTH);
//月
Year = Read1302(READ_YEAR);
//年
Week = Read1302(READ_WEEK);
//星期
}
DS1302 时钟操作
最新推荐文章于 2022-11-28 11:32:37 发布