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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-05-02 05:31:55

16

主题

702

回帖

2474

积分

金牌会员

积分
2474
发表于 2024-7-18 16:18:18 | 显示全部楼层
{:5_332:}
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-23 08:55:32

3

主题

36

回帖

163

积分

注册会员

积分
163
发表于 2024-10-4 21:31:09 | 显示全部楼层
感谢无私分享!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:444
  • 最近打卡:2025-05-01 09:06:40

3

主题

47

回帖

424

积分

中级会员

积分
424
发表于 2024-10-4 22:16:51 | 显示全部楼层
值得收藏
回复

使用道具 举报 送花

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

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-11-19 14:44:01 | 显示全部楼层
有人验证过正确性吗?即使是只到2099年也是很厉害了

点评

我天天用的,目前没发现任何问题,而且通过修改数组里面的数字,可以支持任意日期段的,再者,验证这个非常容易,随便找个开发板或者核心模块,分分钟就可以开始测试。欢迎测试后反馈结果。  详情 回复 发表于 2024-11-19 23:14
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-11-19 23:14:19 | 显示全部楼层
21cns*** 发表于 2024-11-19 14:44
有人验证过正确性吗?即使是只到2099年也是很厉害了

我天天用的,目前没发现任何问题,而且通过修改数组里面的数字,可以支持任意日期段的,再者,验证这个非常容易,随便找个开发板或者核心模块,分分钟就可以开始测试。欢迎测试后反馈结果。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-11-20 00:41:25 | 显示全部楼层
截图202411200039477626.jpg


截图202411200040417141.jpg


截图202411200041208805.jpg

回复 支持 反对

使用道具 举报 送花

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

8

主题

26

回帖

306

积分

中级会员

积分
306
发表于 2024-11-30 17:13:24 | 显示全部楼层
微信图片_20241130171103.jpg
为什么会偏一天
unsigned char code weekdata[12]={0,3,3,6,1,4,6,2,5,0,3,5};
unsigned char MYWEEK(unsigned char year,unsigned char month,unsigned char day)
{
        return ((6+weekdata[month-1]+month+day+year/4)%7);               
}
void LCM_RTC(void)
{        
                unsigned char s,min,hour;
                s = SEC;
                min = MIN;
                hour = HOUR;
                LCD_ShowLEDChar(150+30, 90, s/10);
                LCD_ShowLEDChar(174+30, 90, s%10);
                LCD_F(128+30,98);
//                LCD_ShowLEDChar(148, 96, min);
                LCD_ShowLEDChar(78+30, 90, min/10);
                LCD_ShowLEDChar(102+30, 90, min%10);
                LCD_F(57+30,98);
                LCD_ShowLEDChar(4+30, 90, hour/10);
                LCD_ShowLEDChar(28+30, 90, hour%10);
                LCD_math(48,5,MONTH/10);
                LCD_math(65,5,MONTH%10);
                LCD_ShowGBK(81,5,"月");
                LCD_math(113,5,DAY/10);
                LCD_math(129,5,DAY%10);
                LCD_ShowGBK(145,5,"日");
                LCD_ShowGBK(177,5,"星");
                LCD_ShowGBK(205,5,"期");
                if(MYWEEK(YEAR,MONTH,DAY) == 1)
                {
                        LCD_ShowGBK(237,5,"一");        
                }
                else if(MYWEEK(YEAR,MONTH,DAY) == 2)
                {
                        LCD_ShowGBK(237,5,"二");        
                }
                else if(MYWEEK(YEAR,MONTH,DAY) == 3)
                {
                        LCD_ShowGBK(237,5,"三");        
                }
                else if(MYWEEK(YEAR,MONTH,DAY) == 4)
                {
                        LCD_ShowGBK(237,5,"四");        
                }
                else if(MYWEEK(YEAR,MONTH,DAY) == 5)
                {
                        LCD_ShowGBK(237,5,"五");        
                }
                else if(MYWEEK(YEAR,MONTH,DAY) == 6)
                {
                        LCD_ShowGBK(237,7,"六");        
                }
                else
                {
                        LCD_ShowGBK(237,5,"日");        
                }
}

点评

区别在这里,你没搞清楚原理,抄又抄的不细心,你改一下再试。 ((6+weekdata[month-1]+month+day+year/4)%7); ((6+weekdata[MONTH-1]+YEAR+DAY+YEAR/4)%7)  详情 回复 发表于 2024-11-30 17:40
weekdata[12]={0,3,3,6,1,4,6,2,5,0,3,5}; #define WEEK ((6+weekdata[MONTH-1]+YEAR+DAY+YEAR/4)%7) ((6+weekdata[11-1]+24+30+24/4)%7) = (6+3+24+30+6)% 7 = 69 % 7 = 6 = 星期六 我不知道你哪里出问题了,  详情 回复 发表于 2024-11-30 17:36
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-11-30 17:36:11 | 显示全部楼层
本帖最后由 晓飛飛 于 2024-11-30 17:54 编辑
omns*** 发表于 2024-11-30 17:13
为什么会偏一天
unsigned char code weekdata[12]={0,3,3,6,1,4,6,2,5,0,3,5};
unsigned char MYWEEK(unsi ...

weekdata[12]={0,3,3,6,1,4,6,2,5,0,3,5};
#define WEEK  ((6+weekdata[MONTH-1]+YEAR+DAY+YEAR/4)%7)
2024年11月30日
带入今天的日期,验算过程如下:

24 11 30
((6+weekdata[11-1]+24+30+24/4)%7) = (6+3+24+30+6)% 7 = 69 % 7 = 6 = 星期六
结果正确!!
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-11-30 17:40:00 | 显示全部楼层
omns*** 发表于 2024-11-30 17:13
为什么会偏一天
unsigned char code weekdata[12]={0,3,3,6,1,4,6,2,5,0,3,5};
unsigned char MYWEEK(unsi ...

区别在这里,你没搞清楚原理,抄又抄的不细心,你改一下再试。

((6+weekdata[month-1]+month+day+year/4)%7);
((6+weekdata[MONTH-1]+YEAR+DAY+YEAR/4)%7)
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

8

主题

26

回帖

306

积分

中级会员

积分
306
发表于 2024-11-30 17:45:04 | 显示全部楼层
晓*** 发表于 2024-11-30 17:36
weekdata[12]={0,3,3,6,1,4,6,2,5,0,3,5};
#define WEEK  ((6+weekdata[MONTH-1]+YEAR+DAY+YEAR/4)%7)
  ( ...

改了你的代码现在更偏了 微信图片_20241130174431.jpg

点评

我在19楼有带入今天的日期详细验算过程,计算结果是6,至于你的显示为啥错误,建议查查别的地方。  详情 回复 发表于 2024-11-30 17:49
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:50 , Processed in 0.127032 second(s), 124 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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