手机版

万年历星期的算法

时间:2025-04-24   来源:未知    
字号:

万年历星期的算法

万年历星期的算法(C语言)

#include <stdio.h>

code unsigned char WeekTab[] = {//闰年月星期表

(3 << 5) + 31,//1月

(6 << 5) + 29,//2月

(0 << 5) + 31,//3月

(3 << 5) + 30,//4月

(5 << 5) + 31,//5月

(1 << 5) + 30,//6月

(3 << 5) + 31,//7月

(6 << 5) + 31,//8月

(1 << 5) + 30,//9月

(4 << 5) + 31,//10月

(0 << 5) + 30,//11月

(2 << 5) + 31 //12月

};

/*------------------------------------------------------------------------------

----------

2000年~2099年星期算法

--------------------------------------------------------------------------------

---------*/

unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d)

{

unsigned char week, day;

day = WeekTab[m - 1];//月表

week = day >> 5;//月星期数

day &= 0x1f;//月天数

if ((m < 3) && (y & 0x03)){//平年

if (m == 2) day--;//平年月天数

week++;//平年月表+1

}

y = y + (y >> 2);//年+年/4

week = (week + y + d + 2) % 7;//(星期=年+年/4+月表+2日)%7

return (week << 5) | day;//返回星期和月天数

}

/*------------------------------------------------------------------------------

----------

0000年~9999年星期算法

--------------------------------------------------------------------------------

---------*/

万年历星期的算法

unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m,

unsigned char d)

{

unsigned char week, day;

c &= 0x03;//百年%4

c = c | (c << 2);//百年%4*5

day = WeekTab[m - 1];//月表

week = day >> 5;//月星期数

day &= 0x1f;//月天数

if ((m < 3) && !((c == 0) | (y & ((y & 0x03) == 0)))){//平年

if (m == 2) day--;//平年月天数

week++;//平年月表+1

}

y = y + (y >> 2);//年+年/4

week = (week + c + y + d + 2) % 7;//(星期=百年%4*5+年+年/4+月表+日+2)%7

return (week << 5) | day;//返回星期和月天数

}

unsigned char BcdToBin(unsigned char val)

{

val = (val >> 4) * 10 + (val & 0x0f);//将BCD码转换为10进制数

return val;//返回10进制数

}

void main(void)

{

unsigned char c, y, m, d;

unsigned char cx, yx, mx, dx;

unsigned char WDay, Week, Day;

/*---------------------------------------------------------

0001年1月1日 星期天

---------------------------------------------------------*/

c = 0x00;

y = 0x01;

m = 0x01;

d = 0x01;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数

Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

/*---------------------------------------------------------

1918年1月21日 星期一

万年历星期的算法

---------------------------------------------------------*/

c = 0x19;

y = 0x18;

m = 0x01;

d = 0x21;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数

Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

/*---------------------------------------------------------

9999年12月31日 星期天

---------------------------------------------------------*/

c = 0x00;

y = 0x01;

m = 0x01;

d = 0x01;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay(cx, yx, mx, dx);//取星期和月天数

Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

/*---------------------------------------------------------

2004年6月18日 星期五

---------------------------------------------------------*/

c = 0x20;

y = 0x04;

m = 0x06;

d = 0x18;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay20(yx, mx, dx);//取星期和月天数

Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

/*---------------------------------------------------------

2018年3月8日 星期四

---------------------------------------------------------*/

c = 0x20;

万年历星期的算法

y = 0x18;

m = 0x03;

d = 0x08;

cx = BcdToBin(c);//百年

yx = BcdToBin(y);//年

mx = BcdToBin(m);//月

dx = BcdToBin(d);//日

WDay = WeekDay20(yx, mx, dx);//取星期和月天数

Week = WDay >> 5;//得到星期

Day = WDay & 0x1f;//得到最大月天数

while(1);

}

AM12864系列测试程序(C语言)

/********************************************/

/* AM12864系列测试程序 1.0 */

/* Designed by Andorin LCM R&D Group */

/********************************************/

#include <reg51.h>

#include <ctype.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

/********************************************/

/* AM12864系列测试程序 1.0 */

/* Designed by Andorin LCM R&D Group */

/********************************************/

/* Define the register command code */

#define Disp_On 0x3f

#define …… 此处隐藏:12308字,全部文档内容请下载后查看。喜欢就下载吧 ……

万年历星期的算法.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)