zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    ThinkPHP教程_PHP框架之ThinkPHP(三)【系统常量与模板替换】
    ThinkPHP教程_PHP框架之ThinkPHP(二)【URL路径访问与模块控制器、URL四种模式、PATHINFO的两种模式、模板与控制器之间的关系】
    ThinkPHP教程_PHP框架之ThinkPHP(一)【入门和介绍、ThinkPHP版本和文件夹规范、项目入口文件】
    Markdown,技术简历编辑的一缕清风...
    Zend Studio 13.5的安装、破解和汉化
    原生JS配合AJAX完成省市县三级联动(带数据库、PHP+Smarty)
    DAL与数据库类型的对应关系
    mysql 学习
    关于MySQL的分区(partion)
    Response.Write,Page.RegisterClientScriptBlock和Page.RegisterStartupScript的区别
  • 原文地址:https://www.cnblogs.com/parserval/p/6718051.html
Copyright © 2011-2022 走看看