欢迎来到天天文库
浏览记录
ID:30731367
大小:602.99 KB
页数:14页
时间:2019-01-02
《用51单片机实现公历与农历、星期的转换》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、用用51用5151单片机实现公历与农历51单片机实现公历与农历星期的转换星期的转换星期的转换济南朱思荣一概述公历是全世界通用的历法以地球绕太阳的一周为一年一年365天分为12个月135781012月为31天2月为28天其余月份为30天事实上地球绕太阳一周共365天5小时48分46秒比公历一年多出5小时48分46秒为使年误差不累积公历年用闰年法来消除年误差由于每年多出5小时48分46秒每4年累计多出23小时15分4秒接近1天天文学家就规定每4年有一个闰年把2月由28天改为29天凡是公历年代能被4整除的那一年就是闰年但是这样一来每4年又少了44分56秒为了更准确地计时天文学家又规定凡能被1
2、00整除的年份只有能被400整除才是闰年即每400年要减掉3个闰年经过这样处理后实际上每400年的误差只有2小时53分20秒已相当准确了农历与公历不同农历把月亮绕地球一周作为一月因为月亮绕地球一周不是一整天所以农历把月分为大月和小月大月30天小月29天通过设置大小月使农历日始终与月亮与地球的位置相对应为了使农历的年份与公历年相对应农历通过设置闰月的办法使它的平均年长度与公历年相等农历是中国传统文化的代表之一并与农业生产联系密切中国人民特别是广大农民十分熟悉并喜爱农历公历与农历是我国目前并存的两种历法各有其固有的规律农历与月球的运行相对应其影响因素多它的大小月和闰月与天体运行有关计算十分
3、复杂且每年都不一致因此要用单片机实现公历与农历的转换用查表法是最方便实用的办法51系列单片机因其在功能上能满足大部份对速度要求不高的应用场合的要求且价格低廉开发工具普及程度高是目前应用最多的单片机之一本文介绍一种用51单片机实现从1901年到2099年199年公历日到农历日及星期的转换方法并向读者提供完整的51汇编程序二基本原理实现公历与农历的转换一般采用查表法按日查表是速度最快的方法但51单片机寻址能力有限不可能采用按日查表的方法除按日查外我们可以通过按月查表和按年查表的方法再通过适当的计算来确定公历日所对应的农历日期本文采用的是按年查表法最大限度地减少表格所占的程序空间对于农历月来
4、说大月为30天小月为29天这是固定不变的这样我们就可用1个BIT位来表示大小月信息农历一年如有闰月为13个月否则是12个月所以一年需要用13个BIT闰月在农历年中所在的月份并不固定大部分闰月分布在农历28月但也有少量年份在9月以后所以要表示闰月的信息至少要4BIT在这里我们用4BIT的值来表示闰月的月份值为0表示本年没有闰月有了以上信息还不足以判断公历日对应的农历日因为还需要一个参照日我们选用农历正月初一所对应的公历日期作参照日公历日最大为31日需要5BIT来表示而春节所在的月份不是1月就是2月用1BIT就够了考虑到表达方便我们用2BIT来表示春节月2BIT的值直接表示月份这样一年的农
5、历信息只用3个字节就全部包括了计算公历日对应的农历日期的方法先计算出公历日离当年元旦的天数然后查表取得当年的春节日期计算出春节离元旦的天数二者相减即可算出公历日离春节的天数以后只要根据大小月和闰月信息减一月天数调整一月农历月份即可推算出公历日所对应的农历日期如公历日不到春节日期农历年要比公历年小一年农历大小月取前一年的信息农历月从12月向前推算公历日是非常有规律的所以公历日所对应的星期天可以通过计算直接得到理论上公元0年1月1日为星期日只要求得公历日离公元0年1月1日的日子数除7后的余数就是星期天为了简化计算采用月校正法根据公历的年月日可直接计算出星期天其算法是日期年份所过闰年数月校正
6、数之和除7的余数就是星期天但如果是在闰年又不到3月份上述之和要减一天再除7其112月的校正数据为622503514624在本程序中采用1个字节表示年份闰年数也只计算1900年以后的闰年数所以实际校正数据也和上述数据不同-1-三程序流程由于星期的计算很简单这里只提供公历日转农历日的程序流程图子程序入口转换数据到HEX格式方便运算根据公历年定位数据表的地址从数据表中取得春节的公历日期,并通过计算公历日和春节离元旦的天数算出公历日离春节的天数记为X农历年=公历年减否是农历年=公历年取1数据表地址减公历日在春节以后码?农历月信息3定位到前一年取农历月信息农历月1闰月标志F00非闰月农历月12闰
7、月标志F00非闰月取农历月农历月加1F0取反天数Y否是取农历月天否是农历月闰月F01数Y否F0取反农历月减1是是否农历月闰月F01是是XYXXYXXYXY否否农历年月日数农历日YX1农历日X1据标准化子程序出口-2-四程序使用说明本文提供的子程序在设计时应用了PCF8563作时钟芯片所以其入口格式与PCF8563芯片的时钟信号存储格式完全一致年月日均为BCD码其中月的BIT7表示世纪为1表示19世纪为0表示20世纪采用PCF8563时钟芯片只要
此文档下载收益归作者所有