找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4346|回复: 3
收起左侧

最强万年历 支持所有的单片机ARM、AVR、MSP430、PIC等(支持C开发)

[复制链接]
ID:206361 发表于 2017-5-31 15:25 | 显示全部楼层 |阅读模式
温度万年历
1.png
0.png

单片机源程序如下:
  1. /*
  2. **描        述: 最强万年历   
  3. **              支持所有的单片机、ARM、AVR、MSP430、PIC等(支持C开发)
  4. **              可嵌入任何标准C编译器  BC++、VC、ADS、KEIL等
  5. **用        法: 在BC++4.5上可仿真

  6. #include <reg51.h>
  7. #include <absacc.h>

  8. #include "zimo.h"   
  9. #include "ds1302.h"
  10. #include "ds18b20.h"
  11. #include "lcd12864.h"

  12. //按键定义
  13. sbit KEY0 = P1^1;
  14. sbit KEY1 = P1^2;
  15. sbit KEY2 = P1^3;
  16. sbit KEY3 = P1^4;

  17. //键盘函数所要用到的变量
  18. unsigned char key_operate = 0;        
  19. unsigned char timer =0;
  20. unsigned char key_flag;
  21. unsigned int  counter=0;
  22. unsigned char Lcd_t = 0;           //LCD刷新间隔
  23. unsigned char flicker = 0;           //调时闪烁间隔
  24. //-------------------------

  25. void InitTimer0(void)//产生10ms时间间隔
  26. {

  27. TMOD = (TMOD & 0XF0) | 0X01; //定时器0工作在模式1,16Bit定时器模式
  28. TH0 = (65536 - 8000)/256;
  29. TL0 = (65536 - 8000)%256;

  30. TR0 =1; ET0 =1;//开启定时器和中断
  31. EA = 1;
  32. }

  33. /*****************************阳历转换阴历***********************************/
  34. code unsigned char year_code[597]={
  35.                     0x04,0xAe,0x53,    //1901 0
  36.                     0x0A,0x57,0x48,    //1902 3
  37.                     0x55,0x26,0xBd,    //1903 6
  38.                     0x0d,0x26,0x50,    //1904 9
  39.                     0x0d,0x95,0x44,    //1905 12
  40.                     0x46,0xAA,0xB9,    //1906 15
  41.                     0x05,0x6A,0x4d,    //1907 18
  42.                     0x09,0xAd,0x42,    //1908 21
  43.                     0x24,0xAe,0xB6,    //1909
  44.                     0x04,0xAe,0x4A,    //1910
  45.                     0x6A,0x4d,0xBe,    //1911
  46.                     0x0A,0x4d,0x52,    //1912
  47.                     0x0d,0x25,0x46,    //1913
  48.                     0x5d,0x52,0xBA,    //1914
  49.                     0x0B,0x54,0x4e,    //1915
  50.                     0x0d,0x6A,0x43,    //1916
  51.                     0x29,0x6d,0x37,    //1917
  52.                     0x09,0x5B,0x4B,    //1918
  53.                     0x74,0x9B,0xC1,    //1919
  54.                     0x04,0x97,0x54,    //1920
  55.                     0x0A,0x4B,0x48,    //1921
  56.                     0x5B,0x25,0xBC,    //1922
  57.                     0x06,0xA5,0x50,    //1923
  58.                     0x06,0xd4,0x45,    //1924
  59.                     0x4A,0xdA,0xB8,    //1925
  60.                     0x02,0xB6,0x4d,    //1926
  61.                     0x09,0x57,0x42,    //1927
  62.                     0x24,0x97,0xB7,    //1928
  63.                     0x04,0x97,0x4A,    //1929
  64.                     0x66,0x4B,0x3e,    //1930
  65.                     0x0d,0x4A,0x51,    //1931
  66.                     0x0e,0xA5,0x46,    //1932
  67.                     0x56,0xd4,0xBA,    //1933
  68.                     0x05,0xAd,0x4e,    //1934
  69.                     0x02,0xB6,0x44,    //1935
  70.                     0x39,0x37,0x38,    //1936
  71.                     0x09,0x2e,0x4B,    //1937
  72.                     0x7C,0x96,0xBf,    //1938
  73.                     0x0C,0x95,0x53,    //1939
  74.                     0x0d,0x4A,0x48,    //1940
  75.                     0x6d,0xA5,0x3B,    //1941
  76.                     0x0B,0x55,0x4f,    //1942
  77.                     0x05,0x6A,0x45,    //1943
  78.                     0x4A,0xAd,0xB9,    //1944
  79.                     0x02,0x5d,0x4d,    //1945
  80.                     0x09,0x2d,0x42,    //1946
  81.                     0x2C,0x95,0xB6,    //1947
  82.                     0x0A,0x95,0x4A,    //1948
  83.                     0x7B,0x4A,0xBd,    //1949
  84.                     0x06,0xCA,0x51,    //1950
  85.                     0x0B,0x55,0x46,    //1951
  86.                     0x55,0x5A,0xBB,    //1952
  87.                     0x04,0xdA,0x4e,    //1953
  88.                     0x0A,0x5B,0x43,    //1954
  89.                     0x35,0x2B,0xB8,    //1955
  90.                     0x05,0x2B,0x4C,    //1956
  91.                     0x8A,0x95,0x3f,    //1957
  92.                     0x0e,0x95,0x52,    //1958
  93.                     0x06,0xAA,0x48,    //1959
  94.                     0x7A,0xd5,0x3C,    //1960
  95.                     0x0A,0xB5,0x4f,    //1961
  96.                     0x04,0xB6,0x45,    //1962
  97.                     0x4A,0x57,0x39,    //1963
  98.                     0x0A,0x57,0x4d,    //1964
  99.                     0x05,0x26,0x42,    //1965
  100.                     0x3e,0x93,0x35,    //1966
  101.                     0x0d,0x95,0x49,    //1967
  102.                     0x75,0xAA,0xBe,    //1968
  103.                     0x05,0x6A,0x51,    //1969
  104.                     0x09,0x6d,0x46,    //1970
  105.                     0x54,0xAe,0xBB,    //1971
  106.                     0x04,0xAd,0x4f,    //1972
  107.                     0x0A,0x4d,0x43,    //1973
  108.                     0x4d,0x26,0xB7,    //1974
  109.                     0x0d,0x25,0x4B,    //1975
  110.                     0x8d,0x52,0xBf,    //1976
  111.                     0x0B,0x54,0x52,    //1977
  112.                     0x0B,0x6A,0x47,    //1978
  113.                     0x69,0x6d,0x3C,    //1979
  114.                     0x09,0x5B,0x50,    //1980
  115.                     0x04,0x9B,0x45,    //1981
  116.                     0x4A,0x4B,0xB9,    //1982
  117.                     0x0A,0x4B,0x4d,    //1983
  118.                     0xAB,0x25,0xC2,    //1984
  119.                     0x06,0xA5,0x54,    //1985
  120.                     0x06,0xd4,0x49,    //1986
  121.                     0x6A,0xdA,0x3d,    //1987
  122.                     0x0A,0xB6,0x51,    //1988
  123.                     0x09,0x37,0x46,    //1989
  124.                     0x54,0x97,0xBB,    //1990
  125.                     0x04,0x97,0x4f,    //1991
  126.                     0x06,0x4B,0x44,    //1992
  127.                     0x36,0xA5,0x37,    //1993
  128.                     0x0e,0xA5,0x4A,    //1994
  129.                     0x86,0xB2,0xBf,    //1995
  130.                     0x05,0xAC,0x53,    //1996
  131.                     0x0A,0xB6,0x47,    //1997
  132.                     0x59,0x36,0xBC,    //1998
  133.                     0x09,0x2e,0x50,    //1999 294
  134.                     0x0C,0x96,0x45,    //2000 297
  135.                     0x4d,0x4A,0xB8,    //2001
  136.                     0x0d,0x4A,0x4C,    //2002
  137.                     0x0d,0xA5,0x41,    //2003
  138.                     0x25,0xAA,0xB6,    //2004
  139.                     0x05,0x6A,0x49,    //2005
  140.                     0x7A,0xAd,0xBd,    //2006
  141.                     0x02,0x5d,0x52,    //2007
  142.                     0x09,0x2d,0x47,    //2008
  143.                     0x5C,0x95,0xBA,    //2009
  144.                     0x0A,0x95,0x4e,    //2010
  145.                     0x0B,0x4A,0x43,    //2011
  146.                     0x4B,0x55,0x37,    //2012
  147.                     0x0A,0xd5,0x4A,    //2013
  148.                     0x95,0x5A,0xBf,    //2014
  149.                     0x04,0xBA,0x53,    //2015
  150.                     0x0A,0x5B,0x48,    //2016
  151.                     0x65,0x2B,0xBC,    //2017
  152.                     0x05,0x2B,0x50,    //2018
  153.                     0x0A,0x93,0x45,    //2019
  154.                     0x47,0x4A,0xB9,    //2020
  155.                     0x06,0xAA,0x4C,    //2021
  156.                     0x0A,0xd5,0x41,    //2022
  157.                     0x24,0xdA,0xB6,    //2023
  158.                     0x04,0xB6,0x4A,    //2024
  159.                     0x69,0x57,0x3d,    //2025
  160.                     0x0A,0x4e,0x51,    //2026
  161.                     0x0d,0x26,0x46,    //2027
  162.                     0x5e,0x93,0x3A,    //2028
  163.                     0x0d,0x53,0x4d,    //2029
  164.                     0x05,0xAA,0x43,    //2030
  165.                     0x36,0xB5,0x37,    //2031
  166.                     0x09,0x6d,0x4B,    //2032
  167.                     0xB4,0xAe,0xBf,    //2033
  168.                     0x04,0xAd,0x53,    //2034
  169.                     0x0A,0x4d,0x48,    //2035
  170.                     0x6d,0x25,0xBC,    //2036
  171.                     0x0d,0x25,0x4f,    //2037
  172.                     0x0d,0x52,0x44,    //2038
  173.                     0x5d,0xAA,0x38,    //2039
  174.                     0x0B,0x5A,0x4C,    //2040
  175.                     0x05,0x6d,0x41,    //2041
  176.                     0x24,0xAd,0xB6,    //2042
  177.                     0x04,0x9B,0x4A,    //2043
  178.                     0x7A,0x4B,0xBe,    //2044
  179.                     0x0A,0x4B,0x51,    //2045
  180.                     0x0A,0xA5,0x46,    //2046
  181.                     0x5B,0x52,0xBA,    //2047
  182.                     0x06,0xd2,0x4e,    //2048
  183.                     0x0A,0xdA,0x42,    //2049
  184.                     0x35,0x5B,0x37,    //2050
  185.                     0x09,0x37,0x4B,    //2051
  186.                     0x84,0x97,0xC1,    //2052
  187.                     0x04,0x97,0x53,    //2053
  188.                     0x06,0x4B,0x48,    //2054
  189.                     0x66,0xA5,0x3C,    //2055
  190.                     0x0e,0xA5,0x4f,    //2056
  191.                     0x06,0xB2,0x44,    //2057
  192.                     0x4A,0xB6,0x38,    //2058
  193.                     0x0A,0xAe,0x4C,    //2059
  194.                     0x09,0x2e,0x42,    //2060
  195.                     0x3C,0x97,0x35,    //2061
  196.                     0x0C,0x96,0x49,    //2062
  197.                     0x7d,0x4A,0xBd,    //2063
  198.                     0x0d,0x4A,0x51,    //2064
  199.                     0x0d,0xA5,0x45,    //2065
  200.                     0x55,0xAA,0xBA,    //2066
  201.                     0x05,0x6A,0x4e,    //2067
  202.                     0x0A,0x6d,0x43,    //2068
  203.                     0x45,0x2e,0xB7,    //2069
  204.                     0x05,0x2d,0x4B,    //2070
  205.                     0x8A,0x95,0xBf,    //2071
  206.                     0x0A,0x95,0x53,    //2072
  207.                     0x0B,0x4A,0x47,    //2073
  208.                     0x6B,0x55,0x3B,    //2074
  209.                     0x0A,0xd5,0x4f,    //2075
  210.                     0x05,0x5A,0x45,    //2076
  211.                     0x4A,0x5d,0x38,    //2077
  212.                     0x0A,0x5B,0x4C,    //2078
  213.                     0x05,0x2B,0x42,    //2079
  214.                     0x3A,0x93,0xB6,    //2080
  215.                     0x06,0x93,0x49,    //2081
  216.                     0x77,0x29,0xBd,    //2082
  217.                     0x06,0xAA,0x51,    //2083
  218.                     0x0A,0xd5,0x46,    //2084
  219.                     0x54,0xdA,0xBA,    //2085
  220.                     0x04,0xB6,0x4e,    //2086
  221.                     0x0A,0x57,0x43,    //2087
  222.                     0x45,0x27,0x38,    //2088
  223.                     0x0d,0x26,0x4A,    //2089
  224.                     0x8e,0x93,0x3e,    //2090
  225.                     0x0d,0x52,0x52,    //2091
  226.                     0x0d,0xAA,0x47,    //2092
  227.                     0x66,0xB5,0x3B,    //2093
  228.                     0x05,0x6d,0x4f,    //2094
  229.                     0x04,0xAe,0x45,    //2095
  230.                     0x4A,0x4e,0xB9,    //2096
  231.                     0x0A,0x4d,0x4C,    //2097
  232.                     0x0d,0x15,0x41,    //2098
  233.                     0x2d,0x92,0xB5,    //2099
  234. };
  235. //月份数据表
  236. code unsigned char day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
  237. code unsigned int day_code2[3]={0x111,0x130,0x14e};
  238. /****************************************************************************
  239. * 子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0
  240. ****************************************************************************/
  241. bit GetMoonDay(unsigned char month_p,unsigned short table_addr)
  242. {
  243.         switch (month_p)
  244.         {
  245.                 case 1:
  246.                         if((year_code[table_addr]&0x08)==0)        return(0);
  247.                         else                                                                 return(1);
  248.                 case 2:
  249.                         if((year_code[table_addr]&0x04)==0)        return(0);
  250.                         else                                                                 return(1);
  251.                 case 3:
  252.                         if((year_code[table_addr]&0x02)==0)        return(0);
  253.                         else                                                                 return(1);
  254.                 case 4:
  255.                         if((year_code[table_addr]&0x01)==0)        return(0);
  256.                         else                                                                 return(1);
  257.                 case 5:
  258.                         if((year_code[table_addr+1]&0x80)==0)        return(0);
  259.                         else                                                                         return(1);
  260.                 case 6:
  261.                         if((year_code[table_addr+1]&0x40)==0)        return(0);
  262.                         else                                                                         return(1);
  263.                 case 7:
  264.                         if((year_code[table_addr+1]&0x20)==0)        return(0);
  265.                         else                                                                         return(1);
  266.                 case 8:
  267.                         if((year_code[table_addr+1]&0x10)==0)        return(0);
  268.                         else                                                                         return(1);
  269.                 case 9:
  270.                         if((year_code[table_addr+1]&0x08)==0)        return(0);
  271.                         else                                                                         return(1);
  272.                 case 10:
  273.                         if((year_code[table_addr+1]&0x04)==0)        return(0);
  274.                         else                                                                         return(1);
  275.                 case 11:
  276.                         if((year_code[table_addr+1]&0x02)==0)        return(0);
  277.                         else                                                                         return(1);
  278.                 case 12:
  279.                         if((year_code[table_addr+1]&0x01)==0)        return(0);
  280.                         else                                                                         return(1);
  281.                 case 13:
  282.                         if((year_code[table_addr+2]&0x80)==0)        return(0);
  283.                         else                                                                         return(1);
  284.         }
  285.         return(0);
  286. }

  287. /*********************************************************************************************************
  288. ** 函数名称:GetChinaCalendar
  289. ** 功能描述:公农历转换(只允许1901-2099年)
  290. ** 输 入:  year        公历年
  291. **          month       公历月
  292. **          day         公历日
  293. **          p           储存农历日期地址
  294. ** 输 出:  1           成功
  295. **          0           失败
  296. **------------------------------------------------------------------------------------------------------
  297. ********************************************************************************************************/
  298. unsigned char GetChinaCalendar(
  299.                                                                 unsigned int  year,        
  300.                                                                 unsigned char month,
  301.                                                                 unsigned char day,
  302.                                                                 unsigned char *p)
  303. {
  304.         unsigned char temp1,temp2,temp3,month_p,yearH,yearL;        
  305.         unsigned char flag_y;
  306.         unsigned short temp4,table_addr;

  307.         yearH=year/100;        yearL=year%100;
  308.         if((yearH!=19)&&(yearH!=20))        return(0);
  309.         
  310.         // 定位数据表地址
  311.         if(yearH==20)        table_addr=(yearL+100-1)*3;
  312.         else                          table_addr=(yearL-1)*3;

  313.         // 取当年春节所在的公历月份
  314.         temp1=year_code[table_addr+2]&0x60;        
  315.         temp1>>=5;

  316.         // 取当年春节所在的公历日
  317.         temp2=year_code[table_addr+2]&31;

  318.         // 计算当年春年离当年元旦的天数,春节只会在公历1月或2月
  319.         if(temp1==1)         temp3=temp2-1;
  320.         else                         temp3=temp2+31-1;

  321.         // 计算公历日离当年元旦的天数
  322.         if (month<10)         temp4=day_code1[month-1]+day-1;
  323.         else                          temp4=day_code2[month-10]+day-1;
  324.         // 如果公历月大于2月并且该年的2月为闰月,天数加1
  325.         if ((month>2)&&(yearL%4==0))         temp4++;

  326.         // 判断公历日在春节前还是春节后
  327.         if (temp4>=temp3)
  328.         {                                                
  329.                 temp4-=temp3;
  330.                 month=1;
  331.                 month_p=1;
  332.                                                         
  333.                 flag_y=0;
  334.                 if(GetMoonDay(month_p,table_addr)==0)        temp1=29; //小月29天
  335.                 else                                                                         temp1=30; //大小30天
  336.                 // 从数据表中取该年的闰月月份,如为0则该年无闰月
  337.                 temp2=year_code[table_addr]/16;         
  338.                 while(temp4>=temp1)
  339.                 {
  340.                         temp4-=temp1;
  341.                         month_p++;
  342.                         if(month==temp2)
  343.                         {
  344.                                 flag_y=~flag_y;
  345.                                 if(flag_y==0)month++;
  346.                         }
  347.                         else month++;
  348.                         if(GetMoonDay(month_p,table_addr)==0)        temp1=29;
  349.                         else                                                                         temp1=30;
  350.                 }
  351.                 day=temp4+1;
  352.         }
  353.         // 公历日在春节前使用下面代码进行运算
  354.         else
  355.         {                                                
  356.                 temp3-=temp4;
  357.                 if (yearL==0)
  358.                 {
  359.                         yearL=100-1;
  360.                         yearH=19;
  361.                 }
  362.                 else yearL--;
  363.                 table_addr-=3;
  364.                 month=12;
  365.                 temp2=year_code[table_addr]/16;         
  366.                 if (temp2==0)        month_p=12;
  367.                 else                         month_p=13;

  368.                 flag_y=0;
  369.                 if(GetMoonDay(month_p,table_addr)==0)        temp1=29;
  370.                 else                                                                         temp1=30;
  371.                 while(temp3>temp1)
  372.                 {
  373.                         temp3-=temp1;
  374.                         month_p--;
  375.                         if(flag_y==0)                month--;
  376.                         if(month==temp2)        flag_y=~flag_y;
  377.                         if(GetMoonDay(month_p,table_addr)==0)        temp1=29;
  378.                         else                                                                         temp1=30;
  379.                 }
  380.                 day=temp1-temp3+1;
  381.         }

  382.         *p++=yearH;
  383.         *p++=yearL;
  384.         *p++=month;
  385.         *p=day;        
  386.         return(1);
  387. }

  388. /*********************************************************************************************************
  389. ** 函数名称:GetSkyEarth
  390. ** 功能描述:输入公历日期得到一个甲子年(只允许1901-2099年)
  391. ** 输 入:  year        公历年
  392. **          p           甲子
  393. ** 输 出:  无
  394. **------------------------------------------------------------------------------------------------------
  395. ********************************************************************************************************/
  396. void GetSkyEarth(unsigned int year,unsigned char *p)
  397. {
  398.         unsigned char x;
  399.         
  400.         if(year>=1984)
  401.         {
  402.                 year=year-1984;
  403.                 x=year%60;                                
  404.         }
  405.         else
  406.         {
  407.                 year=1984-year;
  408.                 x=60-year%60;
  409.         }
  410.         *p=x;
  411. }

  412. //显示农历
  413. void lcd_dispnl(SYSTEMTIME *Time)
  414. {
  415.   unsigned char NLyear[4];
  416.   unsigned char SEyear;

  417.   GetChinaCalendar(Time->YearH*100+Time->Year,Time->Month,Time->Day,NLyear);
  418.   GetSkyEarth(NLyear[0]*100+NLyear[1],&SEyear);

  419.   lcd_hzdian_wr(0,0,sky[SEyear%10]);         //  甲
  420.   lcd_hzdian_wr(0,1,earth[SEyear%12]);        //  子               
  421.   lcd_hzdian_wr(0,2,logo[0]);               //  年

  422.   if(NLyear[2]==1)        lcd_hzdian_wr(0,3,logo[19]);        //  正
  423.     else                                lcd_hzdian_wr(0,3,logo[NLyear[2]+4]);
  424.   lcd_hzdian_wr(0,4,logo[1]);        //月

  425.   if(NLyear[3]>10) lcd_hzdian_wr(0,5,logo[14]);  //十               
  426.     else        if((NLyear[3]>10)&&(NLyear[3]<20)) lcd_hzdian_wr(0,5,logo[18]);        //廿
  427.        else   if(NLyear[3]>20) lcd_hzdian_wr(0,5,logo[7]);        //三               
  428.           else lcd_hzdian_wr(0,5,logo[17]);   //初        
  429.   lcd_hzdian_wr(0,6,logo[(NLyear[3]-1)%10+5]);        
  430. }

  431. //显示生肖
  432. /*void lcd_dispLunar(SYSTEMTIME *Time)
  433. {
  434.     unsigend char temp;
  435.         temp = Time.Year;
  436.         temp = temp%12;
  437.     switch(temp)
  438.     {
  439.       case 0: lcd_hzdian_wr(3,0,Lunar[0]); //龙
  440.               break;
  441.       case 1: lcd_hzdian_wr(3,0,Lunar[1]); //蛇
  442.               break;
  443.       case 2: lcd_hzdian_wr(3,0,Lunar[2]); //马
  444.               break;
  445.       case 3: lcd_hzdian_wr(3,0,Lunar[3]); //羊
  446.               break;
  447.       case 4: lcd_hzdian_wr(3,0,Lunar[4]); //猴
  448.               break;
  449.       case 5: lcd_hzdian_wr(3,0,Lunar[5]); //鸡
  450.               break;
  451.       case 6: lcd_hzdian_wr(3,0,Lunar[6]); //狗
  452.               break;
  453.       case 7: lcd_hzdian_wr(3,0,Lunar[7]); //猪
  454.               break;
  455.       case 8: lcd_hzdian_wr(3,0,Lunar[8]); //鼠
  456.               break;
  457.       case 9: lcd_hzdian_wr(3,0,Lunar[9]); //牛
  458.               break;
  459.       case 10: lcd_hzdian_wr(3,0,Lunar[10]);  //虎
  460.               break;
  461.       case 11: lcd_hzdian_wr(3,0,Lunar[11]);  //兔
  462.               break;
  463. }
  464. }*/

  465. void INIT_Clock(void)   //初始化
  466. {
  467.           lcd_init();
  468.         Initial_DS1302();
  469.         Init_DS18B20();
  470.         InitTimer0();
  471.     lcd_clr();
  472. }

  473. SYSTEMTIME CurrentTime;
  474.          
  475. main()
  476. {        
  477.          
  478.         INIT_Clock();
  479.         
  480.         while(1)
  481.         {  
  482.            
  483.            if(Lcd_t > 10)
  484.        {
  485.            //从DS1302中得到时间
  486.            if(key_operate == 0)DS1302_GetTime(&CurrentTime);
  487.            else DS1302_SetTime(&CurrentTime);
  488.             
  489.        //写时间 例如:12-12-12
  490.            lcd_disptime(&CurrentTime);           
  491.          
  492.            //写公历日期 例如:09-01-01
  493.            lcd_dispdate(&CurrentTime);

  494.            //写农历日期 例如:甲子年正月初一
  495.            lcd_dispnl(&CurrentTime);
  496.             
  497.            //显示温度
  498.            lcd_dispwendu();
  499.            
  500.            Lcd_t = 0;        
  501.            }
  502.            //***************调时闪烁*******************
  503.        if(flicker>50)
  504.       {
  505.         if(flicker>120)  flicker=0;   
  506.             switch (key_operate)
  507.         {
  508.          case 1:        //分
  509.                          lcd_shuzi_wr(2,4,number[12]);
  510.                                  lcd_shuzi_wr(2,3,number[12]);        
  511.                  break;
  512.          case 2:   //小时
  513.                          lcd_shuzi_wr(2,1,number[12]);
  514.                                  lcd_shuzi_wr(2,0,number[12]);
  515.                                break;
  516.                  case 3:   //日期
  517.                          lcd_shuzi_wr(1,11,number[12]);
  518.                                  lcd_shuzi_wr(1,10,number[12]);        
  519.                                break;
  520.                  case 4:   //月
  521.                          lcd_shuzi_wr(1,7,number[12]);
  522.                                  lcd_shuzi_wr(1,6,number[12]);        
  523.                                break;
  524.                  case 5:;  //年
  525.                          lcd_shuzi_wr(1,3,number[12]);
  526.                                  lcd_shuzi_wr(1,2,number[12]);        
  527.                                break;
  528.                  case 6:   //年(高位)
  529.                          lcd_shuzi_wr(1,1,number[12]);
  530.                                  lcd_shuzi_wr(1,0,number[12]);        
  531.                                break;
  532.          default:
  533.            break;
  534.                  }
  535.       }
  536.    }
  537. }

  538. // Timer 0 interrupt service routine
  539. void Timer_0(void)interrupt 1
  540. {
  541.   EA = 0;

  542.   TH0 = (65536 - 8000)/256;
  543.   TL0 = (65536 - 8000)%256;

  544.   Lcd_t ++;
  545.   flicker ++;

  546.   if(((!KEY0)|(!KEY1)|(!KEY2)|(!KEY3))&(key_flag==0))   
  547.    {
  548.       timer=0;//清除不按键计数器
  549.           key_flag = 10;
  550.       while(--key_flag);//延时去抖动     
  551.           key_flag = 1;
  552.       
  553.       if(!KEY0)//Modle键,进入调时模式
  554.       {
  555.         
  556.                 if(key_operate==0)
  557.                 {
  558.                    key_flag = 0;//允许按键长按
  559.            if(counter++>100) //Modle键要长按2S生效
  560.                    {
  561.                       key_operate++;
  562.                       key_flag = 1;//不允许按键长安
  563.                    }
  564.                  }
  565.                 else
  566.                   {                 
  567.                    key_operate++;
  568.                    if(key_operate > 6) key_operate = 1;                 
  569.                    }
  570.            }
  571.           else if(!KEY1)//减1调整
  572.       {
  573. ……………………

  574. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
万年历.rar (104.52 KB, 下载次数: 69)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:755390 发表于 2020-5-28 11:11 | 显示全部楼层

感谢分享!!!!!!!
回复

使用道具 举报

ID:755390 发表于 2020-6-7 08:55 | 显示全部楼层
感谢楼主分享!
回复

使用道具 举报

ID:672798 发表于 2020-6-20 11:47 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表