找回密码
 立即注册
楼主: 晓飛飛

简简单单 8H/32G系列单片机RTC专用的星期计算代码

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-11-30 17:49:15 | 显示全部楼层
本帖最后由 晓飛飛 于 2024-11-30 17:50 编辑
omns*** 发表于 2024-11-30 17:45
改了你的代码现在更偏了

我在19楼有带入今天的日期详细验算过程,计算结果是6,至于你的显示为啥错误,建议查查别的地方。
另外,建议你把年也显示出来,看看RTC寄存器的实际值是多少,包括计算后的星期用数字显示出来

睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-02-15 09:09:48
已绑定手机

8

主题

26

回帖

306

积分

中级会员

积分
306
发表于 2024-12-2 08:06:58 | 显示全部楼层
晓*** 发表于 2024-11-30 17:40
区别在这里,你没搞清楚原理,抄又抄的不细心,你改一下再试。

((6+weekdata[month-1]+month+day+year/4 ...

修改好了,非常感谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2025-2-10 09:27:52 | 显示全部楼层
晓*** 发表于 2024-11-19 23:14
我天天用的,目前没发现任何问题,而且通过修改数组里面的数字,可以支持任意日期段的,再者,验证这个非 ...

在excel中验证了一下,闰年的1月和2月计算出来比实际多1
比如,24年1月1日计算出来是周二(多1),而23年12月31日是周日。

点评

麻烦您验证一下这个代码,看是否可行  详情 回复 发表于 2025-2-10 14:40
闰年是从2月份结束时开始补一天的,但公式是从1月份就开始补了,这个我优化一下bug  详情 回复 发表于 2025-2-10 10:51
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2025-2-10 10:51:47 | 显示全部楼层
21cns*** 发表于 2025-2-10 09:27
在excel中验证了一下,闰年的1月和2月计算出来比实际多1
比如,24年1月1日计算出来是周二(多1),而23年 ...

闰年是从2月份结束时开始补一天的,但公式是从1月份就开始补了,这个我优化一下bug
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2025-2-10 14:40:23 | 显示全部楼层
21cns*** 发表于 2025-2-10 09:27
在excel中验证了一下,闰年的1月和2月计算出来比实际多1
比如,24年1月1日计算出来是周二(多1),而23年 ...

麻烦您验证一下这个代码,看是否可行
  1.     unsigned char code weekdata[12]={0,3,3,6,1,4,6,2,5,0,3,5};
  2.   #define WEEK  ((6+weekdata[MONTH-1]+YEAR+DAY-(((YEAR % 4) || (MONTH > 2))?0:1) + YEAR/4)%7)
复制代码


睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2025-2-10 15:34:08 | 显示全部楼层
晓*** 发表于 2025-2-10 14:40
麻烦您验证一下这个代码,看是否可行

100年全部准确
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2025-2-10 15:39:52 | 显示全部楼层
优化建议:
unsigned char code weekdata[13]={0,6,9,9,12,7,10,12,8,11,6,9,11};
#define WEEK  ((weekdata[MONTH]+YEAR+DAY-(((YEAR % 4) || (MONTH > 2))?0:1) + YEAR/4)%7)

点评

好的谢谢!我这个代码就是100年范围内使用的,大多数RTC芯片的年寄存器也就8位的。  详情 回复 发表于 2025-2-10 17:13
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2025-2-10 17:13:45 来自手机 | 显示全部楼层
21cnsound 发表于 2025-2-10 15:39
优化建议:
unsigned char code weekdata[13]={0,6,9,9,12,7,10,12,8,11,6,9,11};
#define WEEK  ((weekdat ...

好的谢谢!我这个代码就是100年范围内使用的,大多数RTC芯片的年寄存器也就8位的。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:52 , Processed in 0.163899 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表