• LED时钟|语音同步LED时钟农历计算代码(立显光电)


    深圳市立显电子有限公司,专业LED时钟生产厂家!--------【点击进入】

    LED时钟|语音同步LED时钟农历计算代码由深圳市立显光电有限公司技术部提供,欢迎指正,谢谢!

     立显光电项目负责人:徐飞

    联系电话:13927460644  0796-7203100(23线)

    立显光电  项目负责人:徐飞  13927460644  0796-7203100(23线)

    void Lunar_Calculation(void){
     unsigned char  temp1,temp2,temp3,month_p;
        unsigned int temp4,table_addr;
     unsigned char flag2,flag_y;
     unsigned char year=time_buf[1];//阳历年
     unsigned char month=time_buf[2];//阳历月
     unsigned char day=time_buf[3];//阳历日
        temp1=year/16;//BCD->hex  将阳历数据转化成十进制
        temp2=year%16;
        year=temp1*10+temp2;
        temp1=month/16;
        temp2=month%16;
        month=temp1*10+temp2;
        temp1=day/16;
        temp2=day%16;
        day=temp1*10+temp2; 
     //固定为21世纪
     table_addr=(year+0x64-1)*0x3;
     //取当年春节所在的公历月份
        temp1=year_code[table_addr+2]&0x60;
        temp1=temp1>>5;
     //取当年春节所在的公历日
        temp2=year_code[table_addr+2]&0x1f;
     //计算当年春节离元旦的天数
        if(temp1==0x01){ 
            temp3=temp2-1; 
        }else{
            temp3=temp2+0x1f-1;       
        }
     //计算公历日离元旦的天数
     if (month<10){
            temp4=day_code1[month-1]+day-1;
        }else{
            temp4=day_code2[month-10]+day-1;
        }
        if ((month>0x02)&&(year%0x04==0)){  //公历日大于2月并且当年的2月为闰月
            temp4+=1;
        }
     //判断公历日在春节前还是春节后
     if(temp4>=temp3){//公历日在春节后或是当日
      temp4-=temp3;
      month=0x01;
      month_p=0x01;//month_p为月份指向,公历日在春节前或是春节当日month_p指向首月
      flag2=get_moon_day(month_p,table_addr);//检查农历月为大月还是小月
      flag_y=0;
      if(flag2==0){
        temp1=0x1d;//小月29天
      }else{
        temp1=0x1e;//大小30天
      }
      temp2=year_code[table_addr]&0xf0;
      temp2=temp2>>4;//从数据表中取该年的闰月份
      while(temp4>=temp1){
        temp4-=temp1;
       month_p+=1;
       if(month==temp2){
        flag_y=~flag_y;
        if(flag_y==0){
          month+=1;
        }
       }else{
         month+=1;
       }
       flag2=get_moon_day(month_p,table_addr);
       if(flag2==0){
         temp1=0x1d;
       }else{
         temp1=0x1e;
       }
      }
      day=temp4+1;
     }else{
      //公历日在春节前
      temp3-=temp4;
      if(year==0x00){
        year=0x63;
      }else{
       year-=1;
      }
      table_addr-=0x03;
      month=0x0c;
      temp2=year_code[table_addr]&0xf0;
      temp2=temp2>>4;
      if(temp2==0){
        month_p=0x0c;
      }else{
        month_p=0x0d;
      }
      flag_y=0;
      flag2=get_moon_day(month_p,table_addr);
      if(flag2==0){
        temp1=0x1d;
      }else{
        temp1=0x1e;
      }
      while(temp3>temp1){
       temp3-=temp1;
       month_p-=1;
       if(flag_y==0){
         month-=1;
       }
       if(month==temp2){
         flag_y=~flag_y;
       }
       flag2=get_moon_day(month_p,table_addr);
       if(flag2==0){
         temp1=0x1d;
       }else{
         temp1=0x1e;
       }
      }
      day=temp1-temp3+1;
     }
     //将数据加入到NUM中
     Num[0]=month/10;
     Num[1]=month%10;
     Num[2]=day/10;
     Num[3]=day%10;
    }

  • 相关阅读:
    Linux 守护进程创建
    Linux 进程
    静态库与动态库的制作
    目录文件的操作函数 mkdir ,opendir,readdir,closedir
    获取文件或目录的属性 stat 函数
    文件IO 例子
    文件 IO
    标准 IO fread 与 fwrite 的使用(可以实现二进制流的读写)
    bzoj 2716: [Violet 3]天使玩偶
    cf1175 DE
  • 原文地址:https://www.cnblogs.com/parserval/p/6718051.html
Copyright © 2020-2023  润新知