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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7494|回復: 12
收起左側

假期新做,精巧高精度數(shù)碼管時鐘PCF8563+TM1637 附單片機程序

  [復制鏈接]
ID:86421 發(fā)表于 2019-10-8 08:35 | 顯示全部樓層 |閱讀模式
放假下雨,無事做了一個時鐘。洞洞焊接,很是費力喲。四位帶雙點0.56數(shù)碼管,廢微波爐上拆下來的,PCF8563,舊電表的拆下來的。加了一個STC15W104、TM1637及三個按鍵.做出來的時鐘小巧穩(wěn)定,功能也還可以。上圖: 圖片4.jpg 圖片3.jpg 圖片2.jpg 圖片1.jpg

單片機源程序如下:
  1. #include <STC15.h>
  2. #include "intrins.h"

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5.        
  6. #include "TM1637.h"
  7. #include "PCF8563.H"


  8. uchar keyvalue,xs=0,LD=5,SetFlag=0,re_disp=0;
  9. uchar keydate;     //讀鍵盤參數(shù)
  10. bit Flash;       //閃爍標志位
  11. bit ReadTimeFlag;//定義讀時間標志

  12. void Init_Timer0(void);//定時器初始化
  13. void Displsy_Time();
  14. void Scan_Key();
  15. void Set(uchar sel,uchar selby);

  16. /*------------------------------------------------
  17.               主函數(shù)
  18. ------------------------------------------------*/
  19. void main()
  20. {
  21.         P3M0=0X00;
  22.         P3M1=0X00;

  23.   Init_Timer0();
  24.         while(1)
  25.         {
  26.    Scan_Key();
  27.         }
  28. }
  29. /*------------------------------------------------
  30.    顯示界面設置
  31. ------------------------------------------------*/
  32. void Displsy_Time()
  33. {
  34.         if(ReadTimeFlag==1)  //讀取時間
  35.         {
  36.                 ReadTimeFlag=0;
  37.                 Read8563();
  38.                 keydate=ScanKey();

  39.         }

  40.         if(SetFlag==0&&xs==0) TM1637_display((time_buf1[4]/10),(time_buf1[4]%10),(time_buf1[5]/10),(time_buf1[5]%10),Flash,(LD));  //非設置狀態(tài),正常顯示  時:分
  41.         if(SetFlag==0&&xs==1)        TM1637_display((2),(0),(time_buf1[1]/10),(time_buf1[1]%10),0,(LD));                                  //20xx年
  42.         if(SetFlag==0&&xs==2)        TM1637_display((time_buf1[2]/10),(time_buf1[2]%10),(time_buf1[3]/10),(time_buf1[3]%10),1,(LD));      //月:日
  43.         if(SetFlag==0&&xs==3)        TM1637_display((time_buf1[7]),(21),(time_buf1[6]/10),(time_buf1[6]%10),1,(LD));                      //周空秒

  44.                
  45.         switch(SetFlag)        //以下是設置狀態(tài)
  46.         {
  47.                 case 1:
  48.                 {
  49.                 if(Flash)        TM1637_display((2),(0),(time_buf1[1]/10),(time_buf1[1]%10),0,(LD));
  50.           else TM1637_display((2),(0),(21),(21),0,(LD));
  51.                        
  52.                 if(keyvalue==2&&SetFlag==1) //年+
  53.            {
  54.              Set(1,0);
  55.              keyvalue=0;
  56.      }
  57.                 if(keyvalue==3&&SetFlag==1) //年-
  58.            {
  59.              Set(1,1);
  60.              keyvalue=0;
  61.            }
  62.                 }
  63.                 break;

  64.                 case 2:
  65.                 {
  66.                 if(Flash)        TM1637_display((11),(21),(time_buf1[2]/10),(time_buf1[2]%10),1,(LD));
  67.           else TM1637_display((11),(21),(21),(21),1,(LD));
  68.        
  69.                 if(keyvalue==2&&SetFlag==2) //月+
  70.            {
  71.              Set(2,0);
  72.              keyvalue=0;
  73.      }
  74.                 if(keyvalue==3&&SetFlag==2) //月-
  75.            {
  76.              Set(2,1);
  77.              keyvalue=0;
  78.            }
  79.                 }
  80.                 break;
  81.                
  82.                 case 3:
  83.                 {
  84.                 if(Flash)        TM1637_display((13),(21),(time_buf1[3]/10),(time_buf1[3]%10),1,(LD));
  85.           else TM1637_display((13),(21),(21),(21),1,(LD));
  86.        
  87.                 if(keyvalue==2&&SetFlag==3) //日+
  88.            {
  89.              Set(3,0);
  90.              keyvalue=0;
  91.      }
  92.                 if(keyvalue==3&&SetFlag==3) //日-
  93.            {
  94.              Set(3,1);
  95.              keyvalue=0;
  96.            }
  97.                 }
  98.                 break;
  99.                
  100.                 case 4:
  101.                 {
  102.                 if(Flash)        TM1637_display((16),(21),(time_buf1[4]/10),(time_buf1[4]%10),1,(LD));
  103.           else TM1637_display((16),(21),(21),(21),1,(LD));
  104.        
  105.                 if(keyvalue==2&&SetFlag==4) //時+
  106.            {
  107.              Set(4,0);
  108.              keyvalue=0;
  109.      }
  110.                 if(keyvalue==3&&SetFlag==4) //時-
  111.            {
  112.              Set(4,1);
  113.              keyvalue=0;
  114.            }
  115.                 }
  116.                 break;
  117.                
  118.                 case 5:
  119.                 {
  120.                 if(Flash)        TM1637_display((15),(21),(time_buf1[5]/10),(time_buf1[5]%10),1,(LD));
  121.           else TM1637_display((15),(21),(21),(21),1,(LD));
  122.        
  123.                 if(keyvalue==2&&SetFlag==5) //分+
  124.            {
  125.              Set(5,0);
  126.              keyvalue=0;
  127.      }
  128.                 if(keyvalue==3&&SetFlag==5) //分-
  129.            {
  130.              Set(5,1);
  131.              keyvalue=0;
  132.            }
  133.                 }
  134.                 break;
  135.                
  136.                 case 6:
  137.                 {
  138.                 if(Flash)        TM1637_display((5),(21),(time_buf1[6]/10),(time_buf1[6]%10),1,(LD));
  139.           else TM1637_display((5),(21),(21),(21),1,(LD));
  140.        
  141.                 if(keyvalue==2&&SetFlag==6) //秒+
  142.            {
  143.              Set(6,0);
  144.              keyvalue=0;
  145.      }
  146.                 if(keyvalue==3&&SetFlag==6) //秒-
  147.            {
  148.              Set(6,1);
  149.              keyvalue=0;
  150.            }
  151.                 }
  152.                 break;

  153.         }
  154.                
  155. }
  156. /*------------------------------------------------
  157.                     定時器初始化子程序
  158. ------------------------------------------------*/
  159. void Init_Timer0(void)
  160. {
  161. TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  162. EA=1;            //總中斷打開
  163. ET0=1;           //定時器中斷打開
  164. TR0=1;           //定時器開關打開
  165. }
  166. /*------------------------------------------------
  167.                  定時器中斷子程序
  168. ------------------------------------------------*/
  169. void Timer0_isr(void) interrupt 1
  170. {
  171. static unsigned int num,a;
  172. TH0=(65536-50000)/256;                  //重新賦值 50ms
  173. TL0=(65536-50000)%256;

  174. num++;
  175. re_disp++;
  176. if(num==2)        //大致100ms
  177.    {
  178.     num=0;
  179.     ReadTimeFlag=1; //讀標志位置1
  180.           a++;
  181.         }
  182.          
  183.         if(a==5)
  184.         {
  185.                 a=0;
  186.                 Flash=~Flash;
  187.         }
  188.                 if(re_disp==200)
  189.         {
  190.                 re_disp=0;
  191.                 SetFlag=0;
  192.         }

  193. }
  194. /*------------------------------------------------
  195.             鍵盤檢測函數(shù)
  196. ------------------------------------------------*/
  197. void Scan_Key(void)    //鍵盤檢測函數(shù)
  198. {
  199.         keydate=0xff;

  200.   Displsy_Time();    //程序開頭調用顯示函數(shù)
  201.        
  202.         if(keydate==0xef)
  203.     {
  204.                  re_disp=0;    //清除記數(shù),重新開始10s定時
  205.      SetFlag++;
  206.      if(SetFlag>6)SetFlag=0;
  207.     }

  208.         if(keydate==0xed)
  209.      {
  210.        re_disp=0;      //清除記數(shù),重新開始10s定時
  211.        keyvalue=2;     //跳到加減判斷函數(shù),下同
  212.                          
  213.                          if(SetFlag==0)
  214.                          {
  215.                                  xs++;
  216.                                  if(xs>3)xs=0;
  217.                          }
  218.      }
  219.    
  220.         if(keydate==0xee)
  221.      {
  222.        re_disp=0;
  223.        keyvalue=3;
  224.                          
  225.                          if(SetFlag==0)
  226.                          {
  227.                                  LD++;
  228.                                  if(LD>7)LD=0;
  229.                          }
  230.      }
  231. }

  232. /*-------------------------------------------------------
  233. //根據(jù)選擇調整相應項目并寫入DS3231
  234. --------------------------------------------------------*/
  235. void Set(unsigned char sel,unsigned char selby)  //執(zhí)行調整項目的函數(shù)
  236. {
  237.     uchar max,mini;

  238.     if(sel==6)  {max=59;mini=0;}    //秒
  239.     if(sel==5)  {max=59;mini=0;}    //分鐘
  240.     if(sel==4)  {max=23;mini=0;}    //小時

  241.           if(time_buf1[2]==2)           //日
  242.                 {
  243.                         if(runnian())
  244.                         {
  245.                                 if(sel==3)  {max=29;mini=1;}
  246.                         }
  247.                         else
  248.                         {
  249.                                 if(sel==3)  {max=28;mini=1;}
  250.                         }
  251.                 }
  252.                  if(time_buf1[2]==1|time_buf1[2]==3|time_buf1[2]==5|time_buf1[2]==7|time_buf1[2]==8|time_buf1[2]==10|time_buf1[2]==12)
  253.                    {   
  254.                            if(sel==3)  {max=31;mini=1;}
  255.                    }
  256.                  if(time_buf1[2]==4|time_buf1[2]==6|time_buf1[2]==9|time_buf1[2]==11)
  257.                    {   
  258.                     if(sel==3)  {max=30;mini=1;}
  259.                    }
  260.                
  261.     if(sel==2)  {max=12;mini=1;}    //月
  262.     if(sel==1)  {max=25;mini=15;}    //年

  263.           if (selby==0) time_buf1[sel]++;  else time_buf1[sel]--;
  264.           if(time_buf1[sel]>max) time_buf1[sel]=mini;   
  265.           if(time_buf1[sel]<mini) time_buf1[sel]=max;
  266.     Write8563();
  267.                 autoweek();
  268. }
復制代碼

所有資料51hei提供下載:
TM1637PCF8563四數(shù)碼管時鐘.rar (55.25 KB, 下載次數(shù): 198)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:35873 發(fā)表于 2019-11-29 02:09 | 顯示全部樓層
不錯  樓主上個完整電路圖唄
回復

使用道具 舉報

ID:638375 發(fā)表于 2019-11-30 22:14 | 顯示全部樓層
看到電路板都暈了!!厲害啊
回復

使用道具 舉報

ID:410680 發(fā)表于 2020-2-21 19:42 | 顯示全部樓層
謝謝分享,正好需要研究一下,下載下來試試
回復

使用道具 舉報

ID:410680 發(fā)表于 2020-2-21 19:44 | 顯示全部樓層
非常給力,謝謝樓主,先看看
回復

使用道具 舉報

ID:119642 發(fā)表于 2020-7-2 10:14 | 顯示全部樓層
這個真的挺好的。純手工
回復

使用道具 舉報

ID:745362 發(fā)表于 2021-2-25 13:31 來自觸屏版 | 顯示全部樓層
PCF變成了DS
回復

使用道具 舉報

ID:590050 發(fā)表于 2021-11-18 16:14 | 顯示全部樓層
PCF8563和DS1302那個好用
回復

使用道具 舉報

ID:982352 發(fā)表于 2021-11-18 21:28 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:242298 發(fā)表于 2022-1-25 06:10 | 顯示全部樓層
這按鍵都沒有怎么玩
回復

使用道具 舉報

ID:71233 發(fā)表于 2022-2-5 09:20 | 顯示全部樓層
hzh173 發(fā)表于 2021-11-18 16:14
PCF8563和DS1302那個好用

應該是PCF8563吧,雖然我從來都沒有用過PCF8563。
回復

使用道具 舉報

ID:155606 發(fā)表于 2023-3-5 20:58 | 顯示全部樓層
注釋里面怎么有這個型號://根據(jù)選擇調整相應項目并寫入DS3231,難道是通用的嗎?
回復

使用道具 舉報

ID:86421 發(fā)表于 2023-3-6 08:57 | 顯示全部樓層
注釋里有沒有改徹底的。PCF與DS3231不能通用的,好多地址不一樣的。但也都差不多,改改就是了。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美1区 | 羞羞视频网站免费看 | 美人の美乳で授乳プレイ | 日韩欧美在线观看 | 在线不卡视频 | 免费三级网 | 免费成人高清在线视频 | 国产一级免费在线观看 | 玖草资源 | 欧美成人a∨高清免费观看 欧美日韩中 | 欧美综合精品 | 日本一区二区在线视频 | 欧美精品一区二区三区在线播放 | av大片| 91精品久久久久久久久久入口 | 涩涩片影院 | 永久免费在线观看 | 中国一级毛片免费 | 久久久精品视频免费看 | 国产亚洲欧美在线 | 毛片.com| 国产精品视频在线观看 | 久久福利电影 | 国产91视频播放 | 国产精品久久久久久久模特 | 一区二区三区中文字幕 | 精品国产91亚洲一区二区三区www | 国产成人精品一区二区三区网站观看 | 国产成人亚洲精品自产在线 | 欧美无乱码久久久免费午夜一区 | 91免费观看在线 | 久久国产精品网 | 日本啊v在线 | 91久久久久久久久 | 国产一级成人 | 国产成人精品999在线观看 | 中文在线а√在线8 | 久久免费观看视频 | 国产不卡在线播放 | 亚洲不卡在线观看 | 精品一区二区三区四区外站 |