?? week.lst
字號:
C51 COMPILER V7.06 WEEK 10/18/2004 11:00:19 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE WEEK
OBJECT MODULE PLACED IN week.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE week.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2
3 code unsigned char WeekTab[] = {//閏年月星期表
4 (3 << 5) + 31,//1月
5 (6 << 5) + 29,//2月
6 (0 << 5) + 31,//3月
7 (3 << 5) + 30,//4月
8 (5 << 5) + 31,//5月
9 (1 << 5) + 30,//6月
10 (3 << 5) + 31,//7月
11 (6 << 5) + 31,//8月
12 (1 << 5) + 30,//9月
13 (4 << 5) + 31,//10月
14 (0 << 5) + 30,//11月
15 (2 << 5) + 31 //12月
16 };
17
18 /*------------------------------------------------------------------------------
19 ----------
20 2000年~2099年星期算法
21 --------------------------------------------------------------------------------
22 ---------*/
23 unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d)
24 {
25 1 unsigned char week, day;
26 1 day = WeekTab[m - 1];//月表
27 1 week = day >> 5;//月星期數
28 1 day &= 0x1f;//月天數
29 1 if ((m < 3) && (y & 0x03)){//平年
30 2 if (m == 2) day--;//平年月天數
31 2 week++;//平年月表+1
32 2 }
33 1 y = y + (y >> 2);//年+年/4
34 1 week = (week + y + d + 2) % 7;//(星期=年+年/4+月表+2日)%7
35 1 return (week << 5) | day;//返回星期和月天數
36 1 }
37
38 /*------------------------------------------------------------------------------
39 ----------
40 0000年~9999年星期算法
41 --------------------------------------------------------------------------------
42 ---------*/
43 unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m,
44 unsigned char d)
45 {
46 1 unsigned char week, day;
47 1 c &= 0x03;//百年%4
48 1 c = c | (c << 2);//百年%4*5
49 1 day = WeekTab[m - 1];//月表
50 1 week = day >> 5;//月星期數
51 1 day &= 0x1f;//月天數
52 1 if ((m < 3) && !((c == 0) | (y & ((y & 0x03) == 0)))){//平年
53 2 if (m == 2) day--;//平年月天數
54 2 week++;//平年月表+1
55 2 }
C51 COMPILER V7.06 WEEK 10/18/2004 11:00:19 PAGE 2
56 1 y = y + (y >> 2);//年+年/4
57 1 week = (week + c + y + d + 2) % 7;//(星期=百年%4*5+年+年/4+月表+日+2)%7
58 1 return (week << 5) | day;//返回星期和月天數
59 1 }
60
61 unsigned char BcdToBin(unsigned char val)
62 {
63 1 val = (val >> 4) * 10 + (val & 0x0f);//將BCD碼轉換為10進制數
64 1 return val;//返回10進制數
65 1 }
66
67 void main(void)
68 {
69 1 unsigned char c, y, m, d;
70 1 unsigned char cx, yx, mx, dx;
71 1 unsigned char WDay, Week, Day;
72 1 /*---------------------------------------------------------
73 1 0001年1月1日 星期天
74 1 ---------------------------------------------------------*/
75 1 c = 0x00;
76 1 y = 0x01;
77 1 m = 0x01;
78 1 d = 0x01;
79 1 cx = BcdToBin(c);//百年
80 1 yx = BcdToBin(y);//年
81 1 mx = BcdToBin(m);//月
82 1 dx = BcdToBin(d);//日
83 1 WDay = WeekDay(cx, yx, mx, dx);//取星期和月天數
84 1 Week = WDay >> 5;//得到星期
85 1 Day = WDay & 0x1f;//得到最大月天數
86 1 /*---------------------------------------------------------
87 1 1918年1月21日 星期一
88 1 ---------------------------------------------------------*/
89 1 c = 0x19;
90 1 y = 0x18;
91 1 m = 0x01;
92 1 d = 0x21;
93 1 cx = BcdToBin(c);//百年
94 1 yx = BcdToBin(y);//年
95 1 mx = BcdToBin(m);//月
96 1 dx = BcdToBin(d);//日
97 1 WDay = WeekDay(cx, yx, mx, dx);//取星期和月天數
98 1 Week = WDay >> 5;//得到星期
99 1 Day = WDay & 0x1f;//得到最大月天數
100 1 /*---------------------------------------------------------
101 1 9999年12月31日 星期天
102 1 ---------------------------------------------------------*/
103 1 c = 0x00;
104 1 y = 0x01;
105 1 m = 0x01;
106 1 d = 0x01;
107 1 cx = BcdToBin(c);//百年
108 1 yx = BcdToBin(y);//年
109 1 mx = BcdToBin(m);//月
110 1 dx = BcdToBin(d);//日
111 1 WDay = WeekDay(cx, yx, mx, dx);//取星期和月天數
112 1 Week = WDay >> 5;//得到星期
113 1 Day = WDay & 0x1f;//得到最大月天數
114 1 /*---------------------------------------------------------
115 1 2004年6月18日 星期五
116 1 ---------------------------------------------------------*/
117 1 c = 0x20;
C51 COMPILER V7.06 WEEK 10/18/2004 11:00:19 PAGE 3
118 1 y = 0x04;
119 1 m = 0x06;
120 1 d = 0x18;
121 1 cx = BcdToBin(c);//百年
122 1 yx = BcdToBin(y);//年
123 1 mx = BcdToBin(m);//月
124 1 dx = BcdToBin(d);//日
125 1 WDay = WeekDay20(yx, mx, dx);//取星期和月天數
126 1 Week = WDay >> 5;//得到星期
127 1 Day = WDay & 0x1f;//得到最大月天數
128 1 /*---------------------------------------------------------
129 1 2018年3月8日 星期四
130 1 ---------------------------------------------------------*/
131 1 c = 0x20;
132 1 y = 0x18;
133 1 m = 0x03;
134 1 d = 0x08;
135 1 cx = BcdToBin(c);//百年
136 1 yx = BcdToBin(y);//年
137 1 mx = BcdToBin(m);//月
138 1 dx = BcdToBin(d);//日
139 1 WDay = WeekDay20(yx, mx, dx);//取星期和月天數
140 1 Week = WDay >> 5;//得到星期
141 1 Day = WDay & 0x1f;//得到最大月天數
142 1 while(1);
143 1 }
144 //==========================================================
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 341 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -