久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7092|回復: 6
收起左側

超級省電的時鐘制作 最省電時可達3mA [修正BUG]

  [復制鏈接]
ID:127496 發表于 2016-6-21 01:00 | 顯示全部樓層 |閱讀模式
最近終于有時間發圖片了:
樣子:


顯示月份:


省電模式:


背面走線圖


數碼管底部暗藏IC:













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

  2. 作者:TZR

  3. 版本:CK3148 (ver2.0)

  4. 功能:  1 顯示時間

  5.     2 顯示日期

  6.     3 計算年份

  7.     4 鬧鐘功能

  8.     5 超小體積設計(電池最大……)

  9.     6 整點報時

  10.     7(重點改進點)超省電設計,正常工作電流在9~12mA之間,最省電時電流可達3mA!鬧鐘鳴響時電流在15mA~18mA左右。

  11.     8.增加省電模式,模式下耗電<3.3mA,數碼管不顯示,走時仍然繼續,鬧鐘,整點報時仍然運行。(鬧鐘會中斷省電模式)

  12. 日志:V1:實現走時功能,程序整體不穩定,鬧鐘和整點報時功能不正常。

  13.    V1.2:修正鬧鐘和整點報時BUG,修正出現“0月0日的”BUG,修正年份顯

  14.   V2:改進了程序,作品變得相當省電,耗電量相比之前下降一半,最省電時可達3mA.

  15.   V2.2:增加省電模式。修正程序穩定性差,整點報時不兼容“省電模式”的問題。



  16. 省電原理:LED顯示屏低頻閃爍,閃爍期間單片機進入空閑模式,使用定時器中斷喚醒單片機,并產生時鐘。

  17. ***************************************************************************/


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



評分

參與人數 1黑幣 +30 收起 理由
wpppmlah + 30 贊一個!

查看全部評分

回復

使用道具 舉報

ID:67984 發表于 2016-6-22 09:33 | 顯示全部樓層
能把原理圖發上了么
回復

使用道具 舉報

ID:116662 發表于 2016-8-5 11:53 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:476271 發表于 2019-7-25 09:44 | 顯示全部樓層
能把原理圖發上了
回復

使用道具 舉報

ID:61390 發表于 2025-3-31 22:36 | 顯示全部樓層
這個沒幾個小時就沒電了.
回復

使用道具 舉報

ID:108361 發表于 2025-4-1 13:27 | 顯示全部樓層
3ma很費電了,省電就不能用數碼管,只能用斷碼液晶
回復

使用道具 舉報

ID:712493 發表于 2025-4-1 14:02 | 顯示全部樓層
powerdruy 發表于 2025-4-1 13:27
3ma很費電了,省電就不能用數碼管,只能用斷碼液晶

數碼管3mA人家已經很認真了,但對紐扣電池確是電老虎,呵呵!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线一区二区三区 | 欧美电影一区 | 在线国产视频 | 在线看av的网址 | 日本h片在线观看 | 国产精品久久久久久久岛一牛影视 | 美女视频. | 亚洲欧美一区在线 | 欧洲精品在线观看 | 日韩中出| 久久精品无码一区二区三区 | 国产精品一区二区久久 | 国产视频1区2区 | 国产精品99久久久久久www | 免费国产视频 | 成人网在线看 | 99精品国产成人一区二区 | 亚洲视频在线免费观看 | 亚洲一区在线播放 | 中文字幕一区在线观看视频 | 91久久精品国产91久久 | 亚洲大片 | 狠狠伊人 | 欧美午夜影院 | 国产精品一区二区三区99 | 日韩免费av一区二区 | 国产一区亚洲 | 在线不卡视频 | 中文av在线播放 | 秋霞电影院午夜伦 | 精品国产精品三级精品av网址 | 午夜爽爽爽男女免费观看 | 国产在线观看网站 | 国产精品日韩欧美一区二区三区 | 国产成人精品免高潮在线观看 | 久久一区二区三区四区 | av天天干| 欧美一级在线观看 | 97精品国产一区二区三区 | 国产一区二区三区久久久久久久久 | 日韩在线免费视频 |