战舰STM32做的万年历(有图有程序)串口2(PA2 PA3)用于调整时间

2019-07-21 08:15发布

闲话不说了,直接上图,注意,串口2(PA2 PA3)用于调整时间,压缩包内有串口更新时间的工具。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
43条回答
王军强
1楼-- · 2019-07-22 09:23
//公历转农历函数
void Conversion(u8 c,u8 year,u8 month,u8 day)
{                         
    u8 temp1,temp2,temp3,month_p;
    uint temp4,table_addr;
    u8 flag2,flag_y;
//定位数据表地址
    if(c==0) { table_addr=(year+100-1)*3; }
     else { table_addr=(year-1)*3;     }
//取当年春节所在的公历月份
temp1=year_code[table_addr+2]&0x60; 
    temp1=_cror_(temp1,5);
//取当年春节所在的公历日
temp2=year_code[table_addr+2]&0x1f; 
    if(temp1==0x1)  { temp3=temp2-1; }  
     else   { temp3=temp2+31-1; }
    if(month<10) { temp4=day_code1[month-1]+day-1; }
     else      { temp4=day_code2[month-10]+day-1;}
    if ((month>2)&&(year%4==0)&&(year!=0))
       temp4+=1; //如果公历月大于2月并且该年的2月为闰月,天数加1
    if (temp4>=temp3)//元旦在春节以前或元旦就是春节
    { 
        temp4-=temp3; month=1;
        month_p=1;  //month_p为月份指向,元旦在春节前或就是春节当日month_p指向首月
        flag2=GetMoonDay(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
        flag_y=0;
        if(flag2==0)temp1=29;    //小月29天
         else    temp1=30;    //大小30天
        temp2=year_code[table_addr]&0xf0;
        temp2=_cror_(temp2,4);  //从数据表中取该年的闰月月份,如为0则该年无闰月
        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=GetMoonDay(month_p,table_addr);
            if(flag2==0)temp1=29;
             else    temp1=30;
        }
        day=temp4+1;
    }
    else //元旦在春节以后
    {  
        temp3-=temp4;
        if (year==0){year=99;c=1;}
         else    year-=1;
        table_addr-=3;
        month=12;
        temp2=year_code[table_addr]&0xf0;
        temp2=_cror_(temp2,4);
        if (temp2==0)month_p=12; 
         else     month_p=13; 
        flag_y=0;
        flag2=GetMoonDay(month_p,table_addr);
        if(flag2==0)temp1=29;
         else    temp1=30;
        while(temp3>temp1)
        {
            temp3-=temp1;
            month_p-=1;
            if(flag_y==0)month-=1;
            if(month==temp2)flag_y=~flag_y;
            flag2=GetMoonDay(month_p,table_addr);
            if(flag2==0)temp1=29;
             else    temp1=30;
        }
        day=temp1-temp3+1;
    }
    c_moon=c;
    year_moon=year;
    month_moon=month;
    day_moon=day;
}
八度空间
2楼-- · 2019-07-22 11:16
回复【2楼】bodysuit:
---------------------------------
楼主可以将附件1删除了

详细见图片,编辑完之后点击发送按钮即可,谢谢




正点原子
3楼-- · 2019-07-22 17:01
 精彩回答 2  元偷偷看……
青苹果PAD
4楼-- · 2019-07-22 19:10
楼主好厉害啊
黑夜之狼
5楼-- · 2019-07-22 20:44
顶!!!
xiaoyan
6楼-- · 2019-07-23 00:52
回复【楼主位】bodysuit:
---------------------------------
有才啊,界面很简洁。

一周热门 更多>