51单片机农历转换公历c语言算法,51单片机阳历转农历(仅仅是阳历转阴历例程)...

本文介绍了一个使用C语言在51单片机上实现的阳历到农历转换的算法,通过递归调用来减少代码大小。代码中包含了公历和农历之间的转换函数,以及农历数据的存储结构,适用于2000年至2099年的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本帖最后由 ac9979 于 2019-11-5 22:09 编辑

前段时间用STC15L104W改了一个时钟,增加了农历显示功能,参照了你的程序,但是文件大小超出了范围,只好想办法精简程序,发现如果农历年和阳历不是同一年,可以递归调用本函数 GetSpringDay(GreYear+1, GreMon+12, GreDay),代码会少30%,这个判断就不需要了:  if(F)    //春节在公历日期后{ ……} 。

具体代码如下:

typedef unsigned int u16;  //16位无符号整型数

typedef unsigned char u8;  //8位无符号整型数

u8 dn(u8 yy,u8 mm,u8 dd);                                   //公历转农历函数

u8 temp;

u8 NonY=0;                                                     //农历年

u8 NonM=0;                                                     //农历月

u8 NonD=0;                                                     //农历日

u16 nday[]={0,31,59,90,120,151,181,212,243,273,304,334,365,396};     //第n-1月有多少天

//公历年对应的农历数据,每年三字节,

//格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小

//第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小

//月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天).

//第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期

u8 code Data[]={

0x0C,0x96,0x45, //2000

0x4d,0x4A,0xB8, //2001

0x0d,0x4A,0x4C, //2002

0x0d,0xA5,0x41, //2003

0x25,0xAA,0xB6, //2004

0x05,0x6A,0x49, //2005

0x7A,0xAd,0xBd, //2006

0x02,0x5d,0x52, //2007

0x09,0x2d,0x47, //2008

0x5C,0x95,0xBA, //2009

0x0A,0x95,0x4e, //2010</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值