码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-04-16 11:04:47      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:lun   语音   0x03   mp3   img   ati   blog   时钟   .com   

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

 

技术分享

技术分享

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;
}

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

标签:lun   语音   0x03   mp3   img   ati   blog   时钟   .com   

原文地址:http://www.cnblogs.com/parserval/p/6718051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!