DS1302,现在想把图中的纽扣电池改成可充电的,请问可充电的纽扣电池电路怎么设计

关注【相关推荐】
ds1302头文件:
#define WRITE_FLAG_ADDR 0xc0
#define READ_FLAG_ADDR 0xc1
#define FLAG_VAL 0x3a
解释:
定义三个宏,分别是写地址,读地址,和标记数值。
注意:读地址为写地址+1。(数据手册有图)
ds1302头文件:
设置时间函数
void ds1032_set_time(u16 year,u8 mon,u8 day,u8 hour,u8 min,u8 sec)
{
year -= 2000; //年默认2000开始
if(year > 100) year = 0;
// 10转为bdc码
year = ((year /10) << 4) + year %10;
mon = ((mon /10) << 4) + mon %10;
day = ((day /10) << 4) + day %10;
hour = ((hour /10) << 4) + hour %10;
min = ((min /10) << 4) + min %10;
sec = ((sec /10) << 4) + sec %10;
// 写入寄存器,同时标记一个地址
ds1302_wirte_rig(0x8e,0x00);//关闭写保护
ds1302_wirte_rig(WRITE_FLAG_ADDR,FLAG_VAL);//写入已经设置时间标记
ds1302_wirte_rig(0x80,sec);//seconds秒
ds1302_wirte_rig(0x82,min);//minutes分
ds1302_wirte_rig(0x84,hour);//hours时
ds1302_wirte_rig(0x86,day);//date日
ds1302_wirte_rig(0x88,mon);//months月
ds1302_wirte_rig(0x8c,(u8) year);//year年
// ds1302_wirte_rig(0x8a,7);// 星期日
ds1302_wirte_rig(0x8e,0x80);//开启写保护
}
初始化时间函数:
void ds1032_init_time(void)
{
if(ds1302_read_rig(READ_FLAG_ADDR)!= FLAG_VAL) // 如果未标记,执行初始化时间
{
ds1032_set_time(2020,12,31,23,59,30);// 2020年12月31日,23:59:30
printf("Y时间初始化完成,标记:%x\r\n",ds1302_read_rig(READ_FLAG_ADDR));
}
else
{
printf("N时间不用重复初始化,标记:%x\r\n",ds1302_read_rig(READ_FLAG_ADDR));
}
}
解释:
先判断有无标记,有则执行ds1032_set_time,否则不执行。
main源文件:
使用示例

实物效果图:
