多功能万年历设计万年历腕表闰年(多功能万年历)
目录导读:
跪求。。。关于单片机方面的毕业设计题目建议,最好简单些的。做时钟和闹 。。。
时钟算是很容易的,题目就写基于51单片机的多功能万年历设计单片机,c语言,PCB设计
更佳最全的万年历,功能最全的万年历
更佳最全的万年历
20二十四 年,是闰年。
我们此刻使用的公历历法,是自1582年开始使用的格里高利历。格里高利历所显示的12个月,每月天数不等, 28天、30天和31天。每个能被4整除的年份是为闰年,但能被100整除的年份除外,而能被400整除的跨世纪之年却又是闰年,所谓“百年不闰、四百年闰”。例如,1700、1800和1900年不是闰年,但两千年是闰年。
公历历,一年有365天。每一年1。3。5。7。8。10。12月为大月,每月31天;每一年4。6。9。11月为小月,每月30天;闰年的2月是二十九天,平年的2月为28天。
1
万年历表是干啥的?
就是能自动在一年里识别大月(31天)小月(30天)2月(28天),紧接着每4年能自动识别闰年(3个平年后是一个闰年。平年2月为28天,闰年2月是29天。每4年一闰)的功能腕表。这么神奇的智能操作,不是由电子流程,完全由机械运转完成,那更神奇了。
万年历功能的机械表,假如腕表一直规律运作没有停走,至少100年内不用去调整—-诚然,一般表主都活不了这么久…
历史上最长青的万年历表之一,百达翡丽的3940。6点位指示日期和月相,9点位指示星期(同时有二十四小时指示),3点位指示月份和闰年
2
万年历表的历史?
1762年, 现存历史上之一枚万年历怀表,由英国钟表托马斯马奇(Thomas Mudge)创制。
1864年,百达翡丽之一枚万年历怀表问世。
1884年,江诗丹顿制成品牌之一枚万年历怀表。
1889年,百达翡丽申请万年历技术专利,这是百达翡丽创始人之一阿德里安翡丽在世时的最后一项作用与影响钟表行业的重大技术(他于1844年发明无钥上链)。
1925年,历史上之一枚万年历腕表问世。并且也是百达翡丽之一枚万年历腕表(编号97975)。自此万年历功能一直是百达翡丽腕表最要紧复杂功能。
1941年,百达翡丽首款量产万年历腕表1526问世。
1955年,爱彼之一枚量产万年历腕表问世。
1984年,江诗丹顿之一枚量产超薄万年历腕表问世。
1985年,作用与影响现代万年历腕表设计的百达翡丽3940问世,装配著名的Caliber 3二十四SQ自动万年历机芯。百达翡丽3940是历史上最长青的万年历表之一,直到2006年5140问世才将它取代。百达翡丽拥有人斯登家族第3代菲利普斯登更爱的腕表复杂功能是万年历,佩戴时间最长的腕表就是3940,佩戴超过30年,是菲利普斯登先生“生活之中不可缺少的部分”。
1985年,万国达文西万年历(同时带有计时功能)问世,这是万国表之一款量产万年历功能腕表,也是历史上之一款带有年份显示窗的万年历腕表。同时由于价格相对“亲民”,万国的达文西万年历成为那个时候一些时日销量更大的万年历腕表。
两千年后,万年历和飞轮一样,众多品牌开始研发生产只有少数品牌才能的万年历腕表。
1762年, 现存历史上之一枚万年历怀表,由英国钟表托马斯马奇(Thomas Mudge)创制
1925年,历史上之一枚万年历腕表问世。并且也是百达翡丽之一枚万年历腕表(编号97975)
1985年,万国达文西万年历(同时带有计时功能)问世,这是万国表之一款量产万年历功能腕表,并且也是历史上之一款带有年份显示窗的万年历腕表(此图 络,是一款追针万年历,但万国初期万年历腕表为万年历加计时码功能,在7750机芯基础上做万年历模组)
3
万年历表好玩之处?
前文讲了,神奇的机械技艺带来的神奇计时功能。对于爱表的人,尤其那些技术男和万年历迷,每一年2月末尾一天皆为自己的节日—-看2月日期直接由2月28号跳到3月1号(普通的日历腕表,包括2月在内的每一个月都要手动调日历,30天的小月也得手动调,由于日期盘都是31天指示),每4年的闰年更是大节日!!!—-28号那天看日期跳出闰年2月才有的29日,紧接着29日深夜看29日往3月1号直接跳转!!!这个爱好是还是不是很简单很傻萌?……
万年历功能复杂,机械运转精密。大都万年历腕表停走之后不好调整。故有万年历表的大都人都会备一个转表器,表不佩戴时让转表器给腕表上链,这样能保证万年历腕表规律运作,不能够出现麻烦调整时间的情形。当然机械表皆会有误差,每过一些时日还要给腕表对时,调整误差。这样,你的万年历腕表真的就能够精确准确运行“万年”了。随时戴出来,你的表都会为你精确准确显示今天的时间、日期、星期、月份、月相等等时间信息。
喜欢万年历表的人还要分清“全历表”、“年历表”和万年历的不同,固然表盘上显示的时间信息几乎一样,但它们和万年历相比可有极大差异,特别是全历表。全历表只是有日期、星期、月份显示,但不能自动区分大月小月2月和闰年,所以一年至少要手动调整5次(2。4。6。9。11月份),年历表离万年历差2月和闰年的自动识别,所以一年中需手动调整1次(2月份)。万年历是百年内不用手动调整。品牌的年历表有时连万年历表价格的一半都未到。
最简单容易的日历表的日历圈都是31天,不管你是什么月,它都是默认从31号跳到下月1号。所以平年2月28天、小月30天、闰年2月29天,都要手动调整到3月1日。而万年历表那么是通过复杂的机械运转实现智能自动跳转
万年历时间信息一目了然的格拉苏蒂 万年历机芯
漂亮的朗格万年历机芯
万年历功能特别繁琐。爱彼5134自动万年历机芯分解
痴迷技术的,可以仔细研究康斯登这幅万年历机芯分解指示图,了解万年历功能的主要功能模组(点大图看)
4
万年历表的商场价格?
万年历表复杂,一般中级和中级以下品牌做不出万年历腕表。几个品牌的万年历表基本在50万元起(爱彼有一款钢款价格是494000元,更低价)。百达翡丽、江诗丹顿、爱彼三个品牌具有的常规万年历腕表最多最全,朗格、宝玑的常规万年历表不多,但有不少附带其他复杂功能的超复杂功能万年历腕表。宝珀、积家、万国皆有常规的万年历表,而且价格特别好,更低157000元起。金款更低是积家的系列万年历,二十四5000元。宝珀经典系列红金万年历价格也不高,318000元。万国万年历有许多款,此刻在产价格更低是新款喷火战机大型飞行员万年历腕表青铜款,价格是223000元(以前有20万以内万国万年历表,停产了),最常见葡萄牙系列金款万年历里更低的是283000元,比积家的金万年历大约贵4万元。性价比更高万年历腕表, 两个中高档品牌康斯登和万宝龙。万宝龙原来有一款万年历和康斯登价格差不多,9万元过一点。此刻该款停产,此刻价格更低的万宝龙万年历是传承系列万年历,钢款123000元,金款205500元。所以此刻所有中高档腕表中,单万年历价格更低的是康斯登的钢款万年历腕表,定价89500元。
百达翡丽5320G 631600元
江诗丹顿传承系列万年历超薄 610000元
江诗丹顿纵横四海红金款 720000元
爱彼皇家橡树万年历中国版 611000元
朗格LANGEMATIK万年历红金款 85000欧元
不相同的朗格万年历RICHARD LANGE PERPETUAL CALENDAR “Terraluna”
宝玑Classique经典系列3797飞轮万年历腕表
宝珀经典系列万年历腕表,318000元
积家系列红金款 二十四5000元
万国葡萄牙系列万年历腕表“150周年”特别版 297000元
万国喷火战机大型飞行员万年历青铜款 223000元
万宝龙传承系列万年历金款 205500元。钢款123000元
康斯登钢款万年历,89500元,价格更低瑞士万年历腕表
康斯登镀金款万年历,价格和钢款差不多
事实上康斯登一款带飞轮的万年历钢款定价未超过20万,197500元,同样极高性价比
5
更加的多的万年历腕表
前文讲了,两千年后许多品牌开始有了本人的万年历腕表。表友们又多了许多选择。
格拉苏蒂 议员卓越万年历腕表
帕玛强尼TORIC QUANTIÈME PERPÉTUEL RÉTROGRADE万年历腕表
芝柏1966系列万年历腕表
芝柏桂冠系列万年历腕表
伯爵Gouverneur万年历腕表
宇舶表Big Bang万年历计时腕表-王金陶瓷款
海瑞温斯顿海洋Ocean系列双逆跳功能万年历腕表
格拉夫万年历腕表
萧邦L。U。C Lunar One万年历腕表
同样机芯,萧邦的另一款很好玩的万年历表:L。U。C Perpetual T Spirit of ‘La Santa Muerte’腕表
亨利慕时极简万年历腕表
爱马仕万年历腕表
雅典表经典路德维格万年历腕表版
雅克德罗大明火珐琅盘面万年历腕表
本篇推荐的万年历,除个别复杂款外,基本都是所提到品牌的入门款万年历腕表或主要的单万年历功能腕表,未收入它们一些精彩复杂的超复杂功能万年历,同时未能把更加的多万年历腕表、包括一些创意奇特的单独万年历腕表收入。我们以后再讨论。
看完这一篇,你对万年历腕表有了多少了解?
欢迎在留言区发来你的回复,告知我们你更爱的三款万年历!!!
也欢迎朋友们积极给钟小游发来你的万年历腕表在闰年2月29日精彩跳转的瞬间!!!
——※轻轻的分割线※——–
这里是钟表专业人士白映泽老师的自媒体电话公号。欢迎我们对本文进行评论和转发,或共享本人的感受和故事。有趣有意义的评论,将获选收入本篇 下留言区。经常点赞更高的评论和热心评论的表友,会随时精美的名表品牌礼品。想跟随《钟表游》学习更深入钟表知识的爱表人,想加入钟表游表友会的读者和表友,有购表的表友,可随时联络钟表游:钟小游。
—- 钟表游 —–
上面便是与更佳最全的万年历有关的内容,是关于万年历的共享。看完功能最全的万年历后,希望这帮助到大家!!!
全功能万年历是什么?
多功能万年历是一款基于Android手机平台开发、适合使用于华人群体使用的日历软件,支持简体中文。多功能万年历基本功能为日历、阴历、节日、记事本,闹钟提示等。
多功能万年历支持目前所有的Android平台的手机屏幕(QVGA、HVGA、WVGA等)。主要测试屏幕为480*320,600*480。 多功能万年历无需互联网连接,符合中国国情,经过严格的耗电量测试。多功能万年历主要由日历模块、阴历模块、节日模块、记事本模块,闹钟模块组成。
注意和提防:
多功能万年历是一款基于Android手机平台开发、适合使用于华人群体使用的日历软件,支持简体中文。
多功能万年历基本功能为日历、阴历、节日、记事本,闹钟提示等。多功能万年历支持目前所有的Android平台的手机屏幕(QVGA、HVGA、WVGA等)。
主要测试屏幕为480*320,600*480。 。 多功能万年历无需互联网连接,符合中国国情,经过严格的耗电量测试。多功能万年历主要由日历模块、阴历模块、节日模块、记事本模块,闹钟模块组成。
。 设计要求 以AT89C51单片机为核心,制作一个LCD显示的智能电子钟 求程。。。
⓹单片机多功能万年历电子表系统 节日提醒温湿度显示功能描述:1。 按键调时间, 设置闹钟2。 带备用电池(断电继续走时)3。 阳历、 阴历节日提醒; 可显示上午、 中午、 晚上、 午夜、 深夜等时间段4。 温湿度实时显示(可替换其他传感器数据显示)5。 功能扩展: 语音播报万年历、 温湿度等。(此项功能为扩展功能)☆已作出的实物优酷视频演示地址:http://v。youku。com/v_show/id_XMTU0MjI4OTExNg==。html⓵GPS 自动授时系统 语音报时/播报温湿度实现功能:1、可设置授时模式为自动授时和手动更新2、可脱离 GPS 数据利用本地时钟芯片准确走时3、可设置静音模式、 整点报时和自动语音播报温湿度及其混合模式等四种语音工作模式4、可以切换显示本地时间和温湿度数据和 GPS 卫星时间数据和定位数据5、经过剖析 GPS 数据, 利用算法缩短了解析时间在秒级时间内就能取得到 GPS 时间数据(多数情况下, 完成定位需要几分钟以上)6、(亮点) 利用算法自动计算星期参数和阴历参数, 流程内部算法输入任何阳历日期数据即可得到准确的星期数据和阴历数据7、利用 12864 串口工作模式, 节省了 8 个 IO8、可进行功能定制☆已作出的实物优酷视频演示地址:http://v。youku。com/v_show/id_XMjY4OTkyNjk4NA==。html
C51单片机的万年历流程设计
//C51写的公历转阴历和星期#define uchar unsigned char#define uint unsigned int#include <intrins。h>/*公历年相应的阴历数据,每一年三字节,格式第1字节BIT7-4 位预示闰月月份,值为0 为无闰月,BIT3-0 对应阴历第一-4 月的大小第2字节BIT7-0 对应阴历第五-12 月大小,第3字节BIT7 预示阴历第一3 个月大小月份相应的位为1 预示本阴历月大(30 天),为0 预示小(29 天)第3字节BIT6-5 预示春节的公历月份,BIT4-0 预示春节的公历日期*/code uchar year_code[597] = { 0x04,0xAe,0x53, //1901 0 0x0A,0x57,0x48, //1902 3 0x55,0x26,0xBd, //1903 6 0x0d,0x26,0x50, //1904 9 0x0d,0x95,0x44, //1905 12 0x46,0xAA,0xB9, //1906 15 0x05,0x6A,0x4d, //1907 18 0x09,0xAd,0x42, //1908 21 0x二十四,0xAe,0xB6, //1909 0x04,0xAe,0x4A, //1910 0x6A,0x4d,0xBe, //1911 0x0A,0x4d,0x52, //1912 0x0d,0x25,0x46, //1913 0x5d,0x52,0xBA, //1914 0x0B,0x54,0x4e, //1915 0x0d,0x6A,0x43, //1916 0x29,0x6d,0x37, //1917 0x09,0x5B,0x4B, //1918 0x74,0x9B,0xC1, //1919 0x04,0x97,0x54, //1920 0x0A,0x4B,0x48, //1921 0x5B,0x25,0xBC, //1922 0x06,0xA5,0x50, //1923 0x06,0xd4,0x45, //19二十四 0x4A,0xdA,0xB8, //1925 0x02,0xB6,0x4d, //1926 0x09,0x57,0x42, //1927 0x二十四,0x97,0xB7, //1928 0x04,0x97,0x4A, //1929 0x66,0x4B,0x3e, //1930 0x0d,0x4A,0x51, //1931 0x0e,0xA5,0x46, //1932 0x56,0xd4,0xBA, //1933 0x05,0xAd,0x4e, //1934 0x02,0xB6,0x44, //1935 0x39,0x37,0x38, //1936 0x09,0x2e,0x4B, //1937 0x7C,0x96,0xBf, //1938 0x0C,0x95,0x53, //1939 0x0d,0x4A,0x48, //1940 0x6d,0xA5,0x3B, //1941 0x0B,0x55,0x4f, //1942 0x05,0x6A,0x45, //1943 0x4A,0xAd,0xB9, //1944 0x02,0x5d,0x4d, //1945 0x09,0x2d,0x42, //1946 0x2C,0x95,0xB6, //1947 0x0A,0x95,0x4A, //1948 0x7B,0x4A,0xBd, //1949 0x06,0xCA,0x51, //1950 0x0B,0x55,0x46, //1951 0x55,0x5A,0xBB, //1952 0x04,0xdA,0x4e, //1953 0x0A,0x5B,0x43, //1954 0x35,0x2B,0xB8, //1955 0x05,0x2B,0x4C, //1956 0x8A,0x95,0x3f, //1957 0x0e,0x95,0x52, //1958 0x06,0xAA,0x48, //1959 0x7A,0xd5,0x3C, //1960 0x0A,0xB5,0x4f, //1961 0x04,0xB6,0x45, //1962 0x4A,0x57,0x39, //1963 0x0A,0x57,0x4d, //1964 0x05,0x26,0x42, //1965 0x3e,0x93,0x35, //1966 0x0d,0x95,0x49, //1967 0x75,0xAA,0xBe, //1968 0x05,0x6A,0x51, //1969 0x09,0x6d,0x46, //1970 0x54,0xAe,0xBB, //1971 0x04,0xAd,0x4f, //1972 0x0A,0x4d,0x43, //1973 0x4d,0x26,0xB7, //1974 0x0d,0x25,0x4B, //1975 0x8d,0x52,0xBf, //1976 0x0B,0x54,0x52, //1977 0x0B,0x6A,0x47, //1978 0x69,0x6d,0x3C, //1979 0x09,0x5B,0x50, //1980 0x04,0x9B,0x45, //1981 0x4A,0x4B,0xB9, //1982 0x0A,0x4B,0x4d, //1983 0xAB,0x25,0xC2, //1984 0x06,0xA5,0x54, //1985 0x06,0xd4,0x49, //1986 0x6A,0xdA,0x3d, //1987 0x0A,0xB6,0x51, //1988 0x09,0x37,0x46, //1989 0x54,0x97,0xBB, //1990 0x04,0x97,0x4f, //1991 0x06,0x4B,0x44, //1992 0x36,0xA5,0x37, //1993 0x0e,0xA5,0x4A, //1994 0x86,0xB2,0xBf, //1995 0x05,0xAC,0x53, //1996 0x0A,0xB6,0x47, //1997 0x59,0x36,0xBC, //1998 0x09,0x2e,0x50, //1999 294 0x0C,0x96,0x45, //2000 297 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 0x0B,0x4A,0x43, //2011 0x4B,0x55,0x37, //2012 0x0A,0xd5,0x4A, //2013 0x95,0x5A,0xBf, //20二十四 0x04,0xBA,0x53, //20二十四 0x0A,0x5B,0x48, //20二十四 0x65,0x2B,0xBC, //20二十四 0x05,0x2B,0x50, //20二十四 0x0A,0x93,0x45, //20二十四 0x47,0x4A,0xB9, //20二十四 0x06,0xAA,0x4C, //20二十四 0x0A,0xd5,0x41, //20二十四 0x二十四,0xdA,0xB6, //20二十四 0x04,0xB6,0x4A, //20二十四 0x69,0x57,0x3d, //2025 0x0A,0x4e,0x51, //2026 0x0d,0x26,0x46, //2027 0x5e,0x93,0x3A, //2028 0x0d,0x53,0x4d, //2029 0x05,0xAA,0x43, //2030 0x36,0xB5,0x37, //2031 0x09,0x6d,0x4B, //2032 0xB4,0xAe,0xBf, //2033 0x04,0xAd,0x53, //2034 0x0A,0x4d,0x48, //2035 0x6d,0x25,0xBC, //2036 0x0d,0x25,0x4f, //2037 0x0d,0x52,0x44, //2038 0x5d,0xAA,0x38, //2039 0x0B,0x5A,0x4C, //2040 0x05,0x6d,0x41, //2041 0x二十四,0xAd,0xB6, //2042 0x04,0x9B,0x4A, //2043 0x7A,0x4B,0xBe, //2044 0x0A,0x4B,0x51, //2045 0x0A,0xA5,0x46, //2046 0x5B,0x52,0xBA, //2047 0x06,0xd2,0x4e, //2048 0x0A,0xdA,0x42, //2049 0x35,0x5B,0x37, //2050 0x09,0x37,0x4B, //2051 0x84,0x97,0xC1, //2052 0x04,0x97,0x53, //2053 0x06,0x4B,0x48, //2054 0x66,0xA5,0x3C, //2055 0x0e,0xA5,0x4f, //2056 0x06,0xB2,0x44, //2057 0x4A,0xB6,0x38, //2058 0x0A,0xAe,0x4C, //2059 0x09,0x2e,0x42, //2060 0x3C,0x97,0x35, //2061 0x0C,0x96,0x49, //2062 0x7d,0x4A,0xBd, //2063 0x0d,0x4A,0x51, //2064 0x0d,0xA5,0x45, //2065 0x55,0xAA,0xBA, //2066 0x05,0x6A,0x4e, //2067 0x0A,0x6d,0x43, //2068 0x45,0x2e,0xB7, //2069 0x05,0x2d,0x4B, //2070 0x8A,0x95,0xBf, //2071 0x0A,0x95,0x53, //2072 0x0B,0x4A,0x47, //2073 0x6B,0x55,0x3B, //2074 0x0A,0xd5,0x4f, //2075 0x05,0x5A,0x45, //2076 0x4A,0x5d,0x38, //2077 0x0A,0x5B,0x4C, //2078 0x05,0x2B,0x42, //2079 0x3A,0x93,0xB6, //2080 0x06,0x93,0x49, //2081 0x77,0x29,0xBd, //2082 0x06,0xAA,0x51, //2083 0x0A,0xd5,0x46, //2084 0x54,0xdA,0xBA, //2085 0x04,0xB6,0x4e, //2086 0x0A,0x57,0x43, //2087 0x45,0x27,0x38, //2088 0x0d,0x26,0x4A, //2089 0x8e,0x93,0x3e, //2090 0x0d,0x52,0x52, //2091 0x0d,0xAA,0x47, //2092 0x66,0xB5,0x3B, //2093 0x05,0x6d,0x4f, //2094 0x04,0xAe,0x45, //2095 0x4A,0x4e,0xB9, //2096 0x0A,0x4d,0x4C, //2097 0x0d,0x15,0x41, //2098 0x2d,0x92,0xB5, //2099};///月份数据表code uchar day_code1⓽={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};code uint day_code2⓷={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⓽,day_code2⓷ //假如公历月在九月或前,天数会少于0xff,用表day_code1⓽, //在九月后,天数大于0xff,用表day_code2⓷ //如输入公历日为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=0x63;c=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⑫={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;}//testuchar c_sun,year_sun,month_sun,day_sun;void main(){ c_sun=1; year_sun=0x2; month_sun=0x11; day_sun=0x3; Conver_week(c_sun,year_sun,month_sun,day_sun); Conversion(c_sun,year_sun,month_sun,day_sun); while(1);}
谁能跟我说说单片机万年历的设计思路呗
仔细研究野火的STM32F103开发板的实时时钟例程,就会学到许多东西这个单片机的实时时钟只不过是一个简单容易的32位计数器,计的是秒,要换算成年月日时分秒,完全是要依据阳历的闰年规律计算的,先找一个基准日期,称为时间戳紧接着依据现今时间与时间戳的差值(以S为单位)计算目前的年月日时分秒钟星期几,紧接着依据表格查每一年的阴历有多少个月,几个大小月,闰月是个月,春节在哪一天,当前日期是在春节前还是春节后,就能计算出阴历日期,紧接着计算二十四节气,因为二十四节是按阳历年划分的,而阳历的一年只有365天和366天两种,因此二十四节的阳历日期基本固定,找一个标准,紧接着记下各个节气和标准日期的正负误差就能够确定当前节气的阳历日期了,还有天干地支,只要有一个基准,求12和10的余数,精密推算比较容易的
展开全文


