📄 ds1302.c
字号:
/*========================================
========================================*/
#include "DS1302.h"
void Write1302(unsigned char add,unsigned char data)
{
unsigned char i,data_h,data_l;
data_h = (data/10)<<4;
data_l = data_h|(data%10);
DS1302_OUT_PP;
DS1302_CE_L;
DS1302_SCLK_L;
DS1302_CE_H;
for(i=0;i<8;i++)
{
DS1302_SCLK_L;
if(add&0x01)
DS1302_DIO_H;
else
DS1302_DIO_L;
add>>=1;
DS1302_SCLK_H;
}
for(i=0;i<8;i++)
{
DS1302_SCLK_L;
if(data_l&0x01)
DS1302_DIO_H;
else
DS1302_DIO_L;
data_l>>=1;
DS1302_SCLK_H;
}
DS1302_CE_L;
}
/*======================================
======================================*/
unsigned char Read1302(unsigned char add)
{
unsigned char i,temp_h,temp_l;
DS1302_OUT_PP;
add += 1;
DS1302_CE_L;
DS1302_SCLK_L;
DS1302_CE_H;
for(i=0;i<8;i++)
{
DS1302_SCLK_L;
if(add&0x01)
DS1302_DIO_H;
else
DS1302_DIO_L;
add>>=1;
DS1302_SCLK_H;
}
DS1302_DIO_IN_PU_NO_IT;
for(i=0;i<8;i++)
{
if(DS1302_DIO_IN)
temp_l |= 0x80;
DS1302_SCLK_H;
nop();
nop();
nop();
temp_l >>=1;
DS1302_SCLK_L;
}
DS1302_CE_L;
temp_h = ((temp_l>>4)*10)+(temp_l&0x0f);
return temp_h;
}
void Set1302(unsigned char year,unsigned char month,unsigned char date,
unsigned char day,unsigned char hour,unsigned char min)
{
Write1302(PROTECT,0);
//Write1302(SECOND,second);
Write1302(SECOND,0x00);//启动时钟,0x80停止时钟
Write1302(MINUTE,min);
Write1302(HOUR,hour);
Write1302(DATE,date);
Write1302(MONTH,month);
Write1302(DAY,day);//week
Write1302(YEAR,year);//年
// Write1302(YEAR,year);
Write1302(PROTECT,0x80);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -