用C51单片机做一个万年历的显示:涉及到公农历的转换以及获取对应二十四节气的方法的问题。
二十四节气的存储方法和数据是本人一个个算的哦,如果对大家有帮助的话,求赞+关注!
年份信息和二十四节气信息存储数组
/***************************************************
* 公历与农历转换年份数据存储数组
* 公历年对应的农历数据,每年三字节,
* 格式第一字节BIT7-4 位表示闰月月份,值为0为无闰月,BIT3-0对应农历第1-4月的大小
* 第二字节BIT7-0对应农历第5-12月大小,第三字节BIT7表示农历第13个月大小
* 月份对应的位为1表示本农历月大(30天),为0表示小(29天).
* 第三字节BIT6-5表示春节的公历月份,BIT4-0表示春节的公历日期
***************************************************/
uchar code year_code[] =
{
0x04, 0xAe, 0x53, /* 1901 */
0x0A, 0x57, 0x48, /* 1902 */
0x55, 0x26, 0xBd, /* 1903 */
0x0d, 0x26, 0x50, /* 1904 */
0x0d, 0x95, 0x44, /* 1905 */
0x46, 0xAA, 0xB9, /* 1906 */
0x05, 0x6A, 0x4d, /* 1907 */
0x09, 0xAd, 0x42, /* 1908 */
0x24, 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, /* 1924 */
0x4A, 0xdA, 0xB8, /* 1925 */
0x02, 0xB6, 0x4d, /* 1926 */
0x09, 0x57, 0x42, /* 1927 */
0x24, 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, /* 2014 */
0x04, 0xBA, 0x53, /* 2015 */
0x0A, 0x5B, 0x48, /* 2016 */
0x65, 0x2B, 0xBC, /* 2017 */
0x05, 0x2B, 0x50, /* 2018 */
0x0A, 0x93, 0x45, /* 2019 */
0x47, 0x4A, 0xB9, /* 2020 */
0x06, 0xAA, 0x4C, /* 2021 */
0x0A, 0xd5, 0x41, /* 2022 */
0x24, 0xdA, 0xB6, /* 2023 */
0x04, 0xB6, 0x4A, /* 2024 */
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 */
0x24, 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 */
};
uchar code day_code1[9] = { 0x0, 0x1f, 0x3b, 0x5a, 0x78, 0x97, 0xb5, 0xd4, 0xf3 };
uint code day_code2[3] = { 0x111, 0x130, 0x14e };
uchar code table_week[12] = { 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; // 月修正数据表
/********************************************
* 二十四节气对应年的日期表
* 依次从1月开始,每月用一个字节存放,用15减去高四位数据即得到第一个节气对应日期
* 低四位数据加上15即得到第二个节气对应日期
**********************************************/
uchar code ChinaSolarTerms[]={
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1901
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x79,0x69,0x78,0x78, //1902
0x96,0xa5,0x87,0x96,0x87,0x87,0x79,0x69,0x69,0x69,0x78,0x78, //1903
0x86,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x78, //1904
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1905
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1906
0x96,0xa5,0x87,0x96,0x87,0x87,0x79,0x69,0x69,0x69,0x78,0x78, //1907
0x86,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1908
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1909
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x79,0x78,0x78, //1910
0x96,0xa5,0x87,0x96,0x87,0x87,0x79,0x69,0x69,0x69,0x78,0x78, //1911
0x86,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x77,0x87, //1912
0x95,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1913
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1914
0x96,0xa5,0x97,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1915
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1916
0x95,0xb4,0x96,0xa6,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1917
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x77, //1918
0x96,0xa5,0x97,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1919
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1920
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1921
0x96,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1922
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1923
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1924
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1925
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1926
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1927
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x78,0x87,0x87, //1928
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1929
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1930
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x79,0x69,0x78,0x78, //1931
0x96,0xa5,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1932
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1933
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1934
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x79,0x78,0x78, //1935
0x96,0xa5,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1936
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1937
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1938
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1939
0x96,0xa5,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1940
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1941
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1942
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1943
0x96,0xa5,0x96,0xa5,0xa6,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1944
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1945
0x95,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1946
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1947
0x96,0xa5,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1948
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1949
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1950
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1951
0x96,0xa5,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1952
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1953
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1954
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1955
0x96,0xa5,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1956
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1957
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1958
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1959
0x96,0xa4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1960
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1961
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1962
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1963
0x96,0xb4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1964
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1965
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1966
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1967
0x96,0xb4,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1968
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1969
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1970
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1971
0x96,0xa4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1972
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1973
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1974
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1975
0x96,0xa4,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1976
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1977
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x78,0x87, //1978
0x95,0xb4,0x96,0xa6,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1979
0x96,0xa4,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1980
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1981
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1982
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1983
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //1984
0xa5,0xb4,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1985
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1986
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x79,0x78,0x69,0x78,0x87, //1987
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //1988
0xa5,0xb4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1989
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //1990
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1991
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //1992
0xa5,0xb3,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1993
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1994
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1995
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //1996
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1997
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1998
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1999
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2000
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2001
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2002
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //2003
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2004
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2005
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2006
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //2007
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2008
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2009
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2010
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x78,0x87, //2011
0x96,0xb4,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2012
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2013
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2014
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //2015
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2016
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2017
0xa5,0xb4,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2018
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //2019
0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0x97,0x87,0x87,0x78,0x87,0x86, //2020
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2021
0xa5,0xb4,0xa5,0xb5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //2022
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //2023
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2024
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2025
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2026
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //2027
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2028
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2029
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2030
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //2031
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2032
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2033
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2034
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2035
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2036
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2037
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2038
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2039
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2040
0xa5,0xc3,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2041
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2042
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2043
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x88,0x87,0x96, //2044
0xa5,0xc3,0xa5,0xb4,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2045
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2046
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2047
0x95,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2048
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2049
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2050
0xa5,0xb4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //2051
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x97,0x88,0x86,0x96, //2052
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2053
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2054
0xa5,0xb4,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2055
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2056
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2057
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2058
0xa5,0xb4,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2059
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x87,0x96,0x96, //2060
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2061
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2062
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2063
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x87,0x96,0x96, //2064
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2065
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2066
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2067
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2068
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2069
0xa5,0xc3,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2070
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2071
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2072
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x88,0x87,0x96, //2073
0xa5,0xc3,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2074
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2075
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2076
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x88,0x87,0x96, //2077
0xa5,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x88,0x87,0x78,0x87,0x86, //2078
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2079
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2080
0xa4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2081
0xa5,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2082
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2083
0xa5,0xb4,0xb4,0xb4,0xb5,0xa5,0x97,0x97,0x97,0x87,0x96,0x96, //2084
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2085
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2086
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2087
0xa5,0xb4,0xb4,0xb4,0xb5,0xb5,0x97,0x97,0x97,0x87,0x96,0x96, //2088
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2089
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2090
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2091
0xa5,0xb4,0xb4,0xb4,0xb5,0xb5,0x97,0x97,0x97,0x87,0x96,0x96, //2092
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x87,0x96,0x96, //2093
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2094
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2095
0xa5,0xb3,0xb4,0xb4,0xb5,0xb5,0x97,0x97,0x97,0x87,0x96,0x96, //2096
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2097
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2098
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2099
};
公农历转换和二十四节气获取
/*******************************************************************
函数名称:GetMoonDay()
函数功能:用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0。
输入参数:month_p table_addr
返回值: 0/1
*******************************************************************/
uchar GetMoonDay( uchar month_p, ushort table_addr )
{
switch ( month_p )
{
case 1:
if ( (year_code[table_addr] & 0x08) == 0 )
return(0);
else return(1);
case 2:
if ( (year_code[table_addr] & 0x04) == 0 )
return(0);
else return(1);
case 3:
if ( (year_code[table_addr] & 0x02) == 0 )
return(0);
else return(1);
case 4:
if ( (year_code[table_addr] & 0x01) == 0 )
return(0);
else return(1);
case 5:
if ( (year_code[table_addr + 1] & 0x80) == 0 )
return(0);
else return(1);
case 6:
if ( (year_code[table_addr + 1] & 0x40) == 0 )
return(0);
else return(1);
case 7:
if ( (year_code[table_addr + 1] & 0x20) == 0 )
return(0);
else return(1);
case 8:
if ( (year_code[table_addr + 1] & 0x10) == 0 )
return(0);
else return(1);
case 9:
if ( (year_code[table_addr + 1] & 0x08) == 0 )
return(0);
else return(1);
case 10:
if ( (year_code[table_addr + 1] & 0x04) == 0 )
return(0);
else return(1);
case 11:
if ( (year_code[table_addr + 1] & 0x02) == 0 )
return(0);
else return(1);
case 12:
if ( (year_code[table_addr + 1] & 0x01) == 0 )
return(0);
else return(1);
case 13:
if ( (year_code[table_addr + 2] & 0x80) == 0 )
return(0);
else return(1);
}
return(0);
}
/*******************************************************************
函数名称:GetChinaCalendar()
函数功能:公农历转换(只允许1901-2099年)
输入参数:year:公历年 month:公历月 day:公历日
返回值: 0/1 1对应转换成功,0对应转换失败
*********************************************************************/
uchar NLmonth; //农历月
uchar NLday; //农历日
uchar IsRunYue; //存放当前农历月是否为闰月,是则为1,否则为0
uchar GetChinaCalendar(uint year,uchar month,uchar day)
{
uchar temp1, temp2, temp3, month_p, yearH, yearL,runyue;
uchar flag_y;
ushort temp4, table_addr;
yearH = year / 100; yearL = year % 100;
if ( (yearH != 19) && (yearH != 20) )
return(0);
/* 定位数据表地址 */
if ( yearH == 20 )
table_addr = (yearL + 100 - 1) * 3;
else table_addr = (yearL - 1) * 3;
/* 取当年春节所在的公历月份 */
temp1 = year_code[table_addr + 2] & 0x60;
temp1 >>= 5;
/* 取当年春节所在的公历日 */
temp2 = year_code[table_addr + 2] & 31;
/* 计算当年春年离当年元旦的天数,春节只会在公历1月或2月 */
if ( temp1 == 1 )
temp3 = temp2 - 1;
else temp3 = temp2 + 31 - 1;
/* 计算公历日离当年元旦的天数 */
if ( month < 10 )
temp4 = day_code1[month - 1] + day - 1;
else temp4 = day_code2[month - 10] + day - 1;
/* 如果公历月大于2月并且该年的2月为闰月,天数加1 */
if ( (month > 2) && (yearL % 4 == 0) )
temp4++;
/* 判断公历日在春节前还是春节后 */
if ( temp4 >= temp3 )
{ //当前公历日在春节后
temp4 -= temp3; //现在temp4存放当前公历日距离当前春节公历日天数
month = 1;
month_p = 1;
flag_y = 0;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29; /* 小月29天 */
else temp1 = 30; /* 大月30天 */
/* 从数据表中取该年的闰月月份,如为0则该年无闰月 */
temp2 = year_code[table_addr] / 16;
if(temp2!=0)runyue=temp2;
while ( temp4 >= temp1 )
{
temp4 -= temp1;
month_p++;
if ( month == temp2 )
{
flag_y = ~flag_y;
if ( flag_y == 0 )
month++;
}else month++;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29;
else temp1 = 30;
}
day = temp4 + 1;
}
/* 公历日在春节前使用下面代码进行运算 */
else{
temp3 -= temp4;
if ( yearL == 0 )
{
yearL = 100 - 1;
yearH = 19;
}else yearL--;
table_addr -= 3;
month = 12;
temp2 = year_code[table_addr] / 16;
if ( temp2 == 0 )
month_p = 12;
else month_p = 13;
flag_y = 0;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29;
else temp1 = 30;
while ( temp3 > temp1 )
{
temp3 -= temp1;
month_p--;
if ( flag_y == 0 )
month--;
if ( month == temp2 )
flag_y = ~flag_y;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29;
else temp1 = 30;
}
day = temp1 - temp3 + 1;
}
NLmonth = month;
NLday = day;
if(runyue==NLmonth)IsRunYue=1;
else IsRunYue=0;
return(1);
}
/*******************************************************************
函数名称:SetSolarTerms()
函数功能:判断当前日期是否为二十四节气,是则返回1,否则返回0
输入参数:allyear:公历年 month:公历月 day:公历日
返回值: 0/1 1代表是二十四节气之一,0代表不是
*********************************************************************/
uchar SetSolarTerms(uint allyear,uchar month,uchar day)
{
uchar result; //返回值变量
uchar day1; //读出当前年月对应的节气日期
if(day>15) //当日在当月的下半月时
{
day-=15; //根据节气存储表的格式转换当日,然后与表中数据进行对比
day1=ChinaSolarTerms[(allyear-1901)*12+month-1]%16;
if(day==day1)result=1; //若当前日期和节气日期相同则说明该天是二十四节气之一
else result=0;
}
else //当日在当月的上半月时
{
day=15-day;
day1=ChinaSolarTerms[(allyear-1901)*12+month-1]/16;
if(day==day1)result=1;
else result=0;
}
return result;
}
// 星期判定,1901.1.1(星期二)为基准,对以后200年内即(1901~2099),星期有效
uchar SetWeek(uchar year1,uchar month,uchar day)
{
uchar code Month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
uchar j=0, wk=0; // j 用于记录从1901年到你设定的那一年(不包括你设定的年)之间有几个闰年,wk 用于存放你求出的星期几
uint sum=0, i, allyear; // sum 用于存放从1901年到你设定的那一年一共有多少天,sum最大到65535
allyear = year0*100 + year1; // 这里的year0是你设定年的前两位,TIME6是后两位
sum = day;
for(i=0;i<month;i++)
{
sum += Month[i];
}
if((allyear%4==0)&&(allyear%100!=0)||(allyear%400==0))
{
if(month > 2)sum++;
}
for(i=1901;i<allyear;i++)
{
if((i%4==0)&&(i%100!=0)||(i%400==0))j++; //闰年比平年多一天
}
if(allyear >1900 && allyear < 2100) // 确保不超出设定的范围2000~2100
{
sum = sum + (allyear-1901)*365 + j + 1; // 5是由基准星期6->1得到
wk = sum%7;
}
if(wk==0)wk = 7;
return wk;
}