DS1302 自用代码 (通用)
DS1302 自用代码 STC32G12K128 测没有问题#define SCLK P22 //DS-S
#define DSIO P21 //DS-I
#define RSTP20 //DS-R
unsigned charREAD_RTC_ADDR = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};//读取地址
unsigned charWRITE_RTC_ADDR = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //写入地址
unsigned charTIME = {0,0, 0, 0, 0, 0, 0};
unsigned char Year=0, Month=0,day=0, Week=0, Hour=0, Minute=0, Second=0;//年月日周时分秒
unsigned char Ds1302Read(unsigned char addr)
{
unsigned char n,dat,dat1;
RST = 1;
_nop_();
for(n=0; n<8; n++)
{
DSIO = addr & 0x01;
addr >>= 1;
SCLK = 1;
_nop_();
SCLK = 0;
_nop_();
}
_nop_();
for(n=0; n<8; n++)
{
dat1 = DSIO;
dat = (dat>>1) | (dat1<<7);
SCLK = 1;
_nop_();
SCLK = 0;
_nop_();
}
RST = 0;
_nop_();
DSIO = 0;
_nop_();
return dat;
}
void Ds1302Write(unsigned char addr, unsigned char dat)
{
unsigned char n;
RST = 1;
_nop_();
for (n=0; n<8; n++)
{
DSIO = addr & 0x01;
addr >>= 1;
SCLK = 1;
_nop_();
SCLK = 0;
_nop_();
}
for (n=0; n<8; n++)
{
DSIO = dat & 0x01;
dat >>= 1;
SCLK = 1;
_nop_();
SCLK = 0;
_nop_();
}
RST = 0;
_nop_();
}
void Ds1302Init()
{
unsigned char n;
Ds1302Write(0x8E,0X00);
for (n=0; n<7; n++)
{
Ds1302Write(WRITE_RTC_ADDR,TIME);
}
Ds1302Write(0x8E,0x80);
}
//========================================================================
// 读取时间
// ***********************************************************************
//========================================================================
void Ds1302ReadTime()
{
unsigned char n;
unsigned char dd="";
for (n=0; n<7; n++)
{
TIME = Ds1302Read(READ_RTC_ADDR);
}
for (n=0; n<7; n++)
{
TIME = Ds1302Read(READ_RTC_ADDR);
}
Year=BCD_DEC(TIME);
Week=BCD_DEC(TIME);
Month=BCD_DEC(TIME);
day=BCD_DEC(TIME);
Hour=BCD_DEC(TIME);
Minute=BCD_DEC(TIME);
Second=BCD_DEC(TIME);
}
unsigned char *WEEK_ZH(unsigned char aa)
{
static unsigned char dd="";
if(aa==1) strcpy(dd,"一") ;
if(aa==2) strcpy(dd,"二") ;
if(aa==3) strcpy(dd,"三\xfd") ;
if(aa==4) strcpy(dd,"四") ;
if(aa==5) strcpy(dd,"五") ;
if(aa==6) strcpy(dd,"六") ;
if(aa==7) strcpy(dd,"日") ;
return dd;
}
{:4_250:} 1302还不错啊可以宽压使用 unsigned char *WEEK_ZH(unsigned char aa)
{
static unsigned char dd="";
if(aa==1) strcpy(dd,"一") ;
if(aa==2) strcpy(dd,"二") ;
if(aa==3) strcpy(dd,"三\xfd") ;
if(aa==4) strcpy(dd,"四") ;
if(aa==5) strcpy(dd,"五") ;
if(aa==6) strcpy(dd,"六") ;
if(aa==7) strcpy(dd,"日") ;
return dd;
}
上面的代码应该使用 else if, 或switch来实现:
unsigned char *WEEK_ZH(unsigned char aa)
{
static unsigned char dd="";
if(aa==1) strcpy(dd,"一") ;
else if(aa==2) strcpy(dd,"二") ;
else if(aa==3) strcpy(dd,"三\xfd") ;
else if(aa==4) strcpy(dd,"四") ;
else if(aa==5) strcpy(dd,"五") ;
else if(aa==6) strcpy(dd,"六") ;
else if(aa==7) strcpy(dd,"日") ;
return dd;
}
我用的DS1302,总是走快,一天能快5-6秒,有没人知道是什么原因? wpy621206 发表于 2024-10-17 14:20
我用的DS1302,总是走快,一天能快5-6秒,有没人知道是什么原因?
看下晶振和电容是否匹配 社区闲人 发表于 2024-10-17 13:12
unsigned char *WEEK_ZH(unsigned char aa)
{
static unsigned char dd="";
{:4_250:}{:4_250:}{:4_250:}{:4_250:}{:4_250:}{:4_250:} wpy621206 发表于 2024-10-17 14:20
我用的DS1302,总是走快,一天能快5-6秒,有没人知道是什么原因?
晶振频率偏高,调节一下谐振电容 soma 发表于 2024-10-17 15:48
晶振频率偏高,调节一下谐振电容
收到,谢谢 fanpu 发表于 2024-10-17 15:27
看下晶振和电容是否匹配
收到,谢谢
页:
[1]
2