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

📄 lunar.lst

📁 51单片机项目集
💻 LST
📖 第 1 页 / 共 2 页
字号:
 202          0x06,0xAA,0x51, //2083
 203          0x0A,0xd5,0x46, //2084
 204          0x54,0xdA,0xBA, //2085
 205          0x04,0xB6,0x4e, //2086
 206          0x0A,0x57,0x43, //2087
 207          0x45,0x27,0x38, //2088
 208          0x0d,0x26,0x4A, //2089
 209          0x8e,0x93,0x3e, //2090
 210          0x0d,0x52,0x52, //2091
 211          0x0d,0xAA,0x47, //2092
 212          0x66,0xB5,0x3B, //2093
 213          0x05,0x6d,0x4f, //2094
 214          0x04,0xAe,0x45, //2095
 215          0x4A,0x4e,0xB9, //2096
 216          0x0A,0x4d,0x4C, //2097
 217          0x0d,0x15,0x41, //2098
 218          0x2d,0x92,0xB5, //2099
 219          0x0d,0x53,0x49, //2100
 220          };
 221          
 222          uchar code Mon1[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
 223                        0,31,29,31,30,31,30,31,31,30,31,30,31};
 224          
 225          
 226          
 227          SPDATE Spdate;
 228          //獲得當年春節的公曆日期
 229          SPDATE GetSpringDay(uchar GreYear,uchar GreMon,uchar GreDay)
 230          {
 231   1         //第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期
 232   1         //0x09,0x2d,0x47, //2008  0x47 01000111 
 233   1         int day;
 234   1          uchar i,Flag,F;
 235   1         uchar Offset1;
 236   1         unsigned char L=0x01,Flag1=1;
 237   1         unsigned int  Temp16,L1=0x0800;
 238   1      
 239   1         Spdate.cYear=GreYear ;
 240   1         Spdate.cMon=(Data[(200-(100-GreYear)-1)*3+2]&0x60)>>5; //春节公历月份
 241   1         Spdate.cDay=(Data[(200-(100-GreYear)-1)*3+2])&0x1f;    //春节公历日期
C51 COMPILER V8.02   LUNAR                                                                 11/03/2010 22:45:22 PAGE 5   

 242   1      
 243   1      
 244   1         if( (!(GreYear%4) && (GreYear%100)) || !(GreYear%400) ) Flag=1; else Flag=0;
 245   1         
 246   1         if(Spdate.cMon>GreMon)                       //春节离公历日期的天数
 247   1         {
 248   2            day=Mon1[Flag][GreMon]-GreDay;
 249   2            for(i=GreMon+1;i<=Spdate.cMon-1;i++)
 250   2               day+=Mon1[Flag][i];
 251   2            day+=Spdate.cDay;
 252   2            F=1;
 253   2         }
 254   1         else if(Spdate.cMon<GreMon) //春節的月份小於目標的月份
 255   1         {
 256   2            day=Mon1[Flag][Spdate.cMon]-Spdate.cDay;  
 257   2            for(i=Spdate.cMon+1;i<=GreMon-1;i++)
 258   2               day+=Mon1[Flag][i];
 259   2            day+=GreDay;
 260   2         // day=-day;
 261   2            F=0;
 262   2         }
 263   1         else
 264   1         {
 265   2            //if(Spdate.cDay!=GreDay) day=Spdate.cDay-GreDay; else day=0;
 266   2            if(Spdate.cDay>GreDay)
 267   2            {
 268   3               day=Spdate.cDay-GreDay;
 269   3               F=1;
 270   3            }
 271   2            else if(Spdate.cDay<GreDay)
 272   2            {
 273   3               day=GreDay-Spdate.cDay;
 274   3               F=0;
 275   3            }
 276   2            else day=0;
 277   2         }                 
 278   1      
 279   1         Spdate.cYear=Spdate.cYear;
 280   1         Spdate.cMon=1;
 281   1         Spdate.cDay=1;
 282   1      
 283   1         if(!day) return Spdate ;
 284   1      
 285   1         if(F)    //春节在公历日期后
 286   1         {
 287   2            Spdate.cYear--;
 288   2            Spdate.cMon=12;
 289   2            Offset1=(200-(100-Spdate.cYear)-1)*3;
 290   2            while(TRUE)
 291   2            {
 292   3               //格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小
 293   3               //第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小
 294   3               //0x4d,0x4A,0xB8, //2001
 295   3               if(Data[Offset1+1]&L) 
 296   3               day-=30;
 297   3               else
 298   3               day-=29;
 299   3               L<<=1;
 300   3               if(((Data[Offset1+0]&0xf0)>>4)==Spdate.cMon && Flag1) 
 301   3               {
 302   4                  Flag1=0;
 303   4                  if(Data[Offset1+2]&0x80) day-=30; else day-=29;
C51 COMPILER V8.02   LUNAR                                                                 11/03/2010 22:45:22 PAGE 6   

 304   4                  //day-=LYDay; 
 305   4                  //if(day<0) break;
 306   4                  continue;
 307   4               }
 308   3               if(day>0) Spdate.cMon--; else break;
 309   3               
 310   3               
 311   3            }
 312   2         // if(Flag) LunarDate.Month++;
 313   2            Spdate.cDay=-day+1;
 314   2         }
 315   1         
 316   1         if(!F)
 317   1         {
 318   2         // day=-day;
 319   2            //0x09,0x2d,0x47, //2008
 320   2            Spdate.cMon=1;
 321   2            Offset1=(200-(100-Spdate.cYear)-1)*3;
 322   2            Temp16=(Data[Offset1+0]<<8)+Data[Offset1+1];
 323   2            while(TRUE)
 324   2            {
 325   3               if(Temp16 & L1) day-=30; else day-=29;
 326   3               if(day>=0) 
 327   3                  Spdate.cMon++; 
 328   3               else if(day<0)
 329   3               {
 330   4                  if(Temp16 & L1) day+=30; else day+=29;
 331   4                  break;
 332   4               }
 333   3               L1>>=1;
 334   3               //格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小
 335   3               //第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小
 336   3               if(((Data[Offset1+0]&0xf0)>>4)==(Spdate.cMon-1) && Flag1) //闰月
 337   3               {
 338   4                  Flag1=0;
 339   4                  Spdate.cMon--;
 340   4                  if(Temp16 & L1) day-=30; else day-=29;
 341   4                  if(day>=0) 
 342   4                     Spdate.cMon++; 
 343   4                  else if(day<0)
 344   4                  {
 345   5                     if(Temp16 & L1) day+=30; else day+=29;
 346   5                     break;
 347   5                  }
 348   4                  L1>>1;
*** WARNING C275 IN LINE 348 OF LUNAR.C: expression with possibly no effect
 349   4               }
 350   3               //Temp16=
 351   3            }
 352   2            //LunarDate.Month--;
 353   2            Spdate.cDay=day+1;
 354   2         }
 355   1          return Spdate;
 356   1      }
 357          
 358          bit YearFlag(uchar cYear)
 359          {
 360   1         if( (!(cYear%4) && (cYear%100)) || !(cYear%400) ) return 1; else return 0;
 361   1      }
 362          
 363          //目標日期是星期幾
 364          uchar GetWeekDay(uchar cYear,uchar cMon,uchar cDay)
C51 COMPILER V8.02   LUNAR                                                                 11/03/2010 22:45:22 PAGE 7   

 365          {
 366   1         char i;
 367   1         int  Sum=0,tmpyear=2000+cYear;
 368   1         for(i=1;i<=cMon-1;i++)
 369   1            Sum+=Mon1[YearFlag(cYear)][i];
 370   1         Sum+=cDay-1;
 371   1         
 372   1         return (((tmpyear-1)+(tmpyear-1)/4-(tmpyear-1)/100+(tmpyear-1)/400+Sum)%7)+1;
 373   1      }
 374          
 375          
 376          
 377          /*****************************************************************************
 378          
 379          首先要能记住十大天干和十二地支,
 380          十天干:  甲、乙、丙、丁、戊、己、庚、辛、壬、癸;
 381          十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥;
 382           
 383          天干地支纪年法首先是天干在前,地支在后,比如今年2005就为-乙酉年,先来算算天干,
 384          有个公式: 
 385          4、 5、 6、 7、 8、 9、 0、 1、 2、 3 对应的十天干就是 
 386          甲、乙、丙、丁、戊、己、庚、辛、壬、癸, 
 387          数字为年代的最后的一位数字,比如今年是2005,最后一位是5,对应的天干就是乙; 
 388          
 389          地支的算法:用年代数除以12,后面的余数就代表某个地支,
 390          余数分别为:4、 5、 6、 7、 8、 9、 10、 11、 0(能整除)、1、 2、3.
 391          代表地支为:子、丑、寅、卯、辰、巳、午、 未、 申、酉、戌、亥.
 392          比如2005年为例:年代末尾数为5,对应的天干为乙,2005除以12,余数为1,对应的地支为酉,所以2005年为乙酉年。
 393          
 394          ******************************************************************************/ 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1065    ----
   CONSTANT SIZE    =    626    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -