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

📄 lunar.lst

📁 12864液晶显示万年历的51单片机仿真和程序 程序是C语言写的。仿真用的proteus
💻 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.08   LUNAR                                                                 07/29/2008 20:05:46 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.08   LUNAR                                                                 07/29/2008 20:05:46 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.08   LUNAR                                                                 07/29/2008 20:05:46 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 + -