小飞侠
发表于 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:}