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

📄 week.lst

📁 LED照明行业地砖及护栏控制器程序 从现况来看
💻 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 + -