小飞侠 发表于 2024-7-18 16:18:18

{:5_332:}

我的用户名 发表于 2024-10-4 21:31:09

感谢无私分享!{:4_197:}

wpy621206 发表于 2024-10-4 22:16:51

值得收藏

21cnsound 发表于 2024-11-19 14:44:01

有人验证过正确性吗?即使是只到2099年也是很厉害了

晓飛飛 发表于 2024-11-19 23:14:19

21cnsound 发表于 2024-11-19 14:44
有人验证过正确性吗?即使是只到2099年也是很厉害了

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

神农鼎 发表于 2024-11-20 00:41:25









omnsvwle 发表于 2024-11-30 17:13:24


为什么会偏一天
unsigned char code weekdata={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+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,"日");      
                }
}
{:4_267:}

晓飛飛 发表于 2024-11-30 17:36:11

本帖最后由 晓飛飛 于 2024-11-30 17:54 编辑

omnsvwle 发表于 2024-11-30 17:13
为什么会偏一天
unsigned char code weekdata={0,3,3,6,1,4,6,2,5,0,3,5};
unsigned char MYWEEK(unsi ...
weekdata={0,3,3,6,1,4,6,2,5,0,3,5};
#define WEEK((6+weekdata+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 = 星期六
结果正确!!

晓飛飛 发表于 2024-11-30 17:40:00

omnsvwle 发表于 2024-11-30 17:13
为什么会偏一天
unsigned char code weekdata={0,3,3,6,1,4,6,2,5,0,3,5};
unsigned char MYWEEK(unsi ...

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

((6+weekdata+month+day+year/4)%7);
((6+weekdata+YEAR+DAY+YEAR/4)%7)

omnsvwle 发表于 2024-11-30 17:45:04

晓飛飛 发表于 2024-11-30 17:36
weekdata={0,3,3,6,1,4,6,2,5,0,3,5};
#define WEEK((6+weekdata+YEAR+DAY+YEAR/4)%7)
( ...

改了你的代码现在更偏了{:4_260:}
页: 1 [2] 3
查看完整版本: 简简单单 8H/32G系列单片机RTC专用的星期计算代码