1307_readByte(ADDR_HOUR);
if(setValue == DS1307_12HOUR_MODE)
{
buf = buf|DS1307_12HOUR_MODE;
DS1307_writeByte(ADDR_HOUR,buf);
}
else if(setValue == DS1307_24HOUR_MODE)
{
buf = buf&DS1307_24HOUR_MODE;
DS1307_writeByte(ADDR_HOUR,buf);
}
else
buf = 0;
}
uchar DS1307_readSecond(void)
{
uchar sec_buf = 0;
uchar sec_l = 0;
uchar sec_h = 0;
sec_buf = DS1307_readByte(ADDR_SEC);
sec_h = (sec_buf 》》 4)&0x0F;
sec_l = sec_buf&0x0F;
return (sec_h*10 + sec_l);
}
uchar DS1307_readMinute(void)
{
uchar min_buf = 0;
uchar min_l = 0;
uchar min_h = 0;
min_buf = DS1307_readByte(ADDR_MIN);
min_h = (min_buf 》》 4)&0x0F;
min_l = min_buf&0x0F;
return (min_h*10 + min_l);
}
uchar DS1307_readHour(void)
{
uchar hour_buf = 0;
uchar hour_h = 0;
uchar hour_l = 0;
hour_buf = DS1307_readByte(ADDR_HOUR);
hour_h = (hour_buf 》》 4)&0x10;
hour_l = hour_buf&0x0f;
return (hour_h*10 + hour_l);
}
uchar DS1307_readDay(void)
{
uchar day_buf = 0;
day_buf = DS1307_readByte(ADDR_DAY);
return day_buf;
}
uchar DS1307_readDate(void)
{
uchar date_buf = 0;
uchar date_h = 0;
uchar date_l = 0;
date_buf = DS1307_readByte(ADDR_DATE);
date_h = (date_buf 》》 4)&0x0F;
date_l = date_buf&0x0F;
return (date_h*10 + date_l);
}
uchar DS1307_readMonth(void)
{
uchar month_buf = 0;
uchar month_h = 0;
uchar month_l = 0;
month_buf = DS1307_readByte(ADDR_MONTH);
month_h = (month_buf 》》 4)&0x0F;
month_l = month_buf&0x0F;
return (month_h*10 + month_l);
}
uchar DS1307_readYear(void)
{
uchar year_buf = 0;
uchar year_h = 0;
uchar year_l = 0;
year_buf = DS1307_readByte(ADDR_YEAR);
year_h = (year_buf 》》 4)&0x0F;
year_l = year_buf&0x0F;
return (year_buf*10 + year_l);
}
//struct tm DS1307_readTime(void)
void display(void)
{
P0 = tab[min/10]; /* P0为段选口 */
P2 = 0xFE; /* P2低四位为位选口 */
delay_ms(1);
P2 = 0xFF;
P0 = tab[min%10]&0x7F;
P2 = 0xFD;
delay_ms(1);
P2 = 0xFF;
P0 = tab[sec/10];
P2 = 0xFB;
delay_ms(1);
P2 = 0xFF;
P0 = tab[sec%10];
P2 = 0xF7;
delay_ms(1);
P2 = 0xFF;
}
void main(void)
{
uchar cnt = 0;
struct tm Init_t;
/* 初始时间全部置0(必须初始化!此步不可少!) */
Init_t.tm_sec = 0;
Init_t.tm_min = 0;
Init_t.tm_hour = 0;
Init_t.tm_wday = 0;
Init_t.tm_mon = 0;
Init_t.tm_year = 0;
I2C_Init();
DS1307_setTime(Init_t); /* 必须初始化!此步不可少! */
/* 主程序可根据需求自由修改 */
while(1)
{
sec = DS1307_readSecond();
min = DS1307_readMinute();
display();
}
}
评论