专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
战舰STM32做的万年历(有图有程序)串口2(PA2 PA3)用于调整时间
2019-07-21 08:15
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
10239
43
1322
闲话不说了,直接上图,注意,串口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:
---------------------------------
有才啊,界面很简洁。
加载中...
上一页
1
2
3
4
5
6
7
8
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
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;
}
---------------------------------
楼主可以将附件1删除了
详细见图片,编辑完之后点击发送按钮即可,谢谢
---------------------------------
有才啊,界面很简洁。
一周热门 更多>