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

標題: STC單片機制作可編程定時插座 [打印本頁]

作者: 474201428    時間: 2017-4-23 12:28
標題: STC單片機制作可編程定時插座
學習單片機有一段時間了,除了做幾個時鐘當個擺設好像也沒什么作品了。家里有些電器充電時間不能太長,如現在的手機有閃充功能的一般100分鐘就能充滿電。這樣在晚上睡覺時讓手機滿血復活好像就有了困難(以前用的手機晚上總要充一晚上)。隨想做個定時插座吧,就在做單片機數碼管時鐘的基礎上改進。由于初始功能還不太完善,特意外接了串口下載接口!  本以為有現成裝單片機的電路板能省點焊接功夫,沒想到要改線路造成很多飛線,所以看起來很亂。還不如用洞洞板好!
運行過程:上電顯示12:00---通過調時,調分按鍵設定時間---啟動---開始倒計時,繼電器吸合通電(運行中按鍵失效)---時間到繼電器斷開,數碼管閃爍


單片機源程序:
  1. /********************************************************
  2. *********************************************************
  3. ***********        可編程定時插座       *****************
  4. ***********          初次完成程序日期:2017、3、28                   ******

  5. 程序:上電-K1,K2按鍵進行時分調整-K3啟動(啟動后按鍵將無效)
  6. -繼電器閉合通電-開始倒計時-        倒計時結束繼電器斷開-完成周期

  7. ********************************************************/

  8. #include<reg51.h>
  9. #include<intrins.h>

  10. #define uchar unsigned char
  11. #define uint  unsigned int


  12. sbit s1=P3^2;
  13. sbit s2=P3^3;
  14. sbit s3=P3^4;                                 //    定義位使用端口 1,2,3,4段
  15. sbit s4=P3^5;
  16. sbit jd=P2^0;                                 //     繼電器端口

  17. sbit k1=P1^1;                                 //     調時
  18. sbit k2=P1^2;                                 //     調分
  19. sbit k3=P1^3;                                 //     啟動
  20. sbit GGD=P1^0;                                 //     按鍵公共端



  21. uchar code mum[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};        //  段碼0~9
  22. uchar code display1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf} ;
  23. uchar code display2[]={0xfe,0xbf,0xf7,0xbf,0xfe,0xbf,0xf7,0xbf} ;
  24. uchar code display3[]={0xcf,0xf9,0xcf,0xf9,0xcf,0xf9} ;
  25. uchar code display4[]={0xfe,0xdf,0xef,0xf7,0xfb,0xfd} ;


  26. char sec=59,min=0,hour=12;                                                                                                //  定義全局變量 有符號字符型
  27. uint cnt;


  28. /***************************************************************************
  29. ***************  函數名:delay                  ****************************
  30. ***************  函數功能:延時函數             ****************************
  31. ***************  輸入:                         ****************************
  32.                                  輸出:
  33. ***************************************************************************/



  34. void delay(uchar x)                                                                                                                         //  延時函數
  35. {
  36.   uchar i,j;
  37.   for(;x>0;x--)
  38.   for(i=20;i>0;i--)
  39.   for(j=2;j>0;j--);
  40. }



  41. void delay1(uint x)
  42. {
  43.         uchar i,j;
  44.         for(;x>0;x--)
  45.         for(i=20;i>0;i--)
  46.         for(j=200;j>0;j--);

  47. }




  48. void shuma()
  49. {
  50.         uchar a,b,n,m,j,k;
  51.         s1=1;
  52.         s2=1;
  53.         s3=1;
  54.         s4=0;
  55.         while(1)
  56.         {
  57.        

  58.             for(a=0;a<6;a++)
  59.                 {
  60.                         for(n=0;n<6;n++)
  61.                         {
  62.                                 P0=display1[n];
  63.                                 delay1(15);       
  64.                         }
  65.                 }


  66.                 for(m=0;m<8;m++)
  67.                 {
  68.                         P0=display2[m];
  69.                         delay1(100);       
  70.                 }


  71.                 for(j=0;j<6;j++)
  72.                 {
  73.                         P0=display3[j];
  74.                         delay1(30);       
  75.                 }

  76.                 for(b=0;b<6;b++)
  77.                 {
  78.                         for(k=0;k<6;k++)
  79.                         {
  80.                                 P0=display4[k];
  81.                                 delay1(15);       
  82.                         }
  83.                 }
  84.        
  85.                
  86.         }


  87. }



  88. /***************************************************************************
  89. ***************  函數名:timeyx                  ****************************
  90. ***************  函數功能:時鐘運行             ****************************
  91. ***************  輸入:                         ****************************
  92.                                  輸出:
  93. ***************************************************************************/



  94. void timeyx()                                                           //    時鐘運行
  95. {


  96.       GGD=1;                                                                   //    按鍵公共端置高電平,運行中按鍵無效
  97.       sec--;
  98.       if(sec<0)
  99.       {
  100.           sec=59;
  101.               min--;
  102.               if(min<0)
  103.               {
  104.                    min=59;
  105.                    hour--;
  106.           
  107.               }


  108.       }

  109. }




  110. /***************************************************************************
  111. ***************  函數名:stop                 ****************************
  112. ***************  函數功能:繼電器斷開           ****************************
  113. ***************  輸入:                         ****************************
  114.                                  輸出:
  115. ***************************************************************************/



  116. void stop()                                                                                 //   時間到繼電器斷開
  117. {
  118.         if(hour==0&&min==0)                                                         //   判斷時分為0時
  119.         {                                                                                       
  120.                 TR0=0;                                                                         //    定時器停止
  121.                
  122.                 jd=1;
  123.                 shuma();                                                                         //    繼電器斷開
  124.         }
  125. }

  126.        

  127. /***************************************************************************
  128. ***************  函數名:display                 ****************************
  129. ***************  函數功能:數碼管顯示           ****************************
  130. ***************  輸入:                         ****************************
  131.                                  輸出:
  132. ***************************************************************************/




  133. void display(uchar zm,uchar zh)                        //     顯示函數
  134. {
  135.   
  136.   
  137.   
  138.   P0=mum[zm%10];
  139.   s1=0;
  140.   delay(10);
  141.   s1=1 ;

  142.   
  143.   P0=mum[zm/10];
  144.   s2=0;
  145.   delay(10);
  146.   s2=1;

  147.   
  148.   P0=mum[zh%10];
  149.   if(cnt>2000)                                                                 //     小數點閃爍
  150.   P0&=0x7f;                                                                         //     增加小數點顯示
  151.   s3=0;
  152.   delay(10);
  153.   s3=1;

  154.   
  155.   P0=mum[zh/10];
  156.   s4=0;
  157.   delay(10);
  158.   s4=1 ;

  159.   }




  160. /***************************************************************************
  161. ***************  函數名:timeset                 ****************************
  162. ***************  函數功能:時間設置             ****************************
  163. ***************  輸入:                         ****************************
  164.                                  輸出:
  165. ***************************************************************************/


  166. void timeset()                                                                  //  時間設置
  167. {

  168.    if(k1==0)
  169.    {
  170.        delay(50);
  171.            if(k1==0)
  172.            {
  173.                hour--;
  174.                if(hour<0)
  175.                {
  176.                     hour=12;
  177.                  
  178.                }
  179.                while(k1==0)
  180.                display(min,hour);       
  181.            }
  182.    }


  183.             if(k2==0)
  184.             {
  185.                  delay(10);
  186.                  if(k2==0)
  187.                  {
  188.                       min--;
  189.                  
  190.                           if(min<0)
  191.                           {
  192.                                min=59;
  193.                                hour--;
  194.                   
  195.                           }
  196.                  
  197.                           while(k2==0)
  198.                           display(min,hour);       
  199.                  
  200.                  }
  201.         }
  202.        

  203.           display(min,hour);
  204.        
  205.                        
  206. }




  207. /***************************************************************************
  208. ***************  函數名:main                ****************************
  209. ***************  函數功能:主函數             ****************************
  210. ***************  輸入:                         ****************************
  211.                                  輸出:
  212. ***************************************************************************/




  213. void main()
  214. {
  215.   
  216.   uchar end=1;                                                   //  時間預設單次循環
  217.   TMOD=0x02;                                                  //   模式2 8位自動重裝定時器
  218.   TH0=0x06;
  219.   TL0=0x06;
  220.   EA=1;
  221.   ET0=1;

  222.   GGD=0;                                                          //  按鍵公共端
  223.   jd=1;                                                                  //  繼電器關閉
  224.   TR0=0;

  225.   P3=0xff;
  226.   while(1)
  227.   {
  228.              
  229.           timeset();
  230.           stop();
  231.           

  232.       while(end)                                                  //上電未按K3啟動前一直在循環 達到預設目的
  233.       {
  234.    
  235.                 timeset();                                                  
  236.           if(k3==0)
  237.               {
  238.                         delay(20);
  239.                        if(k3==0)
  240.                        {
  241.                                  TR0=1;
  242.                                  jd=0;
  243.                                  end=0;
  244.                        }

  245.                            while(k3==0);
  246.               }
  247.        
  248.        
  249.       }
  250.   }
  251. }


  252. …………限于本文篇幅 余下代碼請從51黑電子論壇下載附件…………

復制代碼

下載:
源代碼.rar (1.9 KB, 下載次數: 101)



作者: fefen0    時間: 2017-5-2 14:12
有原理圖沒。。
作者: raymondau    時間: 2017-5-2 15:36
建議樓主附個原理圖
作者: jcygh    時間: 2017-5-12 10:44
正想做一個,謝謝樓主!
作者: franklovey    時間: 2017-7-12 11:49
程序很美麗,發現個小問題,只要時倒進時到00,在按分立馬15:59
作者: lsy531    時間: 2017-8-7 21:35
學習了,有圖就好了。
作者: derze_yu    時間: 2017-12-13 19:37
求原理圖。。。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: av网站免费在线观看 | 午夜久久久久久久久久一区二区 | 国产精品美女在线观看 | 99re6在线视频精品免费 | 亚洲精品日韩一区二区电影 | 天天玩天天干天天操 | 亚洲国产精品久久久 | 久久国产精品72免费观看 | 91精品国产91久久久久久 | 免费在线观看成人 | 国产精品一区久久久 | 婷婷丁香激情 | 91社区在线高清 | 99re在线视频观看 | 三级成人在线观看 | 午夜影院毛片 | 永久看片| 成人深夜福利 | 午夜精品一区二区三区在线视 | 久久久久久久久99 | 一级毛片视频免费观看 | 九九视频在线观看 | 精品久草 | 国产精品欧美一区二区三区不卡 | 亚洲视频三 | 视频一区 亚洲 | 天天澡天天狠天天天做 | 福利网站导航 | 特一级黄色毛片 | 狠狠久| 欧美国产中文字幕 | 免费看91| 亚洲午夜精品一区二区三区他趣 | 欧美日韩久久精品 | 日韩午夜网站 | 俺去俺来也www色官网cms | 久久成人av电影 | 欧美精品欧美精品系列 | 毛片一区二区 | 亚洲精品福利视频 | 日日操日日舔 |