找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14640|回复: 8
收起左侧

单片机数字钟制作(仿真+源程序)

  [复制链接]
ID:434167 发表于 2018-11-27 14:23 | 显示全部楼层 |阅读模式
分享一下单片机数字钟制作

仿真图1时分秒

仿真图1时分秒

时分秒

仿真图2年月日

仿真图2年月日

年月日

仿真图3星期和闹铃

仿真图3星期和闹铃

星期和闹钟时间

成品正面图

成品正面图

成品正面图

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. unsigned char code distab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  4. unsigned char data yue=5 ,ri=15 ,shi=7 ,fen=59 ,miao=58  ,int_cnt=0 ,nshi=8 ,nfen=0,xq,xianshi=0,xuanze=0;
  5. unsigned int data nian=2018,j,m,y;
  6. bit x=0,t=0,b=0;
  7. sbit k0=P1^1;
  8. sbit k1=P1^2;
  9. sbit k2=P1^3;
  10. sbit k3=P1^4;
  11. sbit LED=P1^0;
  12. void mDelay(unsigned int Delay)
  13. {
  14.         unsigned int i;
  15.         for(;Delay>0;Delay--)
  16.         {
  17.                 for(i=0;i<114;i++){;}
  18.         }
  19. }

  20. void displayshijian()
  21. {       
  22.         P2=0xff;
  23.         if( ( xuanze==1||LED==0 )&&j>100 )P0=0xff;                                       
  24.         else P0=~(distab[miao%10]+0x80);                  
  25.         P2=0xfe;                                         
  26.         mDelay(1);
  27.                                                                
  28.         P2=0xff;
  29.         if( ( xuanze==1||LED==0 )&&j>100 )P0=0xff;                                       
  30.         else P0=~distab[miao/10];                          
  31.         P2=0xfd;                                 
  32.         mDelay(1);
  33.        
  34.         P2=0xff;
  35.         if( ( xuanze==2||LED==0 )&&j>100 )P0=0xff;                                       
  36.         else P0=~(distab[fen%10]+0x80);                          
  37.         P2=0xfb;                                 
  38.         mDelay(1);
  39.        
  40.         P2=0xff;
  41.         if( ( xuanze==2||LED==0 )&&j>100 )P0=0xff;                                       
  42.         else P0=~distab[fen/10];                          
  43.         P2=0xf7;                                 
  44.         mDelay(1);
  45.        
  46.         P2=0xff;
  47.         if( ( xuanze==3||LED==0 )&&j>100 )P0=0xff;                                       
  48.         else P0=~(distab[shi%10]+0x80);                          
  49.         P2=0xef;                                 
  50.         mDelay(1);
  51.        
  52.         P2=0xff;
  53.         if( ( xuanze==3||LED==0 )&&j>100 )P0=0xff;                                       
  54.         else P0=~distab[shi/10];                          
  55.         P2=0xdf;                                 
  56.         mDelay(1);               
  57. }

  58. void displaynyr()
  59. {                                                               
  60.         P2=0xff;                                       
  61.         if( ( xuanze==1||LED==0 )&&j>100 )P0=0xff;                                       
  62.         else P0=~(distab[ri%10]+0x80);                  
  63.         P2=0xfe;                                         
  64.         mDelay(1);
  65.                                                                
  66.         P2=0xff;
  67.         if( ( xuanze==1||LED==0 )&&j>100 )P0=0xff;                                       
  68.         else P0=~distab[ri/10];                          
  69.         P2=0xfd;                                 
  70.         mDelay(1);
  71.        
  72.         P2=0xff;
  73.         if( ( xuanze==2||LED==0 )&&j>100 )P0=0xff;                                       
  74.         else P0=~(distab[yue%10]+0x80);                          
  75.         P2=0xfb;                                 
  76.         mDelay(1);
  77.        
  78.         P2=0xff;
  79.         if( ( xuanze==2||LED==0 )&&j>100 )P0=0xff;                                       
  80.         else P0=~distab[yue/10];                          
  81.         P2=0xf7;                                 
  82.         mDelay(1);
  83.        
  84.         P2=0xff;
  85.         if( ( xuanze==3||LED==0 )&&j>100 )P0=0xff;                                       
  86.         else P0=~(distab[nian%10]+0x80);                          
  87.         P2=0xef;                                 
  88.         mDelay(1);
  89.        
  90.         P2=0xff;
  91.         if( ( xuanze==3||LED==0 )&&j>100 )P0=0xff;                                       
  92.         else P0=~distab[(nian%100)/10];                          
  93.         P2=0xdf;                                 
  94.         mDelay(1);               
  95. }
  96. void displaynaozhong()
  97. {       
  98.         P2=0xff;                                       
  99.         if( ( xuanze==1||LED==0 )&&j>100 )P0=0xff;                                       
  100.         else P0=~(distab[nfen%10]+0x80);                  
  101.         P2=0xfe;                                         
  102.         mDelay(1);
  103.                                                                
  104.         P2=0xff;
  105.         if( ( xuanze==1||LED==0 )&&j>100 )P0=0xff;                                       
  106.         else P0=~distab[nfen/10];                          
  107.         P2=0xfd;                                 
  108.         mDelay(1);
  109.        
  110.         P2=0xff;
  111.         if( ( xuanze==2||LED==0 )&&j>100 )P0=0xff;                                       
  112.         else P0=~(distab[nshi%10]+0x80);                          
  113.         P2=0xfb;                                 
  114.         mDelay(1);
  115.        
  116.         P2=0xff;
  117.         if( ( xuanze==2||LED==0 )&&j>100 )P0=0xff;                                       
  118.         else P0=~distab[nshi/10];                          
  119.         P2=0xf7;                                 
  120.         mDelay(1);
  121.        
  122.         P2=0xff;
  123.         if( ( xuanze==3||LED==0 )&&j>100 )P0=0xff;                                       
  124.         else P0=~(distab[xq]+0x80);                          
  125.         P2=0xdf;                                 
  126.         mDelay(1);
  127. }
  128. void chushihua()
  129. {
  130.         TMOD=0x01;                        //定时方式1
  131.         TH0=(19456/256);
  132.         TL0=(19456%256);
  133.         EA=1;ET0=1;                        //开T0中断
  134.         TR0=1;                             //启动T0
  135.         int_cnt=0;
  136. }

  137. void chuli2()
  138. {
  139.         if(yue==12)
  140.         {               
  141.                 if(nian==2099)
  142.                 {
  143.                         nian=2000;
  144.                         yue=1;
  145.                         ri=1;
  146.                 }
  147.                 else
  148.                 {
  149.                         nian++;
  150.                         yue=1;
  151.                         ri=1;
  152.                 }
  153.         }
  154.         else
  155.         {
  156.                 yue++;
  157.                 ri=1;
  158.         }       
  159. }

  160. void chuli1()
  161. {
  162.         if(miao==60)
  163.         {
  164.                 fen++;
  165.                 miao=0;
  166.                 x=0;
  167.                 if(fen==60)
  168.                 {
  169.                         shi++;
  170.                         fen=0;
  171.                         if(shi==24)
  172.                         {
  173.                                 ri++;
  174.                                 shi=0;                                                                                 
  175.                                 if( ( (yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12) )&&( ri==32 ) )
  176.                                 {
  177.                                         chuli2();
  178.                                 }
  179.                                 else if( ( (yue==4)||(yue==6)||(yue==9)||(yue==11) )&&( ri==31 ) )
  180.                                 {
  181.                                         chuli2();
  182.                                 }
  183.                                 else if( ( ( nian%4!=0 )||( nian==2000 ) )&&( yue==2 )&&( ri==29 ) )
  184.                                 {
  185.                                         chuli2();
  186.                                 }
  187.                                 else if( ( nian%4==0 )&&( nian!=2000 )&&( yue==2 )&&( ri==30 ) )
  188.                                 {
  189.                                         chuli2();
  190.                                 }                                       
  191.                         }
  192.                 }
  193.         }
  194. }

  195. void display()
  196. {
  197.         switch(xianshi)
  198.         {
  199.                 case 0:displayshijian();break;
  200.                 case 1:displaynyr();break;
  201.                 case 2:displaynaozhong();break;
  202.                 default:;
  203.         }
  204. }
  205. void key()
  206. {
  207.         if(!k0)
  208.         {
  209.                 mDelay(1);
  210.                 if(!k0)
  211.                 {
  212.                         if(LED==1)
  213.                         {
  214.                                 xianshi++;
  215.                                 if(xianshi==3)xianshi=0;
  216.                         }
  217.                         else{x=1;t=0;}
  218.                         while(!k0){display();chuli1();}
  219.                 }
  220.         }
  221.         if(!k1)
  222.         {
  223.                 mDelay(1);
  224.                 if(!k1)
  225.                 {
  226.                         if(LED==1)
  227.                         {
  228.                                 xuanze++;
  229.                                 if(xuanze==4)xuanze=0;
  230.                         }
  231.                         else{x=1;t=0;}
  232.                         while(!k1){display();chuli1();}
  233.                 }
  234.         }
  235.         if(!k2)
  236.         {
  237.                 mDelay(1);
  238.                 if(!k2)
  239.                 {       
  240.                         if(xianshi==0&&xuanze==1){miao++;if(miao==60)miao=0;}
  241.                         if(xianshi==0&&xuanze==2){fen++;if(fen==60)fen=0;}
  242.                         if(xianshi==0&&xuanze==3){shi++;if(shi==24)shi=0;}
  243.                         if(xianshi==1&&xuanze==1)
  244.                         {
  245.                                 ri++;
  246.                                 if( ( (yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12) )&&( ri==32 ) )
  247.                                 {
  248.                                         ri=1;
  249.                                 }
  250.                                 else if( ( (yue==4)||(yue==6)||(yue==9)||(yue==11) )&&( ri==31 ) )
  251.                                 {
  252.                                         ri=1;
  253.                                 }
  254.                                 else if( ( ( nian%4!=0 )||( nian==2000 ) )&&( yue==2 )&&( ri==29 ) )
  255.                                 {
  256.                                         ri=1;
  257.                                 }
  258.                                 else if( ( nian%4==0 )&&( nian!=2000 )&&( yue==2 )&&( ri==30 ) )
  259.                                 {
  260.                                         ri=1;
  261.                                 }
  262.                         }

  263.                         if(xianshi==1&&xuanze==2)
  264.                         {
  265.                                 yue++;
  266.                                 if(yue==13)
  267.                                 yue=1;
  268.                                 if( ( (yue==4)||(yue==6)||(yue==9)||(yue==11) )&&( ri>30 ) )
  269.                                 {
  270.                                         ri=30;
  271.                                 }
  272.                                 else if( ( ( nian%4!=0 )||( nian==2000 ) )&&( yue==2 )&&( ri>28 ) )
  273.                                 {
  274.                                         ri=28;
  275.                                 }
  276.                                 else if( ( nian%4==0 )&&( nian!=2000 )&&( yue==2 )&&( ri>29 ) )
  277.                                 {
  278.                                         ri=29;
  279.                                 }
  280.                         }
  281.                         if(xianshi==1&&xuanze==3){nian++;if(nian==2100)nian=2000;}
  282.                         if(xianshi==2&&xuanze==1){nfen++;if(nfen==60)nfen=0;}
  283.                         if(xianshi==2&&xuanze==2){nshi++;if(nshi==24)nshi=0;}
  284.                         if(xuanze==0&&LED==0){x=1;t=0;}                                                           //x置1,闹钟取消
  285.                         if(xuanze==0&&LED==1)b=0;
  286.                         while(!k2){display();chuli1();}                                               
  287.                 }
  288.         }
  289.         if(!k3)
  290.         {
  291.                 mDelay(1);
  292.                 if(!k3)
  293.                 {
  294.                         if(xianshi==0&&xuanze==1){miao--;if(miao>60)miao=59;}
  295.                         if(xianshi==0&&xuanze==2){fen--;if(fen>60)fen=59;}
  296.                         if(xianshi==0&&xuanze==3){shi--;if(shi>24)shi=23;}
  297.                         if(xianshi==1&&xuanze==1)
  298.                         {
  299.                                 ri--;
  300.                                 if(ri==0)
  301.                                 {       
  302.                                         if(  (yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12)  )
  303.                                         {
  304.                                                 ri=31;
  305.                                         }
  306.                                         else if(  (yue==4)||(yue==6)||(yue==9)||(yue==11)  )
  307.                                         {
  308.                                                 ri=30;
  309.                                         }
  310.                                         else if( ( ( nian%4!=0 )||( nian==2000 ) )&&( yue==2 ) )
  311.                                         {
  312.                                                 ri=28;
  313.                                         }
  314.                                         else if( ( nian%4==0 )&&( nian!=2000 )&&( yue==2 ) )
  315.                                         {
  316.                                                 ri=29;
  317.                                         }
  318.                                 }
  319.                         }
  320.                         if(xianshi==1&&xuanze==2)
  321.                         {
  322.                                 yue--;
  323.                                 if(yue==0)
  324.                                 yue=12;
  325.                                 if(  (yue==4)||(yue==6)||(yue==9)||(yue==11)&&(ri>30)  )
  326.                                 {
  327.                                         ri=30;
  328.                                 }
  329.                                 else if( ( ( nian%4!=0 )||( nian==2000 ) )&&( yue==2 )&&(ri>28) )
  330.                                 {
  331.                                         ri=28;
  332.                                 }
  333.                                 else if( ( nian%4==0 )&&( nian!=2000 )&&( yue==2 )&&(ri>29) )
  334.                                 {
  335.                                         ri=29;
  336.                                 }
  337.                         }
  338.                         if(xianshi==1&&xuanze==3){nian--;if(nian==1999)nian=2099;}
  339.                         if(xianshi==2&&xuanze==1){nfen--;if(nfen>60)nfen=59;}
  340.                         if(xianshi==2&&xuanze==2){nshi--;if(nshi>24)nshi=23;}
  341.                         if(xuanze==0&&LED==0)t=1;                                                                  //t置1,闹钟取消,延时3分钟
  342.                         if(xuanze==0&&LED==1)b=1;

  343.                         while(!k3){display();chuli1();}
  344.                 }
  345.         }
  346. }
  347. void jsxq()
  348. {
  349.         if(yue==1||yue==2)
  350.         {
  351.                 m=yue+12;
  352.                 y=nian-1;
  353.         }
  354. ……………………

  355. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png

所有资料51hei提供下载:
数字钟(仿真+源程序).zip (74.71 KB, 下载次数: 194)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:655165 发表于 2019-12-14 11:22 来自手机 | 显示全部楼层
试一试
回复

使用道具 举报

ID:138997 发表于 2019-12-14 20:32 | 显示全部楼层
只有仿真图,没有电路图?
回复

使用道具 举报

ID:138997 发表于 2019-12-14 20:36 | 显示全部楼层
来观摩,数码管是共阳还是共阴的?
回复

使用道具 举报

ID:630491 发表于 2020-3-9 17:00 | 显示全部楼层
HSCCSH 发表于 2019-12-14 20:32
只有仿真图,没有电路图?

仿真图和原理图八九不离十,差不多。
回复

使用道具 举报

ID:755422 发表于 2020-5-19 09:27 | 显示全部楼层
p1.0口前面连的是什么,是按钮吗
回复

使用道具 举报

ID:1058042 发表于 2022-12-18 11:36 | 显示全部楼层
程序跟仿真都很好 可以学习一下
回复

使用道具 举报

ID:1058172 发表于 2022-12-18 16:41 | 显示全部楼层
之前做过这个没看到这篇
回复

使用道具 举报

ID:1058986 发表于 2022-12-24 12:13 | 显示全部楼层
仿真图左边P1.0这边看不清
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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