找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 28397|回复: 64
打印 上一主题 下一主题
收起左侧

我做的单片机电子时钟 含原理图 源码

  [复制链接]
跳转到指定楼层
楼主
ID:121043 发表于 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. } */
复制代码


评分

参与人数 10黑币 +94 收起 理由
dfdfuhuh + 3 绝世好帖!
dianzhongmiao + 5
程慕雨 + 2 很给力!
azx321045 + 5 很给力!
可乐333 + 4 赞一个!
逸兴 + 10
zhf1229 + 5 赞一个!
小末末 + 5 共享资料的黑币奖励!
cqhejian + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 分享淘帖 顶10 踩
回复

使用道具 举报

沙发
ID:170778 发表于 2017-3-14 22:50 | 只看该作者
厉害的,顶一个
回复

使用道具 举报

板凳
ID:96881 发表于 2017-3-15 10:24 | 只看该作者
谢谢您分享,这个思路不一样,学习借鉴一下
回复

使用道具 举报

地板
ID:186622 发表于 2017-4-6 14:49 | 只看该作者
厉害,学习了
回复

使用道具 举报

5#
ID:190884 发表于 2017-4-18 16:45 | 只看该作者
厉害了
回复

使用道具 举报

6#
ID:196847 发表于 2017-5-14 18:34 | 只看该作者
666666,厉害了。
回复

使用道具 举报

7#
ID:214821 发表于 2017-6-26 16:27 | 只看该作者
红红火火好好
回复

使用道具 举报

8#
ID:217081 发表于 2017-7-4 16:17 | 只看该作者
厉害。。。。。
回复

使用道具 举报

9#
ID:207702 发表于 2017-7-4 18:18 来自手机 | 只看该作者
这种数码管是什么原来怎么控制段选位选
回复

使用道具 举报

10#
ID:258649 发表于 2017-12-7 15:16 | 只看该作者
学习了
回复

使用道具 举报

11#
ID:258032 发表于 2017-12-7 23:18 | 只看该作者
先记录下来,对学单片机真的很有帮助
回复

使用道具 举报

12#
ID:262101 发表于 2017-12-15 16:32 | 只看该作者
先记录下来,对学单片机真的很有帮助
回复

使用道具 举报

13#
ID:262101 发表于 2017-12-17 13:29 | 只看该作者
为什么时钟的秒表部分跑得这么快,是不是程序出了问题??
回复

使用道具 举报

14#
ID:269632 发表于 2018-1-16 11:25 | 只看该作者
好厉害
回复

使用道具 举报

15#
ID:280438 发表于 2018-1-28 17:01 | 只看该作者
qwertyuiop1230 发表于 2017-12-17 13:29
为什么时钟的秒表部分跑得这么快,是不是程序出了问题??

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

使用道具 举报

16#
ID:280438 发表于 2018-1-30 15:22 | 只看该作者
不知道楼主仿真时候 是否发现秒走的很快..........我不知道定时器中的值设置是否正确?
回复

使用道具 举报

17#
ID:281244 发表于 2018-1-31 18:03 | 只看该作者
很有创意的实验。
回复

使用道具 举报

18#
ID:298337 发表于 2018-3-28 15:11 | 只看该作者
感谢楼主分享
回复

使用道具 举报

19#
ID:304260 发表于 2018-4-9 10:39 | 只看该作者
楼主很厉害
回复

使用道具 举报

20#
ID:328839 发表于 2018-5-13 16:56 | 只看该作者
真的很不错呀
回复

使用道具 举报

21#
ID:317900 发表于 2018-5-15 08:31 | 只看该作者
谢谢分享
回复

使用道具 举报

22#
ID:331153 发表于 2018-5-16 11:36 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

23#
ID:331153 发表于 2018-5-16 16:48 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

24#
ID:283987 发表于 2018-5-16 19:03 | 只看该作者
谢谢楼主分享   学习了
回复

使用道具 举报

25#
ID:329821 发表于 2018-5-19 14:53 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

26#
ID:340304 发表于 2018-5-29 09:41 | 只看该作者
谢谢分享
回复

使用道具 举报

27#
ID:351232 发表于 2018-6-13 17:09 | 只看该作者
思路就是不一样
回复

使用道具 举报

28#
ID:351232 发表于 2018-6-13 17:10 | 只看该作者
思路就是不一样很有帮助
回复

使用道具 举报

29#
ID:351232 发表于 2018-6-13 17:20 | 只看该作者
思路清晰 对初学很有帮助
回复

使用道具 举报

30#
ID:350863 发表于 2018-6-14 09:58 来自手机 | 只看该作者
刚好学到这里能用到!
回复

使用道具 举报

31#
ID:352736 发表于 2018-6-15 23:27 | 只看该作者
很给力
回复

使用道具 举报

32#
ID:348510 发表于 2018-6-16 21:56 | 只看该作者
下载看看
回复

使用道具 举报

33#
ID:348510 发表于 2018-6-17 08:24 | 只看该作者
为什么下载了没用啊 只显示前面3个灯
回复

使用道具 举报

34#
ID:353236 发表于 2018-6-17 14:04 | 只看该作者
厉害呀
回复

使用道具 举报

35#
ID:354277 发表于 2018-6-19 14:08 | 只看该作者
怎么加闹钟
回复

使用道具 举报

36#
ID:354521 发表于 2018-6-19 18:17 | 只看该作者
你这个很棒啊,自己编写的程序
回复

使用道具 举报

37#
ID:352182 发表于 2018-6-19 23:05 | 只看该作者
谢谢分享,已下载做为研究
回复

使用道具 举报

38#
ID:409518 发表于 2018-10-14 17:42 | 只看该作者
为什么我的时钟不动啊
回复

使用道具 举报

39#
ID:378372 发表于 2018-10-14 20:19 | 只看该作者
很   赞
回复

使用道具 举报

40#
ID:73182 发表于 2018-10-15 16:52 | 只看该作者
仿真可以,不知楼主实物做出了没?正在着手做一个,请教下液晶不加供电不知道IO脚的电流是否够?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表