用51 单片机实现公历与农历星期的转换程序Word文档格式.docx
- 文档编号:17192504
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:13
- 大小:20.43KB
用51 单片机实现公历与农历星期的转换程序Word文档格式.docx
《用51 单片机实现公历与农历星期的转换程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《用51 单片机实现公历与农历星期的转换程序Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
temp_Byte2DATA38h
temp_Byte3DATA39h
temp_Byte4DATA3Ah
temp_Byte5DATA3Bh
time_weekDATA40h;
星期天出口
以下为公历转农历子程序
CONvert:
MOVA,time_year;
将年月日转化为HEX格式
MOVB,#16
DIVAB
MOVCONvert_yeAr,B
MOVB,#10
MULAB
ADDA,CONvert_yeAr
MOVCONvert_yeAr,A
MOVA,time_month
MOVC,ACC.7
MOVf0,C;
f0暂存世纪标志,仅用于数据表定位
CLRACC.7
JNBACC.4,CON_02
-4-
CLRACC.4;
ACC.4为1表示大于10月
ADDA,#10
CON_02:
MOVCONvert_mONth,A
MOVA,time_date
MOVCONvert_dAte,B
ADDA,CONvert_dAte
MOVCONvert_dAte,A
MOVdptr,#mONth_dAtA;
以下定位本年数据在表格中的位置
MOVA,CONvert_yeAr
JBf0,CON_06;
当前为19世纪年跳转
ADDA,#100;
从19世纪起定义表格起始年,20世纪要加100年
CON_06:
CLRC
SUBBA,#stArt_yeAr
MOVB,#3;
表格每年3字节
ADDA,dpl
MOVdpl,A
MOVA,B
ADDCA,dph
MOVdph,A
MOVA,#2
MOVCA,@A+dptr;
读本年表格最后一字节(春节日期)
CLRACC.7;
ACC.7是闰年第13个月大小,在此不用
MOVB,#32
MOVtemp_Byte1,A;
春节月份
MOVtemp_Byte2,B;
春节日
以下计算当前日期距元旦天数
MOVtemp_Byte3,#0;
设距元旦天数高位为0
MOVA,CONvert_mONth
CJNEA,#10,CON_08
CON_08:
JCCON_09;
9月以前日子数小于256天,高字节为0(9月份过去的整月为8个月)
MOVtemp_Byte3,#1
CON_09:
MOVA,CONvert_yeAr
ANLA,#03h;
ACC为除4的余数
JNZCON_10;
转常年处理
年除4余数为0是闰年
-5-
LCALLget_ruN_dAys_lOw;
取得闰年过去月的天数的低字节
SJMPCON_12
CON_10:
MOVA,CONvert_mONth
LCALLget_dAys_lOw;
取得常年过去月的天数的低字节
CON_12:
MOVB,CONvert_dAte
DECB;
因为日期从1日起,而不是0日起
ADDA,B;
过去的整月天数加当月天数
MOVtemp_Byte4,A
JNCCON_14
INCtemp_Byte3;
temp_Byte3,temp_Byte4分别为公历年过去的天数的高低字节
以下求春节距元旦天数,因肯定小于256天所以只用一字节表示
CON_14:
MOVA,temp_Byte1
春节不会在3月份,不用考虑闰年
DECA;
因为日期从1日起
ADDA,temp_Byte2
MOVtemp_Byte5,A;
temp_Byte5,为春节距元旦天数
CJNEA,temp_Byte1,CON_20;
转换月与春节月比较
MOVA,CONvert_dAte
CJNEA,temp_Byte2,CON_20;
转换日与春节日比较
CON_20:
JCCON_22
LJMPCON_60;
当前日大于等于春节日期,公历年与农历年同年份
CON_22:
MOVA,CONvert_yeAr;
不到春节,农历年比公历年低一年
JNZCON_24
MOVA,#100;
年有效数0-99
CON_24:
DECA
MOVA,dpl
CLRC
SUBBA,#3
JNCCON_26
DECdph;
表格指针指向上一年
CON_26:
MOVA,temp_Byte5
SUBBA,temp_Byte4
MOVtemp_Byte3,A;
temp_Byte3中为当前日离春节的天数
MOVCONvert_mONth,#12;
农历月为12月
CLRf0;
1901-2099年没有闰12月,清闰月标志
CLRA
MOVCA,@A+dptr
-6-
ANLA,#0f0h
SWAPA;
MOVtemp_Byte4,A;
temp_Byte4中为闰月
JZCON_30;
没有闰月转移
MOVA,#2;
有闰月,取第13个月天数
MOVA,#1
RLCA;
ACC中为最后6个月的大小值
SJMPCON_34
CON_30:
MOVA,#1
CON_34:
MOVtemp_Byte5,A
CON_40:
RRCA
MOVtemp_Byte5,A
JCCON_42
MOVB,#29;
小月29天
SJMPCON_44
CON_42:
MOVB,#30;
大月30天
CON_44:
MOVA,temp_Byte3
SUBBA,B
JZCON_46;
正好够减,就是农历日1日
JNCCON_50
不够减一月天数,结束农历月调整
CPLA;
求补取绝对值
INCA
CON_46:
INCA;
加1即为农历日
MOVB,#10;
转换并保存农历日,月,年
SWAPA
ORLA,B
MOVC,f0
MOVACC.7,C
MOVCONvert_mONth,A
-7-
RET;
结束转换
CON_50:
MOVtemp_Byte3,A;
temp_Byte3存减去一月后的天数
JBf0,CON_52;
是闰月,前推一月,月份不减
DECCONvert_mONth;
CON_52:
CJNEA,temp_Byte4,CON_54
CPLf0;
当前月与闰月相同,更改闰月标志
CON_54:
SJMPCON_40
CON_60:
MOVA,temp_Byte4;
春节日小于当前日,农历年同公历年
SUBBA,temp_Byte5
JNCCON_62
DECtemp_Byte3;
temp_Byte3temp_Byte4中为公历日离春节的天数
CON_62:
MOVCONvert_mONth,#1;
农历月为1月
XCHA,temp_Byte5;
temp_Byte5中为闰月,ACC为当年农历表第一字节
第一个月肯定不是闰月
ANLA,#0fh
MOVtemp_Byte1,A
MOVtemp_Byte2,A
ORLA,temp_Byte1
MOVA,temp_Byte2
-8-
MOVACC.3,C;
MOVtemp_Byte2,A;
以上temp_Byte1,temp_Byte2各BIT存农历年大小
CON_70:
MOVA,temp_Byte2
RLCA
MOVA,temp_Byte1
JCCON_72
小月29天处理
SJMPCON_74
CON_72:
CON_74:
MOVA,temp_Byte4
JNCCON_78;
低字节够减跳转
MOVB,A;
低字节不够减,B暂存减后结果,
MOVA,temp_Byte3
JZCON_76;
高字节为0,不够减
DECtemp_Byte3
MOVtemp_Byte4,B
SJMPCON_80
CON_76:
不够减结束月调整
LJMPCON_46;
转日期加1后,处理并保存转换后农历年月日
CON_78:
MOVtemp_Byte4,A;
temp_Byte3temp_Byte4天数为减去一月后天数
CON_80:
CJNEA,temp_Byte5,CON_82
JNBf0,CON_82;
更改标志后是非闰月,月份加1
SJMPCON_70
CON_82:
INCCONvert_mONth;
get_dAys_lOw:
MOVCA,@A+PC;
RET
DB0,31,59,90,120,151,181,212,243,17,48,78
get_ruN_dAys_lOw:
DB0,31,60,91,121,152,182,213,244,18,49,79
mONth_dAtA:
公历年对应的农历数据,每年三字节,
格式第一字节BIT7-4位表示闰月月份,值为0为无闰月,BIT3-0对应农历第1-4月的大小
第二字节BIT7-0对应农历第5-12月大小,第三字节BIT7表示农历第13个月大小
月份对应的位为1表示本农历月大(30天),为0表示小(29天).
第三字节BIT6-5表示春节的公历月份,BIT4-0表示春节的公历日期
DB004h,0Aeh,053h;
1901;
DB00Ah,057h,048h;
1902
DB055h,026h,0Bdh;
1903
DB00dh,026h,050h;
1904
DB00dh,095h,044h;
1905
DB046h,0AAh,0B9h;
1906
DB005h,06Ah,04dh;
1907
DB009h,0Adh,042h;
1908
DB024h,0Aeh,0B6h;
1909
DB004h,0Aeh,04Ah;
1910
DB06Ah,04dh,0Beh;
1911
DB00Ah,04dh,052h;
1912
DB00dh,025h,046h;
1913
DB05dh,052h,0BAh;
1914
DB00Bh,054h,04eh;
1915
DB00dh,06Ah,043h;
1916
DB029h,06dh,037h;
1917
DB009h,05Bh,04Bh;
1918
DB074h,09Bh,0C1h;
1919
DB004h,097h,054h;
1920
DB00Ah,04Bh,048h;
1921
DB05Bh,025h,0BCh;
1922
DB006h,0A5h,050h;
1923
DB006h,0d4h,045h;
1924
DB04Ah,0dAh,0B8h;
1925
DB002h,0B6h,04dh;
1926
DB009h,057h,042h;
1927
DB024h,097h,0B7h;
1928
DB004h,097h,04Ah;
1929
DB066h,04Bh,03eh;
1930
DB00dh,04Ah,051h;
1931
DB00eh,0A5h,046h;
1932
DB056h,0d4h,0BAh;
1933
DB005h,0Adh,04eh;
1934
DB002h,0B6h,044h;
1935
DB039h,037h,038h;
1936
DB009h,02eh,04Bh;
1937
DB07Ch,096h,0Bfh;
1938
DB00Ch,095h,053h;
1939
DB00dh,04Ah,048h;
1940
-10-
DB06dh,0A5h,03Bh;
1941
DB00Bh,055h,04fh;
1942
DB005h,06Ah,045h;
1943
DB04Ah,0Adh,0B9h;
1944
DB002h,05dh,04dh;
1945
DB009h,02dh,042h;
1946
DB02Ch,095h,0B6h;
1947
DB00Ah,095h,04Ah;
1948
DB07Bh,04Ah,0Bdh;
1949
DB006h,0CAh,051h;
1950
DB00Bh,055h,046h;
1951
DB055h,05Ah,0BBh;
1952
DB004h,0dAh,04eh;
1953
DB00Ah,05Bh,043h;
1954
DB035h,02Bh,0B8h;
1955
DB005h,02Bh,04Ch;
1956
DB08Ah,095h,03fh;
1957
DB00eh,095h,052h;
1958
DB006h,0AAh,048h;
1959
DB07Ah,0d5h,03Ch;
1960
DB00Ah,0B5h,04fh;
1961
DB004h,0B6h,045h;
1962
DB04Ah,057h,039h;
1963
DB00Ah,057h,04dh;
1964
DB005h,026h,042h;
1965
DB03eh,093h,035h;
1966
DB00dh,095h,049h;
1967
DB075h,0AAh,0Beh;
1968
DB005h,06Ah,051h;
1969
DB009h,06dh,046h;
1970
DB054h,0Aeh,0BBh;
1971
DB004h,0Adh,04fh;
1972
DB00Ah,04dh,043h;
1973
DB04dh,026h,0B7h;
1974
DB00dh,025h,04Bh;
1975
DB08dh,052h,0Bfh;
1976
DB00Bh,054h,052h;
1977
DB00Bh,06Ah,047h;
1978
DB069h,06dh,03Ch;
1979
DB009h,05Bh,050h;
1980
DB004h,09Bh,045h;
1981
DB04Ah,04Bh,0B9h;
1982
DB00Ah,04Bh,04dh;
1983
DB0ABh,025h,0C2h;
1984
-11-
DB006h,0A5h,054h;
1985
DB006h,0d4h,049h;
1986
DB06Ah,0dAh,03dh;
1987
DB00Ah,0B6h,051h;
1988
DB009h,037h,046h;
1989
DB054h,097h,0BBh;
1990
DB004h,097h,04fh;
1991
DB006h,04Bh,044h;
1992
DB036h,0A5h,037h;
1993
DB00eh,0A5h,04Ah;
1994
DB086h,0B2h,0Bfh;
1995
DB005h,0ACh,053h;
1996
DB00Ah,0B6h,047h;
1997
DB059h,036h,0BCh;
1998
DB009h,02eh,050h;
1999
DB00Ch,096h,045h;
2000
DB04dh,04Ah,0B8h;
2001
DB00dh,04Ah,04Ch;
2002
DB00dh,0A5h,041h;
2003
DB025h,0AAh,0B6h;
2004
DB005h,06Ah,049h;
2005
DB07Ah,0Adh,0Bdh;
2006
DB002h,05dh,052h;
2007
DB009h,02dh,047h;
2008
DB05Ch,095h,0BAh;
2009
DB00Ah,095h,04eh;
2010
DB00Bh,04Ah,043h;
2011
DB04Bh,055h,037h;
2012
DB00Ah,0d5h,04Ah;
2013
DB095h,05Ah,0Bfh;
2014
DB004h,0BAh,053h;
2015
DB00Ah,05Bh,048h;
2016
DB065h,02Bh,0BCh;
2017
DB005h,02Bh,050h;
2018
DB00Ah,093h,045h;
2019
DB047h,04Ah,0B9h;
2020
DB006h,0AAh,04Ch;
2021
DB00Ah,0d5h,041h;
2022
DB024h,0dAh,0B6h;
2023
DB004h,0B6h,04Ah;
2024
DB069h,057h,03dh;
2025
DB00Ah,04eh,051h;
2026
DB00dh,026h,046h;
2027
DB05eh,093h,03Ah;
2028
-12-
DB00dh,053h,04dh;
2029
DB005h,0AAh,043h;
2030
DB036h,0B5h,037h;
2031
DB009h,06dh,04Bh;
2032
DB0B4h,0Aeh,0Bfh;
2033
DB004h,0Adh,053h;
2034
DB00Ah,04dh,048h;
2035
DB06dh,025h,0BCh;
2036
DB00dh,025h,04fh;
2037
DB00dh,052h,044h;
2038
DB05dh,0AAh,038h;
2039
DB00Bh,05Ah,04Ch;
2040
DB005h,06dh,041h;
2041
DB024h,0Adh,0B6h;
2042
DB004h,09Bh,04Ah;
2043
DB07Ah,04Bh,0Beh;
2044
DB00Ah,04Bh,051h;
2045
DB00Ah,0A5h,046h;
2046
DB05Bh,052h,0BAh;
2047
DB006h,0d2h,04eh;
2048
DB00Ah,0dAh,042h;
2049
DB035h,05Bh,037h;
2050
DB009h,037h,04Bh;
2051
DB084h,097h,0C1h;
2052
DB004h,097h,053h;
2053
DB006h,04Bh,048h;
2054
DB066h,0A5h,03Ch;
20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用51 单片机实现公历与农历星期的转换程序 51 单片机 实现 公历 农历 星期 转换 程序