📄 ds1302.c
字号:
void DS1302_limit(void) //初始化
{
DS1302_WriteEnable();
DS1302_OscEnable();
for(ds1302_b=0;ds1302_b<7;ds1302_b++)
DS1302_SendByte(ds_sec+2*ds1302_b,d1302[ds1302_b]); //赋值初始化
}
uchar DS1302_Read(uchar address) //读时钟
{
uchar dat;
DS1302_WriteEnable();
switch(address)
{case 0:dat=DS1302_ReceiveByte(ds_sec+1);
break;
case 1:dat=DS1302_ReceiveByte(ds_min+1);
break;
case 2:dat=DS1302_ReceiveByte(ds_hour+1);
break;
case 3:dat=DS1302_ReceiveByte(ds_day+1);
break;
case 4:dat=DS1302_ReceiveByte(ds_week+1);
break;
case 5:dat=DS1302_ReceiveByte(ds_month+1);
break;
case 6:dat=DS1302_ReceiveByte(ds_year+1);
break;
}
DS1302_WriteDisable();
return(dat);
}
void DS1302_Write(uchar address,uchar dat)
{
DS1302_WriteEnable();
switch(address)
{
case 0:DS1302_SendByte(ds_sec,dat);
break;
case 1:DS1302_SendByte(ds_min,dat);
break;
case 2:DS1302_SendByte(ds_hour,dat);
break;
case 3:DS1302_SendByte(ds_day,dat);
break;
case 4:DS1302_SendByte(ds_week,dat);
break;
case 5:DS1302_SendByte(ds_month,dat);
break;
case 6:DS1302_SendByte(ds_year,dat);
break;
}
DS1302_WriteDisable();
}
ds1302pro() //读出数据
{
nian01=DS1302_ReceiveByte(ds_year+1);
yue01=DS1302_ReceiveByte(ds_month+1);
ri01=DS1302_ReceiveByte(ds_day+1);
xiaoshi01=DS1302_ReceiveByte(ds_hour+1);
sec01=DS1302_ReceiveByte(ds_sec+1); //读秒信息
min01=DS1302_ReceiveByte(ds_min+1); //读分信息
zhouxingqi=DS1302_ReceiveByte(ds_week+1);
d1302_transfer(); //数值处理提取出待显示的值
}
void DS1302_SendByte(uchar Command,uchar XmtDat) // 发送数据程序,发送1个字节给被控器DS1302
{
uchar i;
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
for(i=0;i<8;i++)
{
IO_DATA= (bit)(Command&0x01);
Command = Command >> 1;
SCLK=1;
_nop_();
SCLK=0;
}
for(i=0;i<8;i++)
{
IO_DATA= (bit)(XmtDat&0x01);
XmtDat = XmtDat >> 1;
SCLK=1;
_nop_();
SCLK=0;
}
RST=0;
}
uchar DS1302_ReceiveByte(uchar Command) // 接收数据程序;从被控器DS1302 接收1个字节数据
{
uchar i, RcvDat=0;
RST=0;
_nop_();
SCLK=0;
_nop_();
RST=1;
for(i=0;i<8;i++)
{
IO_DATA= (bit)(Command&0x01);
Command = Command >> 1;
SCLK=1;
_nop_();
SCLK=0;
}
for(i=0;i<7;i++)
{
if(IO_DATA)RcvDat|=0x80;
RcvDat= RcvDat >> 1;
SCLK=1;
_nop_();
SCLK=0;
}
if(IO_DATA)RcvDat|=0x80;
RST=0;
return RcvDat;
}
void DS1302_WriteEnable(void) //允许数据写入寄存器
{
DS1302_SendByte(ds_com,00);
}
void DS1302_WriteDisable(void) //禁止数据写入寄存器
{
DS1302_SendByte(ds_com,0x80);
}
void DS1302_OscEnable(void) //起动时钟操作
{
DS1302_SendByte(ds_sec,0x00);
}
void DS1302_OscDisable(void) //停止时钟操作
{
DS1302_SendByte(ds_sec,0x80);
}
void d1302_transfer(void) //数据转换函数
{
nian02=nian01&0x0f;
nian01=nian01>>4;
yue02=yue01&0x0f;
yue01=yue01>>4;
ri02=ri01&0x0f;
ri01=ri01>>4;
xiaoshi02=xiaoshi01&0x0f;
xiaoshi01=xiaoshi01>>4;
min02=min01&0x0f;
min01=min01>>4;
sec02=sec01&0x0f; //取miao信号的低四位
sec01=sec01>>4; //取高四位
}
void delay1302(int i) //延时函数
{
uchar x,j;
for(x=0;x<i;x++)
{
for(j=0;j<125;j++){;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -