找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2187|回复: 0
打印 上一主题 下一主题
收起左侧

CK3148电子钟源程序 修正BUG

[复制链接]
跳转到指定楼层
楼主
ID:127496 发表于 2016-6-21 01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

哈哈,最近又做了一个程序,这已经是我制造的第三个电子钟了,不知道我为什么这么喜欢电子钟?

图片和升级版的程序详见:
http://www.51hei.com/bbs/dpj-52307-1.html

  1. /***********************************************************************

  2. 作者:TZR

  3. 版本:CK3148 (ver1.2)

  4. 功能:   1显示时间

  5.     2显示日期

  6.     3计算年份

  7.     4闹钟功能

  8.     5超小体积设计(电池最大……)

  9.     6整点报时

  10. 日志:V1:实现走时功能,程序整体不稳定,闹钟和整点报时功能不正常。

  11.     V1.2:修正闹钟和整点报时BUG,修正出现“0月0日的”BUG,修正年份显示错误的问题。

  12. ***************************************************************************/

  13. #include <stc12c2052ad.h>
  14. unsigned char hour;
  15. unsigned char min;
  16. unsigned char sec;
  17. unsigned char st;
  18. unsigned char t;
  19. unsigned char alh;
  20. unsigned char alm;
  21. unsigned char yearH;
  22. unsigned char yearL;
  23. unsigned char month;
  24. unsigned char beepc;
  25. unsigned char day;
  26. unsigned char mo;
  27. unsigned bm[12]={1,0,1,0,1,0,1,1,0,1,0,1};
  28. bit am;
  29. sbit mode=P1^7;
  30. sbit chan=P1^6;
  31. sbit beep=P3^7;
  32. sbit v4=P1^5;
  33. sbit c=P1^4;
  34. sbit b=P1^3;
  35. sbit v3=P1^2;
  36. sbit v2=P1^1;
  37. sbit d=P1^0;
  38. sbit e=P3^0;
  39. sbit f=P3^1;
  40. sbit h=P3^2;
  41. sbit g=P3^3;
  42. sbit a=P3^4;
  43. sbit v1=P3^5;
  44. #define close v1=0;v2=0;v3=0;v4=0;
  45. #define led0 a=1;b=1;c=1;d=1;e=1;f=1;g=1;h=1;
  46. #define num0 a=1;b=0;c=0;d=0;e=0;f=0;g=0;
  47. #define num1 a=1;b=1;c=1;e=1;f=1;d=0;g=0;
  48. #define num2 f=0;e=0;d=0;c=0;a=0;
  49. #define num3 g=0;f=0;d=0;c=0;a=0;
  50. #define num4 g=0;d=0;b=0;a=0;
  51. #define num5 g=0;f=0;c=0;b=0;a=0;
  52. #define num6 c=0;b=0;e=0;f=0;g=0;a=0;
  53. #define num7 c=0;d=0;g=0;
  54. #define num8 a=0;b=0;c=0;d=0;e=0;f=0;g=0;
  55. #define num9 a=0;b=0;c=0;d=0;f=0;g=0;
  56. CLKS0=1;
  57. void delay (unsigned int a){
  58.   unsigned int i;
  59.   while( --a != 0){
  60.     for(i = 0; i < 300; i++);
  61.   }
  62. }
  63. void paint(unsigned char i){
  64. if(i==0){num0;}
  65. if(i==1){num1;}
  66. if(i==2){num2;}
  67. if(i==3){num3;}
  68. if(i==4){num4;}
  69. if(i==5){num5;}
  70. if(i==6){num6;}
  71. if(i==7){num7;}
  72. if(i==8){num8;}
  73. if(i==9){num9;}
  74. }
  75. void main (void){
  76. P3M0=0x00;
  77. P3M1=0x80;
  78. mode=0;
  79. beep=0;
  80. beepc=0;
  81. chan=0;
  82. mo=0;
  83. EA=1;
  84. ET0=1;
  85. st=0;
  86. close;
  87. led0;
  88. hour=11;
  89. min=59;
  90. alh=12;
  91. alm=00;
  92. sec=59;
  93. TH0=0x00;
  94. TL0=0x00;
  95. TR0=1;
  96. t=1;
  97. am=1;
  98. yearH=20;
  99. yearL=11;
  100. month=4;
  101. day=23;
  102. while(1){
  103.   if(mo==0){
  104.    if(mode==1){
  105.     delay(20);
  106.     if(mode==1){
  107.      mo++;
  108.     }
  109.     while(mode==1);
  110.    }
  111.    if(chan==1){
  112.     delay(20);
  113.     if(chan==1){
  114.      beep=0;
  115.      beepc=0;
  116.      while(chan==1);
  117.     }
  118.    }
  119.    if(sec%10==8 || sec%10==9){
  120.     led0;
  121.     paint(day%10);//0001
  122.     close;
  123.     v1=1;
  124.     delay(t);
  125.     led0;
  126.     paint(day/10);//0010
  127.     close;
  128.     v2=1;
  129.     delay(t);
  130.     led0;
  131.     paint(month%10);//0100
  132.     h=0;
  133.     close;
  134.     v3=1;
  135.     delay(t);
  136.     led0;
  137.     paint(month/10);//1000
  138.     close;
  139.     v4=1;
  140.     delay(t);
  141.    }else{
  142.     led0;
  143.     paint(min%10);//0001
  144.     close;
  145.     v1=1;
  146.     delay(t);
  147.     led0;
  148.     paint(min/10);//0010
  149.     close;
  150.     v2=1;
  151.     delay(t);
  152.     led0;
  153.     paint(hour%10);//0100
  154.     h=sec%2;
  155.     close;
  156.     v3=1;
  157.     delay(t);
  158.     led0;
  159.     paint(hour/10);//1000
  160.     close;
  161.     v4=1;
  162.     delay(t);
  163.    }
  164.   }else if(mo==1){
  165.    if(st<50){
  166.     led0;
  167.     paint(hour/10);//1000
  168.     close;
  169.     v4=1;
  170.     delay(t);
  171.    }
  172.    if(chan==1){
  173.     delay(20);
  174.     if(chan==1){
  175.      hour+=10;
  176.      if(hour>23){
  177.       hour=0;
  178.      }
  179.      while(chan==1);
  180.     }
  181.    }
  182.    if(mode==1){
  183.     delay(20);
  184.     if(mode==1){
  185.      mo++;
  186.     }
  187.     while(mode==1);
  188.    }
  189.   }else if(mo==2){
  190.    if(st<50){
  191.     led0;
  192.     paint(hour%10);//1000
  193.     close;
  194.     v3=1;
  195.     delay(t);
  196.    }
  197.    if(chan==1){
  198.     delay(20);
  199.     if(chan==1){
  200.      hour+=1;
  201.      if(hour%10==0){
  202.       hour-=10;
  203.      }
  204.      while(chan==1);
  205.     }
  206.    }
  207.    if(mode==1){
  208.     delay(20);
  209.     if(mode==1){
  210.      mo++;
  211.     }
  212.     while(mode==1);
  213.    }
  214.   }else if(mo==3){
  215.    if(st<50){
  216.     led0;
  217.     paint(min/10);//1000
  218.     close;
  219.     v2=1;
  220.     delay(t);
  221.    }
  222.    if(chan==1){
  223.     delay(20);
  224.     if(chan==1){
  225.      min+=10;
  226.      if(min>59){
  227.       min=0;
  228.      }
  229.      while(chan==1);
  230.     }
  231.    }
  232.    if(mode==1){
  233.     delay(20);
  234.     if(mode==1){
  235.      mo++;
  236.     }
  237.     while(mode==1);
  238.    }
  239.   }else if(mo==4){
  240.    if(st<50){
  241.     led0;
  242.     paint(min%10);//1000
  243.     close;
  244.     v1=1;
  245.     delay(t);
  246.    }
  247.    if(chan==1){
  248.     delay(20);
  249.     if(chan==1){
  250.      min+=1;
  251.      if(min%10==0){
  252.       min-=10;
  253.      }
  254.      while(chan==1);
  255.     }
  256.    }
  257.    if(mode==1){
  258.     delay(20);
  259.     if(mode==1){
  260.      mo++;
  261.     }
  262.     while(mode==1);
  263.    }
  264.   }else if(mo==5){
  265.    if(st<50){
  266.     led0;
  267.     paint(month/10);//1000
  268.     close;
  269.     v2=1;
  270.     delay(t);
  271.     led0;
  272.     paint(month%10);//1000
  273.     close;
  274.     v1=1;
  275.     delay(t);
  276.    }
  277.    if(chan==1){
  278.     delay(20);
  279.     if(chan==1){
  280.      month+=1;
  281.      if(month==13){
  282.       month=1;
  283.      }
  284.      while(chan==1);
  285.     }
  286.    }
  287.    if(mode==1){
  288.     delay(20);
  289.     if(mode==1){
  290.      mo++;
  291.     }
  292.     while(mode==1);
  293.    }
  294.   }else if(mo==6){
  295.    if(st<50){
  296.     led0;
  297.     paint(day/10);//1000
  298.     close;
  299.     v2=1;
  300.     delay(t);
  301.     led0;
  302.     paint(day%10);//1000
  303.     close;
  304.     v1=1;
  305.     delay(t);
  306.    }
  307.    if(chan==1){
  308.     delay(20);
  309.     if(chan==1){
  310.      day+=1;
  311.      if(day==32){
  312.       day=1;
  313.      }
  314.      while(chan==1);
  315.     }
  316.    }
  317.    if(mode==1){
  318.     delay(20);
  319.     if(mode==1){
  320.      mo++;
  321.     }
  322.     while(mode==1);
  323.    }
  324.   }else if(mo==7){
  325.    if(st<50){
  326.     led0;
  327.     paint(yearL%10);//0001
  328.     close;
  329.     v1=1;
  330.     delay(t);
  331.     led0;
  332.     paint(yearL/10);//0010
  333.     close;
  334.     v2=1;
  335.     delay(t);
  336.     led0;
  337.     paint(yearH%10);//0100
  338.     h=0;
  339.     close;
  340.     v3=1;
  341.     delay(t);
  342.     led0;
  343.     paint(yearH/10);//1000
  344.     close;
  345.     v4=1;
  346.     delay(t);
  347.    }
  348.    if(chan==1){
  349.     delay(20);
  350.     if(chan==1){
  351.      yearL+=1;
  352.      if(yearL>=30){
  353.       yearL=11;
  354.      }
  355.      while(chan==1);
  356.     }
  357.    }
  358.    if(mode==1){
  359.     delay(20);
  360.     if(mode==1){
  361.      mo++;
  362.     }
  363.     while(mode==1);
  364.    }
  365.   }else if(mo==8){
  366.    if(st<50){
  367.     led0;
  368.     paint(alh/10);//1000
  369.     close;
  370.     v4=1;
  371.     delay(t);
  372.     led0;
  373.     paint(alh%10);//1000
  374.     close;
  375.     v3=1;
  376.     delay(t);
  377.    }
  378.    if(chan==1){
  379.     delay(20);
  380.     if(chan==1){
  381.      alh+=1;
  382.      if(alh>23){
  383.       alh=0;
  384.      }
  385.      while(chan==1);
  386.     }
  387.    }
  388.    if(mode==1){
  389.     delay(20);
  390.     if(mode==1){
  391.      mo++;
  392.     }
  393.     while(mode==1);
  394.    }
  395.   }else if(mo==9){
  396.    if(st<50){
  397.     led0;
  398.     paint(alm/10);//1000
  399.     close;
  400.     v2=1;
  401.     delay(t);
  402.     led0;
  403.     paint(alm%10);//1000
  404.     close;
  405.     v1=1;
  406.     delay(t);
  407.    }
  408.    if(chan==1){
  409.     delay(20);
  410.     if(chan==1){
  411.      alm+=1;
  412.      am=1;
  413.      if(alm>=60){
  414.       alm=0;
  415.      }
  416.      while(chan==1);
  417.     }
  418.    }
  419.    if(mode==1){
  420.     delay(20);
  421.     if(mode==1){
  422.      mo=0;
  423.     }
  424.     while(mode==1);
  425.    }
  426.   }
  427. }
  428. }
  429. void t0 (void) interrupt 1 {
  430. st++;
  431. if(st>99){
  432.   st=0;
  433.   sec++;
  434.   if(beep==1){
  435.    beepc--;
  436.    if(beepc<=0){
  437.     beep=0;
  438.    }
  439.   }
  440. }
  441. if(sec>59){
  442.    sec=0;
  443.    min++;
  444.    if(min==alm && hour==alh && am==1){
  445.     beep=1;
  446.     beepc=50;
  447.    }
  448.   }
  449.   if(min>59){
  450.    min=0;
  451.    hour++;
  452.    beep=1;//整点报时
  453.    beepc=1;
  454.   }
  455.   if(hour>23){
  456.    hour=0;
  457.    day++;
  458.    if(month==2){
  459.     if(yearL%4==0){
  460.      if(day==30){
  461.       day=0;
  462.       month++;
  463.      }
  464.     }else{
  465.      if(day==29){
  466.       day=0;
  467.       month++;
  468.      }
  469.     }
  470.    }else if(bm[month]==0){
  471.     if(day==31){
  472.      day=0;
  473.      month++;
  474.      if(month==13){
  475.       month=1;
  476.       yearL++;
  477.      }
  478.     }
  479.    }else if(bm[month]==1){
  480.     if(day==32){
  481.      day=0;
  482.      month++;
  483.      if(month==13){
  484.       month=1;
  485.       yearL++;
  486.      }
  487.     }
  488.    }
  489.   }
  490. TH0=0x6c;/*7a9c*/
  491. TL0=0xc2;
  492. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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