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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8993|回復: 6
打印 上一主題 下一主題
收起左側

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)


評分

參與人數 1黑幣 +100 收起 理由
admin + 100

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

地板
ID:62340 發表于 2017-5-12 10:44 來自手機 | 只看該作者
正想做一個,謝謝樓主!
回復

使用道具 舉報

5#
ID:51306 發表于 2017-7-12 11:49 | 只看該作者
程序很美麗,發現個小問題,只要時倒進時到00,在按分立馬15:59
回復

使用道具 舉報

6#
ID:221185 發表于 2017-8-7 21:35 | 只看該作者
學習了,有圖就好了。
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品粉嫩超白一线天av | 国产精品免费一区二区三区四区 | 国产97人人超碰caoprom | 久一精品 | 久久lu | 亚洲精品视频在线播放 | 亚洲码欧美码一区二区三区 | 日韩区 | 91在线资源| 亚洲自拍偷拍av | 久久精品免费一区二区 | 亚洲成人三级 | 色视频欧美 | 亚洲色欧美另类 | 天天射网站 | 亚洲精品www| www一级片 | 2021天天干夜夜爽 | 亚洲毛片在线观看 | 久久精品99久久 | 欧美国产精品一区二区三区 | 亚洲国产二区 | 欧美一区二区三区在线 | 亚洲人在线| 日韩精品二区 | 不卡一区二区在线观看 | 夜夜操av| 久久久精品网站 | 亚洲一区二区精品视频在线观看 | 久久天堂网 | 成人乱人乱一区二区三区软件 | 日韩精品在线观看免费 | 亚洲中午字幕 | 亚洲一区二区三区四区av | 九九av| 成人免费视频一区二区 | 日韩国产免费 | 国产精品一区二区在线 | 国产9 9在线 | 中文 | 爱爱视频在线观看 | 久久6视频|