⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suanfa.lst

📁 根据日期算星期
💻 LST
字号:
C51 COMPILER V3.20,  SN-0  SUANFA                                                          10/29/04  17:31:34  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE SUANFA
OBJECT MODULE PLACED IN SUANFA.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE SUANFA.C DB OE SMALL ROM(LARGE) 

stmt level    source

   1          /*新编万年历星期速算法C语言的实现 */
   2           
   3            
   4              #include <stdio.h>
   5          
   6          code unsigned char WeekTab[] = {/*闰年月星期表*/
   7          (3 << 5) + 31,/*1月*/
   8          (6 << 5) + 29,/*2月*/
   9          (0 << 5) + 31,/*3月*/
  10          (3 << 5) + 30,/*4月*/
  11          (5 << 5) + 31,/*5月*/
  12          (1 << 5) + 30,/*6月*/
  13          (3 << 5) + 31,/*7月*/
  14          (6 << 5) + 31,/*8月*/
  15          (1 << 5) + 30,/*9月*/
  16          (4 << 5) + 31,/*10月*/
  17          (0 << 5) + 30,/*11月*/
  18          (2 << 5) + 31 /*12月*/
  19          };
  20          
  21          /*------------------------------------------------------------------------------
              ----------
              2000年~2099年星期算法
              --------------------------------------------------------------------------------
              ---------*/
  26          unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d)
  27          {
  28   1      unsigned char week, day;
  29   1      day = WeekTab[m - 1]; /*月表*/
  30   1      week = day >> 5;/*月星期数*/
  31   1      day &= 0x1f;/*月天数*/
  32   1      if ((m < 3) && (y & 0x03)){/*平年*/
  33   2      if (m == 2) day--;/*平年月天数*/
  34   2      week++;/*平年月表+1*/
  35   2      }
  36   1      y = y + (y >> 2);/*年+年/4*/
  37   1      week = (week + y + d + 2) % 7;/*(星期=年+年/4+月表+2日)%7*/
  38   1      return (week << 5) | day;/*返回星期和月天数*/
  39   1      }
  40          
  41          /*------------------------------------------------------------------------------
              ----------
              0000年~9999年星期算法
              --------------------------------------------------------------------------------
              ---------*/
  46          unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m, 
  47          unsigned char d)
  48          {
  49   1      unsigned char week, day;
  50   1      c &= 0x03;/*百年%4*/
  51   1      c = c | (c << 2);/*百年%4*5*/ 
  52   1      day = WeekTab[m - 1];/*月表*/
  53   1      week = day >> 5;/*月星期数*/
  54   1      day &= 0x1f;/*月天数*/
  55   1      if ((m < 3) && !((c == 0) | (y & ((y & 0x03) == 0)))){/*平年*/
C51 COMPILER V3.20,  SN-0  SUANFA                                                          10/29/04  17:31:34  PAGE 2   

  56   2      if (m == 2) day--;/*平年月天数*/
  57   2      week++;/*平年月表+1*/
  58   2      }
  59   1      y = y + (y >> 2);/*年+年/4*/
  60   1      week = (week + c + y + d + 2) % 7;/*(星期=百年%4*5+年+年/4+月表+日+2)%7*/
  61   1      return (week << 5) | day;/*返回星期和月天数*/
  62   1      }
  63          
  64          unsigned char BcdToBin(unsigned char val)
  65          {
  66   1      val = (val >> 4) * 10 + (val & 0x0f);/*将BCD码转换为10进制数*/
  67   1      return val;/*返回10进制数*/
  68   1      }
  69          
  70          void main(void)
  71          {
  72   1      unsigned char c, y, m, d;
  73   1      unsigned char cx, yx, mx, dx; 
  74   1      unsigned char WDay, Week, Day;
  75   1      /*---------------------------------------------------------
              0001年1月1日 星期天
              ---------------------------------------------------------*/
  78   1      c = 0x01;
  79   1      y = 0x01;
  80   1      m = 0x01;
  81   1      d = 0x01;
  82   1      cx = BcdToBin(c);/*百年*/
  83   1      yx = BcdToBin(y);/*年*/
  84   1      mx = BcdToBin(m);/*月*/
  85   1      dx = BcdToBin(d);/*日*/
  86   1      WDay = WeekDay(cx, yx, mx, dx);/*取星期和月天数*/
  87   1      Week = WDay >> 5;/*得到星期*/
  88   1      Day = WDay & 0x1f;/*得到最大月天数*/
  89   1      /*---------------------------------------------------------
              1918年1月21日 星期一
              ---------------------------------------------------------*/
  92   1      c = 0x19;
  93   1      y = 0x18;
  94   1      m = 0x01;
  95   1      d = 0x21;
  96   1      cx = BcdToBin(c);/*百年*/
  97   1      yx = BcdToBin(y);/*年*/
  98   1      mx = BcdToBin(m);/*月*/
  99   1      dx = BcdToBin(d);/*日*/
 100   1      WDay = WeekDay(cx, yx, mx, dx);/*取星期和月天数*/
 101   1      Week = WDay >> 5;/*得到星期*/
 102   1      Day = WDay & 0x1f;/*得到最大月天数*/
 103   1      /*---------------------------------------------------------
              9999年12月31日 星期天
              ---------------------------------------------------------*/
 106   1      c = 0x00;
 107   1      y = 0x01;
 108   1      m = 0x01;
 109   1      d = 0x01;
 110   1      cx = BcdToBin(c);/*百年*/
 111   1      yx = BcdToBin(y);/*年*/
 112   1      mx = BcdToBin(m);/*月*/
 113   1      dx = BcdToBin(d);/*日*/
 114   1      WDay = WeekDay(cx, yx, mx, dx);/*取星期和月天数*/
 115   1      Week = WDay >> 5;/*得到星期*/
 116   1      Day = WDay & 0x1f;/*得到最大月天数*/
 117   1      /*---------------------------------------------------------
C51 COMPILER V3.20,  SN-0  SUANFA                                                          10/29/04  17:31:34  PAGE 3   

              2004年6月18日 星期五
              ---------------------------------------------------------*/
 120   1      c = 0x20;
 121   1      y = 0x04;
 122   1      m = 0x06;
 123   1      d = 0x18;
 124   1      cx = BcdToBin(c);/*百年*/
 125   1      yx = BcdToBin(y);/*年*/
 126   1      mx = BcdToBin(m);/*月*/
 127   1      dx = BcdToBin(d);/*日*/
 128   1      WDay = WeekDay20(yx, mx, dx);/*取星期和月天数*/
 129   1      Week = WDay >> 5;/*得到星期*/
 130   1      Day = WDay & 0x1f;/*得到最大月天数*/
 131   1      /*---------------------------------------------------------
              2018年3月8日 星期四
              ---------------------------------------------------------*/
 134   1      c = 0x20;
 135   1      y = 0x18;
 136   1      m = 0x03;
 137   1      d = 0x08;
 138   1      cx = BcdToBin(c);/*百年*/
 139   1      yx = BcdToBin(y);/*年*/
 140   1      mx = BcdToBin(m);/*月*/
 141   1      dx = BcdToBin(d);/*日*/
 142   1      WDay = WeekDay20(yx, mx, dx);/*取星期和月天数*/
 143   1      Week = WDay >> 5;/*得到星期*/
 144   1      Day = WDay & 0x1f;/*得到最大月天数*/
 145   1      while(1);
 146   1      }
 147          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    501    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      15
   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 + -