标题: 我做的单片机电子时钟 含原理图 源码 [打印本页]

作者: 传浩    时间: 2016-5-16 13:08
标题: 我做的单片机电子时钟 含原理图 源码
这是我花了好久时间做的一个电子时钟,没有按照老师的要求去做,而是按照我自己的思路做的。完全是自己的原创,没有抄袭,里面有很多不足的地方,希望大神能修改了与我分享。

飞机里面包含硬件系统和软件系统,使用的是51单片机。

仿真电路图:


所有资料下载: 时钟计时.rar (57.11 KB, 下载次数: 280)



电子时钟程序源码:
  1. /*************  头文件与宏定义  ************/
  2. #include <reg52.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. /*************  数组与位码  ************/
  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. /*************  主函数  ************/
  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. } */
复制代码



作者: 854810145    时间: 2017-3-14 22:50
厉害的,顶一个
作者: cqhejian    时间: 2017-3-15 10:24
谢谢您分享,这个思路不一样,学习借鉴一下
作者: 本尊人    时间: 2017-4-6 14:49
厉害,学习了
作者: 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
这种数码管是什么原来怎么控制段选位选
作者: ydbbbb    时间: 2017-12-7 15:16
学习了
作者: 782772055    时间: 2017-12-7 23:18
先记录下来,对学单片机真的很有帮助
作者: qwertyuiop1230    时间: 2017-12-15 16:32
先记录下来,对学单片机真的很有帮助
作者: qwertyuiop1230    时间: 2017-12-17 13:29
为什么时钟的秒表部分跑得这么快,是不是程序出了问题??
作者: kjdkdjk    时间: 2018-1-16 11:25
好厉害
作者: js123456    时间: 2018-1-28 17:01
qwertyuiop1230 发表于 2017-12-17 13:29
为什么时钟的秒表部分跑得这么快,是不是程序出了问题??

感觉应该是晶振的频率不一样吧

作者: js123456    时间: 2018-1-30 15:22
不知道楼主仿真时候 是否发现秒走的很快..........我不知道定时器中的值设置是否正确?
作者: maologao    时间: 2018-1-31 18:03
很有创意的实验。
作者: 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
谢谢楼主分享   学习了
作者: 可乐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
思路清晰 对初学很有帮助
作者: 大胖墩儿    时间: 2018-6-14 09:58
刚好学到这里能用到!
作者: 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
学习了
作者: 他们还有英语    时间: 2018-10-25 17:51
厉害,收藏学习下
作者: 他们还有英语    时间: 2018-10-25 17:52
谢谢楼主大恩大德
作者: yangkai123    时间: 2018-10-25 18:32
楼主给力,谢谢 分享,学习了
作者: 尹进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
做的很好 学习
作者: 3451430564@qq.c    时间: 2019-11-25 22:48
请问一下这个怎么打开使用呢 ?

作者: lzy990924    时间: 2019-12-5 19:48
刚好学到这里,师傅也布置了一个类似的题目,有很大的帮助
作者: zhaoyiguoxuexi    时间: 2020-2-5 10:12
这个思路确实不错,眼前一亮。

作者: wwh838320903    时间: 2020-4-2 10:47
大神膜拜
作者: k622    时间: 2020-6-3 12:39
牛皮,学到了

作者: kjdnw1223    时间: 2020-6-3 15:07
学习了,楼主很有探索精神,赞一个!!!
作者: iamxsy    时间: 2020-6-8 16:43
秒针无法跳动,不知道什么原因
作者: 1935501565    时间: 2020-6-8 17:16
厉害厉害,顶贴!
作者: 养养    时间: 2020-6-16 09:48
大神能不能发我一份
作者: 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
很优秀,太棒了自己搞出来




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1