找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9067|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

STC單片機(jī)制作可編程定時(shí)插座

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:95393 發(fā)表于 2017-4-23 12:28 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
學(xué)習(xí)單片機(jī)有一段時(shí)間了,除了做幾個(gè)時(shí)鐘當(dāng)個(gè)擺設(shè)好像也沒什么作品了。家里有些電器充電時(shí)間不能太長(zhǎng),如現(xiàn)在的手機(jī)有閃充功能的一般100分鐘就能充滿電。這樣在晚上睡覺時(shí)讓手機(jī)滿血復(fù)活好像就有了困難(以前用的手機(jī)晚上總要充一晚上)。隨想做個(gè)定時(shí)插座吧,就在做單片機(jī)數(shù)碼管時(shí)鐘的基礎(chǔ)上改進(jìn)。由于初始功能還不太完善,特意外接了串口下載接口!  本以為有現(xiàn)成裝單片機(jī)的電路板能省點(diǎn)焊接功夫,沒想到要改線路造成很多飛線,所以看起來(lái)很亂。還不如用洞洞板好!
運(yùn)行過(guò)程:上電顯示12:00---通過(guò)調(diào)時(shí),調(diào)分按鍵設(shè)定時(shí)間---啟動(dòng)---開始倒計(jì)時(shí),繼電器吸合通電(運(yùn)行中按鍵失效)---時(shí)間到繼電器斷開,數(shù)碼管閃爍


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

  5. 程序:上電-K1,K2按鍵進(jìn)行時(shí)分調(diào)整-K3啟動(dòng)(啟動(dòng)后按鍵將無(wú)效)
  6. -繼電器閉合通電-開始倒計(jì)時(shí)-        倒計(jì)時(shí)結(jié)束繼電器斷開-完成周期

  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;                                 //     調(diào)時(shí)
  18. sbit k2=P1^2;                                 //     調(diào)分
  19. sbit k3=P1^3;                                 //     啟動(dòng)
  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;                                                                                                //  定義全局變量 有符號(hào)字符型
  27. uint cnt;


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



  34. void delay(uchar x)                                                                                                                         //  延時(shí)函數(shù)
  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. ***************  函數(shù)名:timeyx                  ****************************
  90. ***************  函數(shù)功能:時(shí)鐘運(yùn)行             ****************************
  91. ***************  輸入:                         ****************************
  92.                                  輸出:
  93. ***************************************************************************/



  94. void timeyx()                                                           //    時(shí)鐘運(yùn)行
  95. {


  96.       GGD=1;                                                                   //    按鍵公共端置高電平,運(yùn)行中按鍵無(wú)效
  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. ***************  函數(shù)名:stop                 ****************************
  112. ***************  函數(shù)功能:繼電器斷開           ****************************
  113. ***************  輸入:                         ****************************
  114.                                  輸出:
  115. ***************************************************************************/



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

  126.        

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




  133. void display(uchar zm,uchar zh)                        //     顯示函數(shù)
  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)                                                                 //     小數(shù)點(diǎn)閃爍
  150.   P0&=0x7f;                                                                         //     增加小數(shù)點(diǎn)顯示
  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. ***************  函數(shù)名:timeset                 ****************************
  162. ***************  函數(shù)功能:時(shí)間設(shè)置             ****************************
  163. ***************  輸入:                         ****************************
  164.                                  輸出:
  165. ***************************************************************************/


  166. void timeset()                                                                  //  時(shí)間設(shè)置
  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. ***************  函數(shù)名:main                ****************************
  209. ***************  函數(shù)功能:主函數(shù)             ****************************
  210. ***************  輸入:                         ****************************
  211.                                  輸出:
  212. ***************************************************************************/




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

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

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

  232.       while(end)                                                  //上電未按K3啟動(dòng)前一直在循環(huán) 達(dá)到預(yù)設(shè)目的
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑電子論壇下載附件…………

復(fù)制代碼

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


評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:157057 發(fā)表于 2017-5-2 14:12 | 只看該作者
有原理圖沒。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:102702 發(fā)表于 2017-5-2 15:36 | 只看該作者
建議樓主附個(gè)原理圖
回復(fù)

使用道具 舉報(bào)

地板
ID:62340 發(fā)表于 2017-5-12 10:44 來(lái)自手機(jī) | 只看該作者
正想做一個(gè),謝謝樓主!
回復(fù)

使用道具 舉報(bào)

5#
ID:51306 發(fā)表于 2017-7-12 11:49 | 只看該作者
程序很美麗,發(fā)現(xiàn)個(gè)小問題,只要時(shí)倒進(jìn)時(shí)到00,在按分立馬15:59
回復(fù)

使用道具 舉報(bào)

6#
ID:221185 發(fā)表于 2017-8-7 21:35 | 只看該作者
學(xué)習(xí)了,有圖就好了。
回復(fù)

使用道具 舉報(bào)

7#
ID:246817 發(fā)表于 2017-12-13 19:37 | 只看該作者
求原理圖。。。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表