標題: 我做的單片機電子時鐘 含原理圖 源碼 [打印本頁]

作者: 傳浩    時間: 2016-5-16 13:08
標題: 我做的單片機電子時鐘 含原理圖 源碼
這是我花了好久時間做的一個電子時鐘,沒有按照老師的要求去做,而是按照我自己的思路做的。完全是自己的原創(chuàng),沒有抄襲,里面有很多不足的地方,希望大神能修改了與我分享。

飛機里面包含硬件系統(tǒng)和軟件系統(tǒng),使用的是51單片機。

仿真電路圖:


所有資料下載: 時鐘計時.rar (57.11 KB, 下載次數(shù): 280)



電子時鐘程序源碼:
  1. /*************  頭文件與宏定義  ************/
  2. #include <reg52.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. /*************  數(shù)組與位碼  ************/
  6. uchar code DSY_CODE[]=
  7. {
  8.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,
  9. };//第11個為-

  10. uchar code Scan_BITs[]=
  11. {
  12.           0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80
  13. };
  14. uchar data Buffer_Counts[8];
  15. uchar KeyNO=16;
  16. uchar Key_N;

  17. uint Count_H=23; //小時
  18. //uint Count_A;          //顯示-
  19. uint Count_M=59; //分鐘
  20. //uint Count_B;         //顯示-
  21. uint Count_S=00; //秒
  22. uint TCNT;

  23. /*************  延時程序  ************/
  24. void DelayMS(uint x)
  25. {
  26.         uchar t;
  27.         while(x--)
  28.         {
  29.                  for(t=0;t<120;t++);
  30.         }
  31. }

  32. /*************  鍵處理  ************/
  33. void Keys_Scan()
  34. {
  35.         uchar Tmp;
  36.         P1 = 0xff;
  37.         DelayMS(1);
  38.         Tmp = P1 ^ 0xff;
  39.         while(P1!=0xff) {}
  40.         switch(Tmp)
  41.         {
  42.                  case 1:KeyNO=0;break;
  43.                 case 2:KeyNO=1;break;
  44.                 case 4:KeyNO=2;break;
  45.         case 8:KeyNO=3;break;
  46.                 case 16:KeyNO=4;break;
  47.         }
  48. }

  49. /*************  段碼顯示  ************/
  50. void Show_Counts()
  51. {
  52.         uint i;
  53.         Buffer_Counts[0] = Count_H / 10;
  54.         Buffer_Counts[1] = Count_H % 10;//小時
  55.        
  56.         Buffer_Counts[2] =10;

  57.         Buffer_Counts[3] = Count_M / 10;
  58.         Buffer_Counts[4] = Count_M % 10;//分鐘       
  59.        
  60.         Buffer_Counts[5] =10;

  61.         Buffer_Counts[6] = Count_S / 10;
  62.         Buffer_Counts[7] = Count_S % 10;//秒       
  63.                 for(i=0;i<8;i++)
  64.         {
  65.                  P2 = ~Scan_BITs[i];
  66.                 P0 = ~DSY_CODE[Buffer_Counts[i]];
  67.                 DelayMS(1);
  68.         }
  69. }

  70. /*************  時間到進位  ************/
  71. void TIME_INT0() interrupt 1
  72. {        TH0=(65536-5000)/256;
  73.         TL0=(65536-5000)%256;
  74.         TCNT ++;
  75.         if(TCNT==20)
  76.         {
  77.     Count_S++;
  78.         TCNT=0;
  79.           if(Count_S==60)
  80.           {
  81.           Count_M++;
  82.           Count_S=0;
  83.             if(Count_M==60)
  84.             {
  85.                 Count_H++;
  86.             Count_M=0;
  87.               if(Count_H==24)
  88.               {
  89.               Count_H=0;
  90.           Count_M=0;
  91.               Count_S=0;
  92.               TCNT=0;
  93.               }
  94.             }
  95.       }  
  96.   }
  97. }

  98. /*************  主函數(shù)  ************/
  99. void main()
  100. {
  101.     TMOD = 0x01;
  102.         TH0  = (65536-5000)/256;
  103.         TL0  = (65536-5000)%256;
  104.         EA=1;
  105.         ET0=1;
  106.         TR0 = 0;
  107.         while(1)
  108.         { if(P1 != 0xff)
  109.             {Keys_Scan();}
  110.                 switch(KeyNO)
  111.                 {
  112.                  case 0:        
  113.                              if(Key_N>2)
  114.                                                  Key_N=0;
  115.                                          else if(Key_N==0)
  116.                                                   TR0=~TR0;
  117.                                          else
  118.                                                  Key_N++;
  119.                                 break;
  120.                  case 1:
  121.                              if(~TR0)Count_H++;
  122.                                           
  123.                                           {
  124.                                            if(Count_H==24)
  125.                                            Count_H=0;
  126.                                            Count_M=0;
  127.                                            Count_S=0;
  128.                                            }break;
  129.                  case 2:
  130.                              if(~TR0)Count_M++;
  131.                                            {
  132.                                            if(Count_M==60)
  133.                                            Count_M=0;
  134.                                            Count_S=0;
  135.                                            }
  136.                                           break;
  137.                  case 3:
  138.                              if(~TR0)Count_S++;
  139.                                           {
  140.                                            if(Count_S==60)Count_S=0;
  141.                                            }break;
  142.                  case 4:          if(Key_N==0)
  143.                              Count_H=0;
  144.                                          Count_M=0;
  145.                                          Count_S=0;
  146.                                           break;
  147.                  }
  148.                 KeyNO=5;
  149.             Show_Counts();
  150.             }
  151. }













  152. /*void main()
  153. {
  154. while(1)
  155. {
  156.     TMOD=0x01;
  157.         TH0=(65536-5000)/256;
  158.         TL0=(65536-5000)%256;
  159.         EA=1;
  160.         ET0=1;
  161.         TR0=1;
  162.         Show_Counts();
  163. switch(P1)
  164. {
  165. case 1: Count_H++;
  166. case 2: Count_M++;       
  167. case 4: Count_S++;
  168. }
  169. }

  170. } */
復(fù)制代碼



作者: 854810145    時間: 2017-3-14 22:50
厲害的,頂一個
作者: cqhejian    時間: 2017-3-15 10:24
謝謝您分享,這個思路不一樣,學(xué)習(xí)借鑒一下
作者: 本尊人    時間: 2017-4-6 14:49
厲害,學(xué)習(xí)了
作者: 17750598346    時間: 2017-4-18 16:45
厲害了
作者: 111uuuu    時間: 2017-5-14 18:34
666666,厲害了。

作者: billyqq    時間: 2017-6-26 16:27
紅紅火火好好
作者: whenrrr    時間: 2017-7-4 16:17
厲害。。。。。
作者: hzlsw1    時間: 2017-7-4 18:18
這種數(shù)碼管是什么原來怎么控制段選位選
作者: ydbbbb    時間: 2017-12-7 15:16
學(xué)習(xí)了
作者: 782772055    時間: 2017-12-7 23:18
先記錄下來,對學(xué)單片機真的很有幫助
作者: qwertyuiop1230    時間: 2017-12-15 16:32
先記錄下來,對學(xué)單片機真的很有幫助
作者: qwertyuiop1230    時間: 2017-12-17 13:29
為什么時鐘的秒表部分跑得這么快,是不是程序出了問題??
作者: kjdkdjk    時間: 2018-1-16 11:25
好厲害
作者: js123456    時間: 2018-1-28 17:01
qwertyuiop1230 發(fā)表于 2017-12-17 13:29
為什么時鐘的秒表部分跑得這么快,是不是程序出了問題??

感覺應(yīng)該是晶振的頻率不一樣吧

作者: js123456    時間: 2018-1-30 15:22
不知道樓主仿真時候 是否發(fā)現(xiàn)秒走的很快..........我不知道定時器中的值設(shè)置是否正確?
作者: maologao    時間: 2018-1-31 18:03
很有創(chuàng)意的實驗。
作者: Howl    時間: 2018-3-28 15:11
感謝樓主分享
作者: zbwa0    時間: 2018-4-9 10:39
樓主很厲害
作者: v5sexman    時間: 2018-5-13 16:56
真的很不錯呀
作者: junyu99    時間: 2018-5-15 08:31
謝謝分享
作者: cwjcyl    時間: 2018-5-16 11:36
謝謝樓主分享
作者: cwjcyl    時間: 2018-5-16 16:48
謝謝樓主分享
作者: asdwe9669    時間: 2018-5-16 19:03
謝謝樓主分享   學(xué)習(xí)了
作者: 可樂333    時間: 2018-5-19 14:53
謝謝樓主分享
作者: 小怡子    時間: 2018-5-29 09:41
謝謝分享
作者: 931991428    時間: 2018-6-13 17:09
思路就是不一樣
作者: 931991428    時間: 2018-6-13 17:10
思路就是不一樣很有幫助
作者: 931991428    時間: 2018-6-13 17:20
思路清晰 對初學(xué)很有幫助
作者: 大胖墩兒    時間: 2018-6-14 09:58
剛好學(xué)到這里能用到!
作者: wl20020807    時間: 2018-6-15 23:27
很給力
作者: yanglaoban    時間: 2018-6-16 21:56
下載看看
作者: yanglaoban    時間: 2018-6-17 08:24
為什么下載了沒用啊 只顯示前面3個燈
作者: ancient-gree    時間: 2018-6-17 14:04
厲害呀
作者: sakuraMYK    時間: 2018-6-19 14:08
怎么加鬧鐘
作者: hhhb    時間: 2018-6-19 18:17
你這個很棒啊,自己編寫的程序
作者: jhyeqf    時間: 2018-6-19 23:05
謝謝分享,已下載做為研究
作者: 釀酒    時間: 2018-10-14 17:42
為什么我的時鐘不動啊
作者: DZB    時間: 2018-10-14 20:19
很   贊
作者: ptlantu    時間: 2018-10-15 16:52
仿真可以,不知樓主實物做出了沒?正在著手做一個,請教下液晶不加供電不知道IO腳的電流是否夠?
作者: 5555555552    時間: 2018-10-15 19:52
好貼!!!!!!
作者: ihoyrtsm    時間: 2018-10-16 10:26
謝謝樓主分享
作者: ebingyu    時間: 2018-10-16 13:47
學(xué)習(xí)了
作者: 他們還有英語    時間: 2018-10-25 17:51
厲害,收藏學(xué)習(xí)下
作者: 他們還有英語    時間: 2018-10-25 17:52
謝謝樓主大恩大德
作者: yangkai123    時間: 2018-10-25 18:32
樓主給力,謝謝 分享,學(xué)習(xí)了
作者: 尹進c51    時間: 2018-10-29 18:05
厲害了
作者: DANFISH    時間: 2018-10-30 17:11
新的思路
作者: 672049404    時間: 2018-11-7 14:23
為什么下載了沒用啊 只顯示前面3個燈
作者: 柚子茶hhh    時間: 2019-6-16 13:57
為什么我照著弄,顯示出來的是亂碼?

作者: GC990116    時間: 2019-7-4 09:31
大神給力
作者: 157624679    時間: 2019-7-4 11:04
做的很好 學(xué)習(xí)
作者: 3451430564@qq.c    時間: 2019-11-25 22:48
請問一下這個怎么打開使用呢 ?

作者: lzy990924    時間: 2019-12-5 19:48
剛好學(xué)到這里,師傅也布置了一個類似的題目,有很大的幫助
作者: zhaoyiguoxuexi    時間: 2020-2-5 10:12
這個思路確實不錯,眼前一亮。

作者: wwh838320903    時間: 2020-4-2 10:47
大神膜拜
作者: k622    時間: 2020-6-3 12:39
牛皮,學(xué)到了

作者: kjdnw1223    時間: 2020-6-3 15:07
學(xué)習(xí)了,樓主很有探索精神,贊一個。!
作者: iamxsy    時間: 2020-6-8 16:43
秒針無法跳動,不知道什么原因
作者: 1935501565    時間: 2020-6-8 17:16
厲害厲害,頂貼!
作者: 養(yǎng)養(yǎng)    時間: 2020-6-16 09:48
大神能不能發(fā)我一份
作者: zy112099    時間: 2020-6-16 12:08
頂一下 好帖子
作者: yuyuanhaya    時間: 2021-11-30 19:45
做的很好,非常有幫助對我
作者: 147789@qq    時間: 2021-12-9 10:56
在嗎 如何讓第三個-和第6個- 閃爍
作者: 095X    時間: 2021-12-10 15:08
很優(yōu)秀,太棒了自己搞出來




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1