DS1302星期跟随日期自动调整的C语言程序

2024-12-11 19:29:32
推荐回答(1个)
回答1:

//向DS1302送一个字节(时间显示)
void WriteB(uchar byte1)
{
uchar i;
for(i=8;i>0;i--)
{
IO=(bit)(byte1&0x01);
SCLK=1;
_nop_();
SCLK=0;
byte1>>=1;
}
}
//读DS1302一个字节(时间显示)
uchar ReadB(void)
{
uchar i;
uchar dat=0;
for(i=8;i>0;i--)
{
IO=1;
dat>>=1;
if(IO)
dat|=0x80;
SCLK=1;
_nop_();
SCLK=0;
}
return(dat);
}

//向DS1302某地址写一个字节数据(时间显示)
void write_ds1302(uchar addr,uchar TDat)
{
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
WriteB(addr);
_nop_();
WriteB(TDat);
SCLK=1;
_nop_();
RST=0;
}

//读DS1302地址子程序(时间显示)
unsigned char read_ds1302(uchar addr)
{
uchar time;
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
WriteB(addr);
time=ReadB();
SCLK=1;
_nop_();
RST=0;
return(time);
}

//DS1302的初始化(时间显示)
void DS1302_Init()
{
write_ds1302(0x8e,0x00);//关闭写保护寄存器
write_ds1302(0x8c,0x12);//年
write_ds1302(0x88,0x05);//月
write_ds1302(0x86,0x04);//日
write_ds1302(0x8A,0x05);//星期
write_ds1302(0x84,0x23);//时
write_ds1302(0x82,0x59);//分
write_ds1302(0x80,0x40);//秒
write_ds1302(0x90,0xa5);
write_ds1302(0x8e,0x80);//写保护
}
这是主体部分