跪求个利用51单片机1602显示屏DS1302做的万年历c编程序,带有公历,农历,星期,时间功能,一定要有农历

跪求个利用51单片机1602显示屏DS1302做的万年历c编程序,带有公历,农历,星期,时间功能,一定要有农历,第1张

农历计算方式,

///月份数据表

code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3}

code uint day_code2[3]={0x111,0x130,0x14e}

/*

函数功能:输入BCD阳历数据,输出BCD阴历数据隐段(只允许1901-2099年)

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16)

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世盯携或

纪,c_sun=1为19世纪

调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据

*/

bit c_moon

data uchar year_moon,month_moon,day_moon,week

/*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/

bit get_moon_day(uchar month_p,uint table_addr)

{

uchar temp

switch (month_p)

{

case 1:{temp=year_code[table_addr]&0x08

if (temp==0)return(0)else return(1)}

case 2:{temp=year_code[table_addr]&0x04凯伍

if (temp==0)return(0)else return(1)}

case 3:{temp=year_code[table_addr]&0x02

if (temp==0)return(0)else return(1)}

case 4:{temp=year_code[table_addr]&0x01

if (temp==0)return(0)else return(1)}

case 5:{temp=year_code[table_addr+1]&0x80

if (temp==0) return(0)else return(1)}

case 6:{temp=year_code[table_addr+1]&0x40

if (temp==0)return(0)else return(1)}

case 7:{temp=year_code[table_addr+1]&0x20

if (temp==0)return(0)else return(1)}

case 8:{temp=year_code[table_addr+1]&0x10

if (temp==0)return(0)else return(1)}

case 9:{temp=year_code[table_addr+1]&0x08

if (temp==0)return(0)else return(1)}

case 10:{temp=year_code[table_addr+1]&0x04

if (temp==0)return(0)else return(1)}

case 11:{temp=year_code[table_addr+1]&0x02

if (temp==0)return(0)else return(1)}

case 12:{temp=year_code[table_addr+1]&0x01

if (temp==0)return(0)else return(1)}

case 13:{temp=year_code[table_addr+2]&0x80

if (temp==0)return(0)else return(1)}

}

}

/*

函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年)

调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16)

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世

纪,c_sun=1为19世纪

调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据

*/

void Conversion(bit c,uchar year,uchar month,uchar day)

{ //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据

uchar temp1,temp2,temp3,month_p

uint temp4,table_addr

bit flag2,flag_y

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

//定位数据表地址

if(c==0)

{

table_addr=(year+0x64-1)*0x3

}

else

{

table_addr=(year-1)*0x3

}

//定位数据表地址完成

//取当年春节所在的公历月份

temp1=year_code[table_addr+2]&0x60

temp1=_cror_(temp1,5)

//取当年春节所在的公历月份完成

//取当年春节所在的公历日

temp2=year_code[table_addr+2]&0x1f

//取当年春节所在的公历日完成

// 计算当年春年离当年元旦的天数,春节只会在公历1月或2月

if(temp1==0x1)

{

temp3=temp2-1

}

else

{

temp3=temp2+0x1f-1

}

// 计算当年春年离当年元旦的天数完成

//计算公历日离当年元旦的天数,为了减少运算,用了两个表

//day_code1[9],day_code2[3]

//如果公历月在九月或前,天数会少于0xff,用表day_code1[9],

//在九月后,天数大于0xff,用表day_code2[3]

//如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1

//如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1

if (month<10)

{

temp4=day_code1[month-1]+day-1

}

else

{

temp4=day_code2[month-10]+day-1

}

if ((month>0x2)&&(year%0x4==0))

{ //如果公历月大于2月并且该年的2月为闰月,天数加1

temp4+=1

}

//计算公历日离当年元旦的天数完成

//判断公历日在春节前还是春节后

if (temp4>=temp3)

{ //公历日在春节后或就是春节当日使用下面代码进行运算

temp4-=temp3

month=0x1

month_p=0x1//month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月

flag2=get_moon_day(month_p,table_addr)

//检查该农历月为大小还是小月,大月返回1,小月返回0

flag_y=0

if(flag2==0)temp1=0x1d//小月29天

else temp1=0x1e//大小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=get_moon_day(month_p,table_addr)

if(flag2==0)temp1=0x1d

else temp1=0x1e

}

day=temp4+1

}

else

{ //公历日在春节前使用下面代码进行运算

temp3-=temp4

if (year==0x0)

{

year=0x63c=1

}

else year-=1

table_addr-=0x3

month=0xc

temp2=year_code[table_addr]&0xf0

temp2=_cror_(temp2,4)

if (temp2==0)

month_p=0xc

else

month_p=0xd//

/*month_p为月份指向,如果当年有闰月,一年有十三个月,月指向13,无闰月指向12*/

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

}

c_moon=c//HEX->BCD ,运算结束后,把数据转换为BCD数据

temp1=year/10

temp1=_crol_(temp1,4)

temp2=year%10

year_moon=temp1|temp2

temp1=month/10

temp1=_crol_(temp1,4)

temp2=month%10

month_moon=temp1|temp2

temp1=day/10

temp1=_crol_(temp1,4)

temp2=day%10

day_moon=temp1|temp2

}

/*************************************************************************

/*函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年)

调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun)

如:计算2004年10月16日Conversion(0,0x4,0x10,0x16)

c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世

纪,c_sun=1为19世纪

调用函数后,原有数据不变,读week得出阴历BCD数据

*/

code uchar table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}//月修正数据表

/*

算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在

闰年又不到3 月份上述之和要减一天再除7

星期数为0

*/

void Conver_week(bit c,uchar year,uchar month,uchar day)

{//c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据

uchar temp1,temp2

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

if (c==0){year+=0x64} //如果为21世纪,年份数加100

temp1=year/0x4//所过闰年数只算1900年之后的

temp2=year+temp1

temp2=temp2%0x7//为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据

temp2=temp2+day+table_week[month-1]

if (year%0x4==0&&month<3)temp2-=1

week=temp2%0x7

}

农历新历怎么计算? 你说的新历即公历,也称阳历。是以地球绕太阳一周的时间定为一年,共365天零5小时多近6小时,平年只算365天。那多出的5小时多近6小时,平均约每隔4年加一天到2月份,所以有时公历的2月就有29天。

而你说的农历即阴历,也称夏历。以月亮圆缺一次的时间为一个月,每月29天半。一年约为355天,大月30天,小月29天。由于农历一年的天数与地球年(公历)相差约11日左右,所以约每3年要置一闰月,每19年要置7个闰月,使得平均每年的天数跟地球年(公历)全年的天数相接近,来调整四季。具体闰哪个月,则要视节气情况灵活而定,如今年便是闰5月。

正由于公历和农历的计算方法不同使每年的天数不同,而每年的第一天的起始时间也不同,所以使公历和农历的月份和日期不同步,大致相差一个月左右。

因为农历是我国历史上一直采用的历法,所以我国绝大多数的地方都是以出身时的农历来确定人的生日,这也是一种民族习惯。

但由于公历计时准确且方便,因此世界上大多数国家都采用公圆扮历,我国也早在辛亥革命后的1912年正式采用公历。所以在正式的场合出身年月都是用公历,如身份z、档案记录、履历表等等。

你会查万年历,了解了以上的情况后就容易懂了。再告诉你一个很简单的方法看万年历,一般在上面用 *** 数字标示的是公历的日期,在 *** 数字下面用中文数字标瞎贺示的就是农历的日期。

如你说的1991年4月7日出生的:

1、如果这是公历的日期,那万年历上对应的 *** 数字4月7日下面的中文数字二月二十三就是你农历的生日。

2、如果这是农历的日期,那万年历上对应的中文数字四月初七上面的 *** 数字5月20日就是你公历的生日。

生日农历新历怎么算啊? 这个要看你们那边的风俗习惯了。一般城市里的生日按你当年出生的阳历日期算,也就是说你的生日是8月9日。而一般农村会按阴历算,你功生日便成了每年的农历7月14日。这两个日期,一般选一个过生日,当然,也有极品的两个生日都过。最后,提前祝你生日快乐!

农历与阳历如何计算 阴历阳历转换计算公式

1、阳历日期推算阴历日期的方法:

前已述及阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。

如要知道1984年6月8日是阴历几日?可以利用公式推算阴历日期: 设:公元年数-1977(或1901)=4Q+R

则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n (注:式中Q、R、n均为自然数,R>

怎么算农历和阳历啊 10分 阳历日期推算阴历日期的方法:前已述及阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。然而目前记时通常用阳历日期表达,如欲将阳历日期换算成阴历日期可以用以下两种方法:其一是查《新编万年历》,如查1984年6月8日是阴历几日?翻开万年历6月10日是阴历十一,则逆推6月8日是阴历初九。其二可以利用公式推算阴历日期:

设:公元年数-1977(或1901)=4Q+R

则:阴历日期=14Q+10.6(R+1)+年内日期橘神灶序数-29.5n

(注:式中Q、R、n均为自然数,R 阴历和阳历与公历和农历有什么关系,时间上是怎么算的? 简单来说:阳历是按太阳算的,地球绕太阳一圈是365天六小时,农历(阴历)就是月亮了,(如:每个月十五月亮都是圆的)绕太阳一周是355天,农历一般比阳历慢一个月左右,由于农历每年比阳历少了约十天,所以农历走的快,这样的话一年快十天,十年就是一百天了,为了达到阴阳历平衡,所以嘛农历就会隔几年出现一个闰月,就这样每六十年,太阳月亮地球就会回到原来的起点,干支计年称一个“甲子”所以每隔六十年,农历和阳历就又对上号了,其实万年历只要有六十年就够了。

阳历阴历公历农历怎么分的 只是我们现在的叫法不同。公历=阳历 农历=阴历

农历和公历是怎么转换的?(怎么算的?) 你是要口算还是要用笔算?

告诉你,这样子算不靠谱的,根本算不出来,涉及到的转换不是简单的几个公式能得出,相反,它的转换相当复杂。

如果有兴趣编写程序的,我可以提供转换函数库,调用一个函数就可以实现农历与公历的互转了。

目前我已经完美地实现了转换,如果需要,我可以提供。

公历算旧历还是新历 阳历 也就是公历 也就是新历

1月20日-2月18日

守护星:天王星 (象征智慧及变数)

传统守护星:土星(象征考验及规则)

诞生石:紫水晶

属性:风相星座

吉祥物:竖琴螺

吉祥金属:铂或镭

水瓶侍者甘尼美德吉祥数字:4、13、22、31

吉祥日:星期三

掌管宫位:第十一宫

守护神:乌拉诺斯 雅典娜

正面特质:独立 冷静 神秘

特质:冷酷 不合群 孤僻 不稳定 无法捉摸 反叛

三方态:固定

最大特征:求知

关键词:心灵交流

水瓶座精美壁纸代表号:星期六

掌管身体:小腿、循环系统、踝部

颜色:古铜色

开运运动:瑜珈

开运力量:参加科技展

破运死穴:缺乏自我

人生乐事:花样、原创

人生痛苦:缺乏心灵自由

不利条件:漫不经心。

探究:人和事物的内在联系。

弱点:性格充满矛盾。

有缘份的星座:天秤座、双子座

没缘份的星座:巨蟹座

特色:自由、平等、博爱

理想的工作:原创家、计算机、科学研究者及各个行业的尖端领域

喜欢的场所:摄影棚、照相馆、电影院、广播电台、摩天大楼、塔式建筑、收音机场、会议室

约会场所:各式展览场合,天文台,咖啡店,自由交谈的派对,高科技主题乐园等

十二星座中仅有的两个没有生命象徵的星座之一(另一个是天秤座)

这个星座常被称为天才星座或未来星座!是近神星座之一。代表神的思想。

{星座物语}

珠宝:雪花石、珍珠

金属:银

号码:4、13、22、31

日期:星期三

色:紫色、亮色、白色

花朵:樱花草、洋水仙

物品:香水、精致脚链

季节:冬季

场所:科技博物馆

恋爱地:冷饮店

痣:发际、手腕、脚跟

冬天生辰在水瓶座的人,内心像寒冬一样冰冷。是神秘主义者。有天生的理性了解人类内心的本性,同时拥有高度的容忍力,富于研究精神,喜爱一切新颖的东西,能接受新的发现。具有好的观察能力及建立理论的能力,常常造成天才人物、发明家、科学家或成为一位精明的人类行为研究者。但为达目标,不会走暴力极端的方法,会赞成举行公民自决,具有温和的态度。

本质上喜欢孤独的水瓶座,在他的性格上,隐藏着保守的一面。水瓶座的人顽固得不容易改变自己的意见或主张,但另一方面却又极端讨厌和别人争执及暴力。有时在快要跟别人起正面冲突时,他会装做完全不知道有笸对声音的样子,而按自己想做的去做。

水瓶的性格其实是12个星座中最难测的一个,这样说的原因是因为连水瓶自己都经常不明白自己。崇尚自由的水瓶座人,外表上呈现冷漠与热情的交变型态。你不会觉得他是个冷漠的人,也不会认定他是个热情的人,总是感到他的天真与世故不断地交错运作。这完全肇因于他的保守性格。你很不容易见到一只瓶子把自己摔碎,不过一旦你见到了,要相信,他是真的想一碎了之。别企图拼凑他,只能期待碎瓶片浴火重生。以保守性格追求自由、开放与前进,陷水瓶座于温情主义的泥沼中,易如反掌。但也因着内、外的背道而驰,使得他对自我和世界的反省能力,与日俱增。

水瓶是精神性的动物,是12个星座性格中最重视精神的,所以对物质的欲望较低。水瓶座的人,不愿意受感情上的丝毫束缚。你时而异想天开,幽默过人,时而又冷若冰霜,令人费解,这常常是一个不易相处的人。有优秀的推理力和创造力,客观、冷静,善于思考,思想博爱,讲求科学、逻辑和概念,价值观很强。是一个对超能力、超自然现象会积极证明,忠于自己信念,又令人难以捉摸的星座。

水瓶座的人善于重新组织所有人的......>>

农历公历怎么算 这个要看你们那边的风俗习惯了。一般城市里的生日按你当年出生的阳历日期算,也就是说你的生日是8月9日。而一般农村会按阴历算,你的生日便成了每年的农历7月14日。这两个日期,一般选一个过生日,当然,也有极品的两个生日都过。最后,提前祝你生日快乐!

农历怎么计算日子的 农历是古时候按太阳得运行总结出来得一套计算日子得方法。

一般得每四年都会有一个闰年,就是每四年就会多一天。

关于农历的知识

农历(夏历,殷历,古历,黄历,旧历)

农历,是把朔望月的时间作为历月的平均时间。这一点上和纯粹的阴历相同,但农历运用了设置闰月的办法和二十四节气的办法,使历年的平均长度等于回归年,这样它就又具有了阳历的成分,所以它比纯粹的阴历好。

现在所有的农历,据说我们的祖先远在夏代(公元前17世纪以前)就使用了这种历法。所以人们又称它为夏历。解放后还仍然叫做夏历,1970年以后我国改称为农历。至于农历一名的由来,大概因为由于自古以农立国,所以制订历法必须为农业服务。

农历的历月是以朔望月为依据的。朔望月的时间是29日12小时44分3秒(即29.5366日),因此农历也是大月30天,小月29天,但它和纯粹的阴历并不完全一样,因为纯粹的阴历是大小月交替编排的,而农历年大小月是经过推算决定的。

农历每一个月初一都正好是朔(即月亮在太阳地球中间,且以黑着的半面对着地球的时候)。有时可能出现两个大月,也可以连续出现两个小月。由于朔望月稍大于29天半,所以在农历的每100个历月里约有53个大月和47个小月。

农历是基本上以12个月作为一年的,但12个朔望月的时间是354.3667日,和回归年比起来要相差11天左右。这样每隔3年就要多出33天,即多出一个多月。

为了要把多余的日数消除,每隔3年就要加一个月,这就是农历的闰月。有闰月的一年也叫闰年。所以农历的闰年就有13个月了。至于闰哪个月是由节气情况决定的。

农历作为阴阳历的一种,每月的天数依照月亏而定,一年的时间以12个月为基准;为了合上地球围绕太阳运行周期即回归年,每隔2到3年,增加一个月,增加的这个月为闰月,因此农历的闰年为13个月。

农历没有第十三月的称谓,闰月按照历法规则,排放在从二月到十月的过后重复同一个月,重复的这个月为闰月,如四月过后的闰月称为闰四月。

农历闰年闰月的推算,3年一闰,5年二闰,19年七闰;农历基本上19年为一周期对应于公历同一时间。如公历的2001年5月27日、1982年5月27日和1963年5月27日这个日子,都是闰四月初五。

闰月加到哪个月,以农历历法规则推断,主要依照与农历的二十四节气相符合来确定;

农历的闰月天数与正常月份天数一样,为29或30天。

农历所谓“闰”的说法,只有闰年和闰月称谓,公历也有闰年的称谓。

农历月份的别称

一月:正月、隅月、孟月、端月、始春、元春;

二月:如月、杏月、仲春、早春;

三月:病月、桃月、季春、炳月、三春、阳春、暮春;

四月:余月、清和月、桃月、孟夏;

五月:榴月、薄月、仲夏;

六月:且月、荷月、伏月、季夏;

七月:相月、巧月、霜月、孟秋、桐月;

八月:壮月、桂月、仲秋、中秋月:

九月:亥月、菊月、季秋;

十月:阳月、小阳春、孟冬;

十一月:辜月、葭月、仲冬;

十二月:涂月、腊月、嘉平月,季冬。

农历的一个月的前十天按顺序习惯上称为初日,如农历的一月二日称为正月初二,当然说1月2日也是对的。

农历的正月(一年的第一个月)的开始都是在公元纪年的1月20日后至2月底之前。如农历的正月初一可能是1月21日,也可能是2月20日;反之,农历一年的最后一天也是公元纪年的1月20日至2月底前。

农历大小月卦口诀

一年上下两卦编,一七两月初爻安。

阴大阳我上卦,遇有闰月年十......>>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12421196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存