| 
高级会员 主题
回帖0
积分3145
阅读权限30
注册时间2013-5-25
最后登录1970-1-1
在线时间 小时
 
 | 
 
| 一个12864的 时钟程序!用的是KS0108 驱动! 可显示,时钟也在走,可是开关不能调时,只有一个设置键可用,请高手看看有没有什么问题!谢谢!
 
 #include <reg52.h>
 #include <intrins.h>
 #include <stdio.h>
 #define uint unsigned int
 #define uchar unsigned char
 char sec,min,hour,day,month,year,week;    //定义全局变量,秒,分,时,日,月,年和星期
 bit century;                              //定义世纪位:0为20世纪,1为19世纪。
 //此时初始日期为2006年8月13日,即此程序完成日期!
 void delayX10ms(uint count);
 sbit LCD_csa=P2^5;                   //定义左屏开关
 sbit LCD_csb=P2^4;                   //定义右屏开关
 sbit LCD_di=P2^1;                    //定义数据或指令,1=数据,0=指令
 sbit LCD_rw=P2^2;                    //定义读或写?    1=读,  0=写
 sbit LCD_e=P2^0;                     //定义使能操作, 1=能,  0=否
 sbit LCD_rst = P2^3;                  //定义复位
 sbit k1 = P1^5;
 sbit k2 = P1^6;
 sbit k3 = P1^7;
 sbit k4 = P3^2;
 sfr  LCD_db=0x80;                    //定义数据端口
 /**************************************
 
 *************************************************************************************************/
 code uchar year_code[597]={
 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
 0x0C,0x96,0x45,    //2000
 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
 };
 unsigned char code hz[]={
 /*--  文字:  十  --0*/
 /*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0xFE,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,
 /*--  文字:  一  --1*/
 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x40,0x40,0x40,0xC0,0xC0,0x80,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 /*--  文字:  二  --2*/
 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x18,0x18,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x0C,0x04,0x04,0x04,0x04,0x04,0x06,0x06,0x06,
 /*--  文字:  三  --3*/
 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x98,0x88,0x88,0x88,0x08,0x00,0x00,0x00,0x00,
 0x00,0x00,0x10,0x10,0x10,0x11,0x11,0x11,0x19,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
 /*--  文字:  四  --4*/
 0x00,0x70,0xF0,0x90,0x10,0xF0,0xF0,0x10,0xF8,0xF8,0x88,0x88,0xF8,0xF8,0x00,0x00,
 0x00,0x00,0x00,0x07,0x07,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x0C,0x0F,0x07,0x00,
 /*--  文字:  五  --5*/
 0x00,0x00,0x00,0x80,0x88,0x88,0xF8,0x7C,0x44,0x44,0xC4,0xC4,0x00,0x00,0x00,0x00,
 0x00,0x10,0x10,0x10,0x10,0x18,0x1F,0x0F,0x08,0x08,0x0F,0x0F,0x08,0x08,0x08,0x08,
 /*--  文字:  六  --6*/
 0x00,0x40,0x40,0x40,0x40,0x40,0x44,0x4C,0x68,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
 0x00,0x00,0x10,0x10,0x18,0x0C,0x06,0x02,0x00,0x01,0x03,0x06,0x1C,0x18,0x00,0x00,
 /*--  文字:  七  --7*/
 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x80,0xC0,0x40,0x60,0x20,0x20,0x20,0x00,
 0x00,0x02,0x02,0x02,0x02,0x03,0x01,0x0F,0x1F,0x10,0x10,0x10,0x10,0x1C,0x1C,0x00,
 /*--  文字:  八  --8*/
 0x00,0x00,0x00,0x00,0xC0,0xC4,0x0C,0x38,0x70,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
 0x00,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0E,0x0C,0x08,
 /*--  文字:  九  --9*/
 0x00,0x40,0x40,0x40,0x40,0xC0,0xFE,0x3E,0x20,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,
 0x00,0x20,0x20,0x30,0x18,0x0E,0x07,0x01,0x00,0x1F,0x3F,0x20,0x20,0x20,0x20,0x3C,
 /*--  文字:  初  --10*/
 0x00,0x20,0x20,0xA0,0xF0,0xF2,0xB6,0x84,0x20,0x20,0xE0,0xF0,0x10,0xF0,0xF0,0x00,
 0x00,0x04,0x06,0x03,0x01,0x3F,0x3F,0x13,0x1A,0x0C,0x07,0x0B,0x18,0x18,0x1F,0x07,
 /*--  文字:  廿  --11*/
 0x80,0x80,0x80,0x80,0xB8,0xF8,0xC0,0x40,0x40,0xC0,0xFE,0x3E,0x20,0x20,0x20,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x08,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,
 /*--  文字:  鼠  --12*/
 0x00,0x00,0x00,0x1C,0x7C,0x76,0xD3,0xEB,0xAA,0xBA,0xBE,0x0E,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x30,0x3F,0x1F,0x15,0x3F,0x3F,0x1A,0x0B,0x0F,0x1C,0x30,0x78,0x78,
 /*--  文字:  牛  --13*/
 0x00,0x00,0x00,0x40,0x78,0x38,0x10,0xFF,0xFF,0x88,0x88,0x88,0x88,0x80,0x80,0x00,
 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
 /*--  文字:  虎  --14*/
 0x00,0x00,0x00,0xF0,0xF0,0x50,0x50,0xFF,0xFF,0xAA,0xAA,0xDA,0xD8,0x08,0x00,0x00,
 0x00,0x40,0x60,0x38,0x5F,0x47,0x60,0x3C,0x1E,0x02,0x3E,0x7E,0x40,0x40,0x40,0x78,
 /*--  文字:  兔  --*/
 0x00,0x00,0x00,0xF0,0xF8,0x2C,0xE7,0xF7,0xBC,0xDC,0xF4,0x30,0x00,0x00,0x00,0x00,
 0x00,0x00,0x20,0x20,0x31,0x19,0x0F,0x07,0x1F,0x3F,0x22,0x26,0x24,0x20,0x20,0x3C,
 /*--  文字:  龙  --16*/
 0x00,0x00,0x20,0x20,0x20,0xE0,0xFE,0xDE,0xD0,0x10,0x12,0xD6,0xC4,0x00,0x00,0x00,
 0x00,0x20,0x30,0x18,0x0C,0x07,0x13,0x18,0x1F,0x3F,0x26,0x23,0x21,0x20,0x20,0x3C,
 /*--  文字:  蛇  --17*/
 0x00,0xE0,0xE0,0xFC,0xFC,0xF0,0xF0,0x60,0x60,0xA2,0xB6,0x14,0x90,0xB0,0x30,0x00,
 0x00,0x08,0x09,0x09,0x0F,0x07,0x06,0x06,0x04,0x00,0x1F,0x3F,0x23,0x21,0x20,0x3C,
 /*--  文字:  马  --18*/
 0x00,0x00,0x00,0x00,0x84,0xF4,0x74,0x86,0xE2,0xFE,0x9E,0x80,0x80,0x80,0x00,0x00,
 0x00,0x00,0x08,0x08,0x08,0x09,0x0D,0x05,0x05,0x04,0x24,0x64,0x60,0x3F,0x1F,0x00,
 /*--  文字:  羊  --19*/
 0x00,0x00,0x00,0x00,0x10,0x52,0x56,0xFC,0xFC,0x2F,0x2B,0x09,0x00,0x00,0x00,0x00,
 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x7F,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,
 /*--  文字:  猴  --20*/
 0x00,0x44,0x6C,0xF8,0xFC,0x6C,0xF8,0xFE,0xE6,0xE8,0xBC,0xDC,0x5C,0x50,0x10,0x00,
 0x00,0x04,0x16,0x33,0x3F,0x1F,0x00,0x3F,0x3F,0x33,0x1A,0x0F,0x0F,0x19,0x31,0x21,
 /*--  文字:  鸡  --21*/
 0x00,0x50,0xD0,0x98,0xC8,0xF8,0x38,0xF8,0xF8,0x2F,0x67,0x7C,0x7C,0x00,0x00,0x00,
 0x00,0x08,0x0C,0x06,0x03,0x13,0x16,0x14,0x13,0x1B,0x0A,0x0B,0x49,0x49,0x7F,0x3F,
 /*--  文字:  狗  --22*/
 0x00,0x40,0x44,0x6C,0xB8,0xFE,0xEE,0x60,0xB8,0x9E,0x96,0x10,0x10,0xF0,0xF0,0x00,
 0x00,0x04,0x04,0x06,0x13,0x31,0x3F,0x1F,0x03,0x03,0x03,0x13,0x30,0x30,0x1F,0x0F,
 /*--  文字:  猪  --23*/
 0x00,0x44,0x6C,0xB8,0xFC,0xEC,0x40,0x50,0xFE,0xFE,0x68,0x30,0x38,0x28,0x20,0x20,
 0x00,0x04,0x06,0x13,0x31,0x3F,0x1F,0x06,0x3F,0x3F,0x15,0x15,0x3F,0x3F,0x00,0x00,
 /*--  文字:  年  --24*/
 0x00,0x00,0x00,0x10,0xF8,0xEC,0x27,0x27,0xFC,0xFE,0x12,0x12,0x10,0x00,0x00,0x00,
 0x00,0x02,0x02,0x02,0x02,0x03,0x01,0x01,0x01,0x7F,0x7F,0x01,0x01,0x01,0x01,0x01,
 /*--  文字:  月  --25*/
 0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xB6,0x92,0x92,0xFE,0xFE,0x00,0x00,0x00,0x00,
 0x00,0x00,0x40,0x60,0x30,0x1C,0x0F,0x03,0x01,0x10,0x30,0x3F,0x1F,0x00,0x00,0x00,
 /*--  文字:  日  --26*/
 0x00,0x00,0x00,0x00,0xF8,0xF8,0x88,0xCC,0x44,0x44,0xFC,0xFC,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0C,0x04,0x04,0x0C,0x0F,0x0F,0x00,0x00,0x00,
 /*--  文字:  周  --27*/
 0x00,0x00,0x00,0xFC,0xFC,0xA4,0xA4,0xFE,0x7A,0x52,0x52,0x42,0xFE,0xFE,0x00,0x00,
 0x00,0x40,0x60,0x38,0x1F,0x07,0x06,0x0E,0x0B,0x09,0x0F,0x27,0x60,0x7F,0x3F,0x00,
 };
 unsigned char code number[]={
 /*--  文字:  0  --*/
 /*--  新宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
 /*--  文字:  1  --*/
 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
 /*--  文字:  2  --*/
 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
 /*--  文字:  3  --*/
 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
 /*--  文字:  4  --*/
 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
 /*--  文字:  5  --*/
 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
 /*--  文字:  6  --*/
 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
 /*--  文字:  7  --*/
 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
 /*--  文字:  8  --*/
 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
 /*--  文字:  9  --*/
 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
 /*--  文字:  :  --*/
 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
 };
 //*--  调入了一幅图像:漂亮女孩看过来----猪猪  --*/
 /*--  宽度x高度=64x64  --*/
 unsigned char code bmp208[]={
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x02,0x10,0x01,0x00,0x00,0x00,0x00,
 0xC8,0x1F,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x00,0x80,0x01,0x00,0x38,
 0x74,0x14,0xF5,0x07,0x60,0x01,0x00,0x3C,0x54,0x0D,0x5D,0x05,0x10,0xF1,0x00,0x3E,
 0x7C,0x05,0x57,0x05,0x8C,0x0C,0x03,0x37,0x54,0x15,0x55,0x05,0x82,0x02,0x84,0x23,
 0x7C,0x1D,0x55,0x05,0x41,0x01,0xC8,0x00,0x54,0x05,0xD5,0x87,0xA0,0xE0,0xD0,0x07,
 0x74,0x0D,0x11,0x40,0x60,0x10,0x55,0x08,0x04,0x14,0x10,0x40,0x18,0x08,0x2A,0x17,
 0x00,0x00,0x00,0x40,0x80,0x09,0x34,0x2D,0x88,0x11,0x11,0x84,0x44,0x12,0x24,0x0D,
 0x88,0x10,0x16,0x82,0x22,0x94,0x49,0x07,0xE8,0x08,0xF0,0x41,0x22,0x97,0x49,0x03,
 0xA8,0x06,0x04,0x42,0x44,0x2B,0x90,0x01,0xA8,0x02,0x14,0x44,0x80,0x29,0x90,0x03,
 0xAC,0x02,0x64,0x44,0x01,0x28,0x93,0x03,0xA8,0x02,0x04,0xC5,0x84,0x21,0x93,0x01,
 0xA8,0x1E,0x04,0x45,0x42,0x12,0x48,0x03,0xE8,0x10,0xFF,0x45,0x22,0x14,0x48,0x07,
 0x88,0x10,0x04,0x44,0x24,0x17,0x64,0x0D,0x88,0x1D,0x04,0x44,0x40,0x23,0x53,0x0D,
 0x00,0x00,0x00,0x40,0x8C,0xC1,0x40,0x07,0x10,0x13,0x20,0x82,0x30,0xE0,0x20,0x20,
 0xF0,0x0A,0x22,0x82,0x42,0x10,0x21,0x10,0x1C,0x04,0x2A,0x01,0x81,0x00,0x50,0x08,
 0xF0,0x0B,0xB2,0x80,0x80,0x00,0xD0,0x07,0x10,0x00,0x62,0x80,0x00,0x01,0xC8,0x00,
 0x10,0x1F,0xFF,0x87,0x00,0x03,0x8C,0x23,0x10,0x11,0x62,0x80,0x00,0x0D,0x03,0x37,
 0xFC,0x11,0xB2,0x00,0x07,0xF2,0x00,0x3E,0x10,0x11,0x2A,0x01,0x78,0x02,0x3C,0x20,
 0x10,0x11,0x22,0x02,0x80,0x03,0x42,0x20,0x10,0x1F,0x20,0x02,0x00,0x00,0x99,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,0x10,0x10,0x00,0x00,0x00,0x00,0x01,0x02,
 0xF0,0x0B,0x1C,0x00,0x00,0x00,0x02,0x04,0x1C,0x04,0x7E,0x03,0x00,0x00,0x06,0x08,
 0xF0,0x0B,0x7E,0x03,0x00,0x00,0x02,0x0C,0x00,0x00,0x1C,0x00,0x00,0x00,0x01,0x06,
 0xF8,0x1F,0x00,0x00,0x00,0x00,0x01,0x03,0xA8,0x10,0x00,0x00,0x00,0x00,0x81,0x01,
 0xAC,0x0B,0x00,0x00,0x00,0x00,0xFF,0x00,0xA8,0x04,0x00,0x00,0x00,0x00,0x42,0x00,
 0xF8,0x0A,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x05,0x01,
 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,
 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x0C,
 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
 0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
 };
 //定义定时计数,当sec_count==20时,秒加一
 uchar sec_count=0;
 code uchar table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表
 ///月份数据表
 code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
 code uint day_code2[3]={0x111,0x130,0x14e};
 bit c_moon;
 data uchar year_moon,month_moon,day_moon;
 /******************************************************************************************
 * 函数名称    :get_moon_day
 * 功能描述    :用于读取数据表中农历月的大月或小月,如果该月为大返回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);}
 }
 }
 /******************************************************************************************
 * 函数名称    :Conversion
 * 功能描述    :输入阳历数据,输出阴历数据(只允许1901-2099年)
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void Conversion(bit c,char year,char month,char day)
 {                         //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据
 uchar temp1,temp2,temp3,month_p;
 uint temp4,table_addr;
 bit flag2,flag_y;
 
 //定位数据表地址
 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)&&(year!=0))
 temp4+=1; //如果公历月大于2月并且该年的2月为闰月,天数加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;
 //原程序这里又把这得出的值变回BCD码。但根据我后面的程序,我不需要。
 //后面用来显示的农历信息的程序分别是disp_t3()和disp_t4()
 year_moon=year;
 month_moon=month;
 day_moon=day;
 }
 /******************************************************************************************
 * 函数名称    :Conver_week
 * 功能描述    :输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年)
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * 算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期,但如果是在
 闰年又不到3 月份上述之和要减一天再除7星期数。余数为0时,为星期天。
 
 ******************************************************************************************/
 void Conver_week()
 {//century=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据
 uchar temp1,temp2;
 temp1=year;
 if (century==0){temp1=temp1+100;}  //如果为21世纪,年份数加100
 temp2=temp1/4;                     //所过闰年数只算1900年之后的
 temp2=temp1+temp2;
 temp2=temp2%7;                     //为节省资源,先进行一次取余,避免数大于255
 temp2=temp2+day+table_week[month-1];
 if (year%0x4==0&&month<3)temp2-=1;
 week=temp2%7;
 }
 /******************************************************************************************
 * 函数名称    :lcd_busy
 * 功能描述    :判别LCD12864忙否?不忙才跳出此程序
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void lcd_busy(void)
 {
 LCD_di=0;
 LCD_rw=1;
 LCD_db=0xff;
 while (1)
 {
 LCD_e=1;
 if (LCD_db<0x80)                        //如果要进行简单的软件调试,可在这句前面加"//"跳过
 break;
 LCD_e=0;
 }
 LCD_e=0;
 }
 /******************************************************************************************
 * 函数名称    :set_xy
 * 功能描述    :设置显示位置! X,Y分别代表横纵坐标!
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void set_xy(unsigned char x,unsigned char y)
 {
 if (x>=64)
 {
 LCD_csa=0;
 LCD_csb=1;
 }
 else
 {
 LCD_csa=1;
 LCD_csb=0;
 }       //判别是左半屏,还是右半屏
 lcd_busy();
 LCD_di=LCD_rw=0;
 LCD_db=0x40|x;                            //列地址赋值,x取值0----64
 LCD_e=1;LCD_e=0;
 lcd_busy();
 LCD_di=LCD_rw=0;
 LCD_db=0xb8|y;                            //页面地址赋值,y取值0----8
 LCD_e=1;LCD_e=0;
 LCD_db=0xff;
 }
 /******************************************************************************************
 * 函数名称    :lw
 * 功能描述    :在指定的位置显示数据
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void lw(uchar x,uchar y,uchar dd)
 {
 set_xy(x,y);
 lcd_busy();
 LCD_di=1;
 LCD_rw=0;
 LCD_db=dd;                                //数据送显
 LCD_e=1;
 LCD_e=0;
 LCD_db=0xff;
 }
 /******************************************************************************************
 * 函数名称    :Delay
 * 功能描述    :
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void Delay12864(unsigned int t)//
 {
 unsigned int i,j;
 for(i=0;i<t;i++)
 {
 for(j=0;j<10;j++);
 }
 }
 /******************************************************************************************
 * 函数名称    :lcd_init
 * 功能描述    :显示初始化
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 #pragma disable
 void lcd_init(void)
 {
 unsigned char x,y;
 /*开显示*/
 LCD_rst=0;
 Delay12864(100);
 LCD_rst=1;
 Delay12864(100);
 LCD_e=LCD_di=LCD_rw=0;
 LCD_csa=LCD_csb=0;
 LCD_csa=1;                                //选择左半屏显示
 LCD_db=0x3f;                              //打开左半屏显示
 LCD_e=1;LCD_e=0;LCD_csa=0;
 LCD_csb=1;                                //选择右半屏显示
 LCD_db=0x3f;                              //打开右半屏显示
 LCD_e=1;LCD_e=0;LCD_csb=0;
 /*0行开始显示*/
 LCD_csa=1;lcd_busy();
 LCD_di=LCD_rw=0;LCD_db=0xc0;              //设置左半屏起始行,是第一行
 LCD_e=1;LCD_e=0;LCD_csa=0;
 LCD_csb=1;lcd_busy();
 LCD_di=LCD_rw=0;LCD_db=0xc0;              //设置右半屏起始行,是第一行
 LCD_e=1;LCD_e=0;LCD_csb=0;
 for (y=0;y<8;y++)
 {
 for (x=0;x<128;x++) lw(x,y,0);          //全屏清零显示
 }
 }
 /******************************************************************************************
 * 函数名称    :dis_map
 * 功能描述    :显示一幅图象:x,y分别表示图象的行地址和页面地址;map表示图象的数据表;
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * lon和high分别表示图象和长和高;fb表示是否反白显示.本函数为按列扫描
 
 ******************************************************************************************/
 void dis_map(uchar x,uchar y,uchar map[],uchar lon,uchar high,bit fb)
 {
 uchar dd;
 uint i,j;
 for(i=0;i<lon;i++)                    //按列循环,lon表示共有多少列
 for (j=0;j<high/8;j++)                //每列存有high/8个数据,逐一扫描
 {
 dd=map[i*high/8+j];
 if (fb) dd=255-dd;                  //由fb决定是否反白显示
 lw(x+i,y+j,dd);
 }
 }
 /******************************************************************************************
 * 函数名称    :delayX10ms
 * 功能描述    :
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void delayX10ms(uint count)
 {
 uint i,j,k;
 for (i=0; i<count; i++)
 for(j=0; j<10; j++)
 for(k=0; k<120; k++);
 }
 /******************************************************************************************
 * 函数名称    :dz
 * 功能描述    :显示一个汉字,n代表字表里第n个字!fb==1:反白显示
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * 显示方式为先上半部第一列,再下半部第一列,然后上半部第二列...
 
 ******************************************************************************************/
 void dz(uchar x,uchar y,uchar n,uchar fb)
 {
 unsigned char i,dd;
 for (i=0;i<16;i++)
 {
 dd=hz[i+n*32];
 if (fb) dd=255-dd;
 lw(x*8+i,y,dd);                   //显示汉字的上半部分
 dd=hz[i+n*32+16];
 if (fb) dd=255-dd;
 lw(x*8+i,y+1,dd);                 //显示汉字的下半部分
 }
 }
 /******************************************************************************************
 * 函数名称    :dn
 * 功能描述    :显示一个数字,n代表字表里第n个数字!fb==1:反白显示
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * 显示方式为先上半部第一列,再下半部第一列,然后上半部第二列...
 
 ******************************************************************************************/
 void dn(uchar x,uchar y,uchar n,uchar fb)
 {
 unsigned char i,dd;
 for (i=0;i<8;i++)
 {
 dd=number[i+n*16];
 if (fb) dd=255-dd;
 lw(x*8+i,y,dd);                   //显示数字的上半部分
 dd=number[i+n*16+8];
 if (fb) dd=255-dd;
 lw(x*8+i,y+1,dd);                 //显示数字的下半部分
 }
 }
 /******************************************************************************************
 * 函数名称    :max_day
 * 功能描述    :阳历月当月的最大天数。参数由全局变量year,month得到。
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 max_day()
 {
 switch (month)
 {
 case 1:return(31);
 //如果是2月且是闰年则返回29,否则28
 //闰年的判断方法是:年份能被4整除但又不能被100整除,则是
 case 2:if ((year%4==0)&&(year!=0)) return(29); else return(28);
 case 3:return(31);
 case 4:return(30);
 case 5:return(31);
 case 6:return(30);
 case 7:return(31);
 case 8:return(31);
 case 9:return(30);
 case 10:return(31);
 case 11:return(30);
 case 12:return(31);
 }
 return(31);                              //防止意外月份发生使天数归1。此句可以不
 }
 /******************************************************************************************
 * 函数名称    :time0
 * 功能描述    :定时程序,当中断20次时,秒加一。
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void time0(void) interrupt 1
 {
 TH0=0x3C;
 TL0=0xB0;
 if(++sec_count>=20)  sec_count=0,sec++;
 }
 /******************************************************************************************
 * 函数名称    :Delay
 * 功能描述    :时间进位、调整处理程序。
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * 每次时间有所改变,如年份改变,日期改变,分钟改变,都必须调用此函数
 * 并且定时器在运行时,每秒钟都必须调用此程序!切记!!!!!!!!!!!!!!!!!!!
 
 ******************************************************************************************/
 void verify_time (void)
 {
 if(sec>=60)
 sec=0,min++;
 else if(sec<0) sec=0;
 if(min>=60)
 min=0,hour++;
 else if(min<0)min=59;
 if(hour>=24)
 hour=0,day++;
 else if(hour<0)hour=23;
 
 if(day>max_day())
 day=1,month++;
 else if(day<1)day=max_day();
 if(month>12)
 month=1,year++;
 else if(month<1)month=12;
 if(year>=100)
 century=~century,year=century;
 else
 {
 if(year<1&¢ury) century=~century,year=99;
 if(year<0&&(~century)) century=~century,year=99;
 }
 }
 /******************************************************************
 本函数主要用来设置日期和时间的时候,选中的参数可以反白显示。
 右屏第一行显示程序,由which决定第几天参数黑显。
 如which==1时,年份黑显。
 ******************************************************************/
 /******************************************************************************************
 * 函数名称    :Delay
 * 功能描述    :
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void disp_t1(uchar which)
 {
 bit c_year=0,c_month=0,c_day=0;
 if (which==1) c_year=1;
 if (which==2) c_month=1;
 if (which==3) c_day=1;
 if (century) dn(8,0,1,c_year),dn(9,0,9,c_year);
 else dn(8,0,2,c_year),dn(9,0,0,c_year);         //显示世纪,即年份的前两位
 dn(10,0,year/10,c_year);
 dn(11,0,year%10,c_year);                        //显示年份的后两位
 dn(12,0,month/10,c_month);
 dn(13,0,month%10,c_month);                      //显示月份
 dn(14,0,day/10,c_day);
 dn(15,0,day%10,c_day);                          //显示日期
 }
 /******************************************************************************************
 * 函数名称    :Delay
 * 功能描述    :本函数主要用来设置日期和时间的时候,相应的参数可以反白显示。
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * 右屏第二行显示程序,由which决定第几天参数黑显。
 * 如which==2时,分钟黑显。
 
 ******************************************************************************************/
 void disp_t2(uchar which)
 {
 bit c_hour=0,c_min=0,c_sec=0;
 if (which==1) c_hour=1;
 if (which==2) c_min=1;
 if (which==3) c_sec=1;
 dn(8,2,hour/10,c_hour);
 dn(9,2,hour%10,c_hour);                  //显示小时
 dn(10,2,10,0);                           //显示冒号
 dn(11,2,min/10,c_min);
 dn(12,2,min%10,c_min);                   //显示分钟
 dn(13,2,10,0);                           //显示冒号
 dn(14,2,sec/10,c_sec);
 dn(15,2,sec%10,c_sec);                   //显示秒钟
 }
 /******************************************************************************************
 * 函数名称    :disp_t3
 * 功能描述    :右屏第三行显示程序
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void disp_t3()
 {
 uchar temp;
 dz(8,4,27,0);                            //第三行前两列显示“周”字
 Conver_week();
 if(week) temp=week;                      //赋week值为1----6,用来显示“一”----“六”
 else week=26;                            //赋week值为0时,赋值26用来显示“日”
 dz(10,4,week,0);
 verify_time();
 Conversion(century,year,month,day);      //得到农历日期
 if(c_moon) temp=year_moon%12+12;         //如果是19世纪,则可直接得出年的属性
 else       temp=(year_moon+100)%12+12;   //农历年也过了世纪,则农历年上加100再求属性
 dz(12,4,temp,1);                         //显示属性
 dz(14,4,24,1);                           //显示“年”
 }
 /******************************************************************************************
 * 函数名称    :disp_t4
 * 功能描述    :右屏第四行显示程序
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void disp_t4()
 {
 uchar temp1,temp2;
 verify_time();
 Conversion(century,year,month,day);      //得到农历日期
 temp1=month_moon/10;
 temp2=month_moon%10;
 if(temp1==0)
 dz(8,6,temp2,1),dz(10,6,25,1);        //月份高位为0,则月份前位显月份,后位显示“月”字
 else if (temp1&&temp2)
 dz(8,6,0,1),dz(10,6,temp2,1);  //月份高位低位都大于0,则月份高位显“十”,后位显日。
 else dz(8,6,0,1),dz(10,6,25,1);     //月份高位为1而低位为0,则前位显“十”,后位显“月”
 temp1=day_moon/10;
 temp2=day_moon%10;
 switch (temp1)
 {
 case 0:  dz(12,6,10,1),dz(14,6,temp2,1);break;   //日期高位为0,则前位显“初”
 case 1:  if(temp2)
 dz(12,6,0,1), dz(14,6,temp2,1);       //日期高位为1且低位不为0,则前位显“十”
 else
 dz(12,6,10,1),dz(12,6,0,1);           //日期高位为1且低位为0,则显“初十”
 break;
 case 2:  dz(12,6,11,1),dz(14,6,temp2,1);break;   //日期高位为2,则前位显“廿”
 case 3:  dz(12,6,3,1), dz(14,6,temp2,1);break;   //日期高位为3,则前位显“三”,低位显“十”
 }
 }
 /******************************************************************************************
 * 函数名称    :disp_time
 * 功能描述    :
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void disp_time()
 {
 verify_time();                        //确认时间正确
 disp_t1(0);                           //右屏第一行显示程序
 disp_t2(0);                           //右屏第二行显示程序
 disp_t3();                            //右屏第三行显示程序
 disp_t4();                            //右屏第四行显示程序
 }
 /******************************************************************************************
 * 函数名称    :initial
 * 功能描述    :主程序初始化
 * 参数        :  参数名称: 输入/输出? 类型  描述
 
 ******************************************************************************************/
 void initial (void)
 {
 EA=1;
 ET0=1;
 TMOD=0x01;
 TH0=0x3C;
 TL0=0xB0;
 
 lcd_init();                       //液晶初始化
 dis_map(0,0,bmp208,64,64,0);      //左屏显示图片
 
 hour=12;
 min=0;
 sec=0;              //分别对时分秒赋初值
 year=6;
 month=8;
 day=13;            //分别对年月日赋初值
 century=0;                        //对世纪赋初值
 
 Conversion(century,year,month,day);
 TR0=1;
 }
 /******************************************************************************************
 * 函数名称    :key_value
 * 功能描述    :
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * 按键程序,因为本程序所剩端口良多,且这里不程序主要关注点。
 * 所以直接以端口来对应按键。
 * P1.0对应“调整”键          P1.1对应“增加”键
 * P1.2对应“减少”键          P1.3对应“复位”键
 ******************************************************************************************/
 key_value()
 {
 k4 = 1;
 if (k4!=1)
 {
 delayX10ms(5);
 if(k1==1)   return(1);         //“调整”键
 if(k2==1)   return(2);         //“增加”键
 if(k3==1)   return(3);         //“减少”键
 
 }
 return(0);                           //无按键按下
 }
 
 /******************************************************************************************
 * 函数名称    :adjust_time
 * 功能描述    :
 * 参数        :  参数名称: 输入/输出? 类型  描述
 * 进入本函数后,先停止时钟计时器。退出本程序后将会启动。如果有调整到秒,定时器重新赋初值。
 * 本函数中,t变量用来判断是否长时间没有按键动作。当t变量增加到65500后,调整程序退出。
 * i变量用来决定当前调整数的黑白闪烁。i<128则黑显,反之则白显。
 * j变量用来决定按键时长,长时间按调整则跳出调整程序。长时间按复位,则复位时间,并跳出。
 * w_h取值0,1。表示调整的是那行程序。0为右屏第一行,1为右屏第二行。
 * w_s取值为1,2,3。表示调整当前行的第几个参数。
 * 比如w_h==1,w_s==2时。表示取第二行的第二个参数。即为公历月。
 
 ******************************************************************************************/
 void adjust_time()
 {
 uchar i=0,j=0,t=0,key,w_s=1;
 bit w_h=0;
 TR0=0;
 while(P2==0x06);                            //等待“调整”键松开
 disp_t1(1);                                 //年显示闪烁,黑白显示,i决定黑或白
 
 //等待按键或时间到退出程序。
 while(1)
 {
 //显示相应的调整参数闪烁。
 i=i+40;
 if(w_h==0)                               //如果参数在第一行
 {
 if (i/128) disp_t1(0);
 else disp_t1(w_s);                    //由i决定黑或白显,w_s决定显示第几个参数
 }
 else                                     //否则参数在第二行
 {
 if (i/128) disp_t2(0);
 else disp_t2(w_s);                    //由i决定黑或白显,w_s决定显示第几个参数
 }
 key=key_value();                         //取按键取
 //如果调整按键按下
 if (key==1)
 {
 t=0;j=0;                              //函数等待参数t和按键等待参数j清零
 while (key==1)
 {
 if(++j<=30) ;                      //判断是否长时间按。
 //如果长时间按调整。确认时间的正确性,开启时钟,并退出本函数
 else
 {
 verify_time();disp_time();
 while(P1==0x0E)P1=0x0F;         //等待按键放松,退出调整函数
 TR0=1;return;
 }
 key=key_value();
 }
 if(w_s++>=3)
 {
 w_h=~w_h,w_s=1;                    //不是长时间按,则转换相应的调整参数
 if(w_h) disp_t1(0);
 else    disp_t2(0);                //参数换行闪后,防止换行前有黑显示。
 }
 }
 //如果增加键按下
 if(key==2)
 {
 t=0;                                  //函数等待参数t清零。
 //如果被调整数在第一行,则相应的参数加一
 if (w_h==0)
 {
 if(w_s==1) year++,verify_time();
 if(w_s==2) if(month++>=12)month=1;
 if(w_s==3) if(day++>=max_day())day=1;
 }
 //否则被调整数在第二行,则相应的参数加一
 else
 {
 if(w_s==1) if(hour++>=24)hour=0;
 if(w_s==2) if(min++>=60) min=0;
 //调整秒,则秒清零,定时器重新赋初值
 if(w_s==3) {sec=0;sec_count=0;TH0=0x3C;TL0=0xB0;}
 }
 }
 //如果减少键按下
 if(key==3)
 {
 t=0;                                   //函数等待参数t清零。
 //如果被调整数在第一行,则相应的参数减一
 if (w_h==0)
 {
 if(w_s==1) year--,verify_time();
 if(w_s==2) month--,verify_time();
 if(w_s==3) day--,verify_time();
 }
 //否则被调整数在第二行,则相应的参数减一
 else
 {
 if(w_s==1) hour--,verify_time();
 if(w_s==2) min--,verify_time();
 //调整秒,则秒清零,定时器重新赋初值
 if(w_s==3) {sec=0;sec_count=0;TH0=0x3C;TL0=0xB0;verify_time();}
 }
 }
 //如果复位键按下
 if (key==4)
 {
 t=0;j=0;                              //函数等待参数t和按键等待参数j清零。
 while(key==4)
 {
 if(++j<=30)  ;                     //长时间按时,计时
 //到规定时间,时间复位并退出调整函数
 else
 {
 initial();verify_time();disp_time();
 while(P1==0x07) P1=0x0F;        //等待按键放松,退出调整函数
 TR0=1;return;
 }
 key=key_value();
 }
 }
 disp_t3();disp_t4();                        //显示相应的星期和农历日期
 if(++t<=100)  delayX10ms(10);               //空闲等待
 //如果规定时间到还没有按键产生,则确认时间,显示,并退出此函数
 else { verify_time(); disp_time(); TR0=1;return; }
 }
 }
 /******************************************************************************************
 * 函数名称    :Delay
 * 功能描述    :
 ******************************************************************************************/
 void main(void)
 {
 uchar i=0,key=0;
 delayX10ms(100);                              //通电延时,防止LCD器件的电源抖动
 initial();
 while(1)
 {
 verify_time();                              //确认时间正确性
 disp_time();                                //这里调用显示时间程序
 key=key_value();
 if (key)                                 //判断是否有按键按下
 {
 if(key==1)   adjust_time();               //进入调整功能
 if(key==4)   if(++i>=60) initial();       //如果长按复位键,将时间初始化
 }
 }
 }
 
 
 
 | 
 |