找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机数码管时钟程序仿真

[复制链接]
跳转到指定楼层
楼主
ID:80436 发表于 2015-5-19 02:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式






  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit s1=P1^0;
  5. sbit s2=P1^1;
  6. sbit s3=P1^2;
  7. sbit fengmingqi=P3^7;
  8. sbit smg1=P2^0;
  9. sbit smg2=P2^1;
  10. sbit smg3=P2^2;
  11. sbit smg4=P2^3;
  12. sbit smg5=P2^4;
  13. sbit smg6=P2^5;
  14. sbit smg7=P2^6;
  15. sbit smg8=P2^7;
  16. uchar qiehuan=0,qhxs,tiaojie;
  17. uchar ns=0,nf=0,nm=0;
  18. uchar shi=23,fen=59,miao=55,jishi=0;
  19. uchar nian1=20,nian2=15,yue=5,ri=9;
  20. uchar code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  21. void yanshi(uchar s)
  22. {
  23.         uchar i,j;
  24.         for(i=s;i>0;i--)
  25.         for(j=120;j>0;j--);
  26. }
  27. void shijianxianshi()
  28. {
  29.         smg1=1;
  30.         P0=smg[shi/10];
  31.         yanshi(5);
  32.         smg1=0;
  33.         smg2=1;
  34.         P0=smg[shi%10];
  35.         yanshi(5);
  36.         smg2=0;
  37.         smg3=1;
  38.         P0=0xbf;
  39.         yanshi(5);
  40.         smg3=0;
  41.         smg4=1;
  42.         P0=smg[fen/10];
  43.         yanshi(5);
  44.         smg4=0;
  45.         smg5=1;
  46.         P0=smg[fen%10];
  47.         yanshi(5);
  48.         smg5=0;
  49.         smg6=1;
  50.         P0=0xbf;
  51.         yanshi(5);
  52.         smg6=0;
  53.         smg7=1;
  54.         P0=smg[miao/10];
  55.         yanshi(5);
  56.         smg7=0;
  57.         smg8=1;
  58.         P0=smg[miao%10];
  59.         yanshi(5);
  60.         smg8=0;
  61. }
  62. void riqixianshi()
  63. {
  64.         smg1=1;
  65.         P0=smg[nian1/10];
  66.         yanshi(5);
  67.         smg1=0;
  68.         smg2=1;
  69.         P0=smg[nian1%10];
  70.         yanshi(5);
  71.         smg2=0;
  72.         smg3=1;
  73.         P0=smg[nian2/10];
  74.         yanshi(5);
  75.         smg3=0;
  76.         smg4=1;
  77.         P0=smg[nian2%10];
  78.         yanshi(5);          
  79.         smg4=0;
  80.         smg5=1;
  81.         P0=smg[yue/10];
  82.         yanshi(5);
  83.         smg5=0;
  84.         smg6=1;
  85.         P0=smg[yue%10];
  86.         yanshi(5);
  87.         smg6=0;
  88.         smg7=1;
  89.         P0=smg[ri/10];
  90.         yanshi(5);
  91.         smg7=0;
  92.         smg8=1;
  93.         P0=smg[ri%10];
  94.         yanshi(5);
  95.         smg8=0;
  96. }
  97. void naozhong()
  98. {
  99.         smg1=1;
  100.         P0=smg[ns/10];
  101.         yanshi(5);
  102.         smg1=0;
  103.         smg2=1;
  104.         P0=smg[ns%10];
  105.         yanshi(5);
  106.         smg2=0;
  107.         smg3=1;
  108.         P0=0xbf;
  109.         yanshi(5);
  110.         smg3=0;
  111.         smg4=1;
  112.         P0=smg[nf/10];
  113.         yanshi(5);
  114.         smg4=0;
  115.         smg5=1;
  116.         P0=smg[nf%10];
  117.         yanshi(5);
  118.         smg5=0;
  119.         smg6=1;
  120.         P0=0xbf;
  121.         yanshi(5);
  122.         smg6=0;
  123.         smg7=1;
  124.         P0=smg[nm/10];
  125.         yanshi(5);
  126.         smg7=0;
  127.         smg8=1;
  128.         P0=smg[nm%10];
  129.         yanshi(5);
  130.         smg8=0;       
  131. }
  132. void anjian()
  133. {
  134.         if(s1==0)
  135.         yanshi(10);
  136.         if(s1==0)
  137.         {                                  
  138.                 yanshi(10);                       
  139.                 tiaojie++;
  140.                 TR0=0;
  141.                 ET0=0;
  142.                 if(tiaojie==10)
  143.                         {
  144.                                 tiaojie=0;
  145.                                 qiehuan=0;
  146.                                 TR0=1;
  147.                                 ET0=1;
  148.                         }               
  149.                 while(!s1);
  150.         }
  151.         if(tiaojie==1)
  152.         {
  153.                 qiehuan=0;
  154.                 if(s2==0)
  155.                 {
  156.                         miao++;
  157.                         if(miao==60)
  158.                                 {                                                                                
  159.                                         miao=0;
  160.                                         fen++;
  161.                                         if(fen==60)
  162.                                         {
  163.                                                 fen=0;
  164.                                                 shi++;
  165.                                                 if(shi==24)
  166.                                                 shi=0;               
  167.                                         }
  168.                                 }
  169.                                 while(!s2);
  170.                         }                               
  171.                 if(s3==0)
  172.                 {
  173.                         yanshi(10);
  174.                         if(s3==0)
  175.                         {
  176.                                 miao--;
  177.                                 if(miao==-1)
  178.                                         {
  179.                                                 miao=59;
  180.                                                 fen--;
  181.                                                 if(fen==-1)
  182.                                                     {
  183.                                                                 fen=59;
  184.                                                                 shi--;
  185.                                                                 if(shi==-1)
  186.                                                                 {
  187.                                                                         shi=23;
  188.                                                                 }
  189.                                                         }
  190.                                     }
  191.                                 while(!s3);
  192.                         }
  193.                 }
  194.         }

  195.                 if(tiaojie==2)
  196.                 {
  197.                         qiehuan=0;
  198.                         if(s2==0)
  199.                         {
  200.                                 yanshi(10);                                       
  201.                                 if(s2==0)
  202.                                 fen++;
  203.                                 




  204. if(fen==60)
  205.                                 {
  206.                                         fen=0;
  207.                                         shi++;
  208.                                         if(shi==24)
  209.                                         shi=0;
  210.                                 }                                       
  211.                                 while(!s2);
  212.                         }
  213.                 if(s3==0)
  214.                 yanshi(10);
  215.                 if(s3==0)
  216.                 {
  217.                         fen--;
  218.                         if(fen==-1)
  219.                         {
  220.                                 fen=59;
  221.                                 shi--;
  222.                                 if(shi==-1)
  223.                                 shi=23;
  224.                         }
  225.                                 while(!s3);
  226.                 }
  227.         }                
  228.                 if(tiaojie==3)
  229.                 {
  230.                         qiehuan=0;
  231.                         if(s2==0)
  232.                         {
  233.                                 yanshi(10);
  234.                                 if(s2==0)
  235.                                 {                                                  
  236.                                         shi++;
  237.                                         if(shi==24)
  238.                                         shi=0;
  239.                                 }
  240.                          while(!s2);
  241.                         }
  242.                          if(s3==0)
  243.                          {                                                        
  244.                                         yanshi(10);                                       
  245.                                 if(s3==0)
  246.                                 {
  247.                                         shi--;
  248.                                         if(shi==-1)
  249.                                         {
  250.                                                 shi=23;
  251.                                         }
  252.                                 }                          
  253.                          while(!s3);
  254.                          }
  255.                 }
  256.                 if(tiaojie==4)
  257.                 {               
  258.                         qiehuan=1;
  259.                         if(s2==0)
  260.                         {                                               
  261.                                         yanshi(10);                                               
  262.                                 if(s2==0)
  263.                                         {
  264.                                         while(!s2);
  265.                                         ri++;
  266.                                     if(yue==2&&((nian2==0&&nian1%4==0)||(nian2!=0&&nian1%4==0))&&ri==30)
  267.                                         ri=1;  
  268.                                     else if(yue==2&&ri==29)
  269.                                         ri=1;
  270.                                     else if((yue==4||yue==6||yue==9||yue==11)&&ri==31)
  271.                                         ri=1;
  272.                                     else if(ri==32)
  273.                                         ri=1;                                       
  274.                                 }                               
  275.                         }
  276.                          if(s3==0)
  277.                          {
  278.                                         yanshi(10);                                               
  279.                                 if(s3==0)
  280.                                 {
  281.                                         ri--;
  282.                                         if(ri==0)
  283.                                         ri=31;
  284.                                 }
  285.                                 while(!s3);
  286.                          }
  287.                 }
  288.                 if(tiaojie==5)
  289.                 {
  290.                         qiehuan=1;
  291.                         if(s2==0)
  292.                         {                                                        
  293.                                         yanshi(10);                                               
  294.                                 if(s2==0)
  295.                                 {
  296.                                         yue++;
  297.                                         if(yue==13)
  298.                                         {
  299.                                                 yue=1;
  300.                                                 nian2++;
  301.                                                 if(nian2==100)
  302.                                                 {
  303.                                                         nian2=0;
  304.                                                         nian1++;
  305.                                                         if(nian1==100)
  306.                                                         nian1=0;
  307.                                                 }
  308.                                         }
  309.                                         while(!s2);
  310.                                 }
  311.                         }
  312.                         if(s3==0)
  313.                         {
  314.                                         yanshi(10);                                       
  315.                                 if(s3==0)
  316.                                 {
  317.                                         yue--;
  318.                                         if(yue==0)
  319.                                         yue=12;
  320.                                 }
  321.                                 while(!s3);
  322.                         }
  323.                 }
  324.                 if(tiaojie==6)
  325.                 {
  326.                         qiehuan=1;
  327.                         if(s2==0)
  328.                         {                                                                
  329.                                         yanshi(10);                                               
  330.                                 if(s2==0)
  331.                                 {
  332.                                         nian2++;
  333.                                         if(nian2==100)
  334.                                         {
  335.                                                 nian2=0;
  336.                                                 nian1++;
  337.                                                 if(nian1==100)
  338.                                                 nian1=0;
  339.                                         }
  340.                                 }
  341.                                 while(!s2);
  342.                         }
  343.                         if(s3==0)
  344.                         {                                                          
  345.                                         yanshi(10);                                       
  346.                                 if(s3==0)
  347.                                 {
  348.                                         nian2--;
  349.                                         if(nian2==-1)
  350.                                         nian2=99;
  351.                                 }
  352.                                 while(!s3);
  353.                         }
  354.                 }
  355.                 if(tiaojie==7)
  356.                 {
  357.                         qiehuan=1;
  358.                         if(s2==0)
  359.                         {                                                         
  360.                                         yanshi(10);                                               
  361.                                 if(s2==0)
  362.                                 {
  363.                                         nian1++;
  364.                                         if(nian1==100)
  365.                                         nian1=0;
  366.                                 }
  367.                                 while(!s2);
  368.                         }
  369.                         if(s3==0)
  370.                         {                                                          
  371.                                         yanshi(10);                                       
  372.                                 if(s3==0)
  373.                                 {
  374.                                         nian1--;
  375.                                         if(nian1==-1)
  376.                                         nian1=99;
  377.                                 }
  378.                                 while(!s3);
  379.                         }
  380.                 }
  381.                 if(tiaojie==8)
  382.                 {
  383.                         qiehuan=3;
  384.                         if(s2==0)
  385.                         {                                                  
  386.                                         yanshi(10);                                       
  387.                                 if(s2==0)
  388.                                 {
  389.                                         nf++;
  390.                                         if(nf==60)
  391.                                         nf=0;
  392.                                 }
  393.                                 while(!s2);
  394.                         }
  395.                         if(s3==0)
  396.                         {                                               
  397.                                         yanshi(10);                                       
  398.                                 if(s3==0)
  399.                                 {
  400.                                         nf--;
  401.                                         if(nf==-1)
  402.                                         nf=59;
  403.                                 }
  404.                                 while(!s3);
  405.                         }
  406.                 }
  407.                 if(tiaojie==9)
  408.                 {         
  409.                         qiehuan=3;
  410.                         if(s2==0)
  411.                         {                                        
  412.                                         yanshi(10);                                               
  413.                                 if(s2==0)
  414.                                 {
  415.                                         ns++;
  416.                                         if(ns==24)
  417.                                         ns=0;
  418.                                 }
  419.                                 while(!s2);
  420.                         }
  421.                         if(s3==0)
  422.                         {
  423.                                 yanshi(10);
  424.                                 if(s3==0)
  425.                                 {
  426.                                         ns--;
  427.                                         if(ns==-1)
  428.                                         ns=23;
  429.                                 }
  430.                                 while(!s3);
  431.                         }
  432.                 }                       
  433. }
  434. void dingshiqi()
  435. {
  436.         TMOD = 0x01;
  437.         TH0 = 0x4C;
  438.         TL0 = 0x00;
  439.         ET0 = 1;
  440.         TR0 = 1;
  441.         EA = 1;
  442. }
  443. void main()
  444. {
  445.         dingshiqi();
  446.         tiaojie=0;
  447.         qiehuan=0;
  448.         fengmingqi=1;
  449.                 while(1)
  450.         {
  451.                         anjian();
  452.                         if(qiehuan==3)
  453.                         naozhong();                                                                                               
  454.                         if(qiehuan==2)
  455.                         qiehuan=0;
  456.                         if(qiehuan==1)
  457.                         riqixianshi();
  458.                         if(qiehuan==0)
  459.                         shijianxianshi();
  460.                         if(fen==nf&&shi==ns)
  461.                                 {
  462.                                 fengmingqi=0;                               
  463.                                 yanshi(shijianxianshi);
  464.                                 fengmingqi=1;                               
  465.                                 }                               
  466.                                                                                                                
  467.                         if((P1&0xff)!=0xff)
  468.                         {
  469.                                 fengmingqi=0;
  470.                                 yanshi(50);
  471.                                 fengmingqi=1;
  472.                         }                                                        
  473.         }
  474. }
  475. void jishu()interrupt 1
  476. {
  477.         TR0 = 0;      
  478.         TH0 = (65536 - 50000 ) / 256;      
  479.         TL0 = (65536 - 50000 ) % 256;      
  480.         TR0 = 1;
  481.         jishi++;
  482.         if(jishi==21)
  483.         {
  484.                 jishi=0;
  485.                 miao++;
  486.                 if(miao==60)
  487.                 {
  488.                         qiehuan++;
  489.                         miao=0;
  490.                         fen++ ;
  491.                         if(fen==60)
  492.                         {
  493.                                 fen=0;
  494.                                 shi++;
  495.                                 if(shi==24)
  496.                                 {
  497.                                         shi=0;
  498.                                         ri++;
  499.                                         if(yue==2&&((nian2==0&&nian1%4==0)||(nian2!=0&&nian1%4==0))&&yue==30)
  500.                                         ri=1;  
  501.                                      else if(yue==2&&ri==29)
  502.                                         ri=1;
  503.                                      else if((yue==4||yue==6||yue==9||yue==11)&&ri==31)
  504.                                         ri=1;
  505.                                      else if(ri==32)ri=1;
  506.                                          if(ri==1)
  507.                                      {
  508.                                                   yue++;
  509.                                                   if(yue==13)
  510.                                                   {
  511.                                                            yue=1;
  512.                                                            nian2++;
  513.                                                            if(nian2==100)
  514.                                                                    {
  515.                                                                     nian2=0;
  516.                                                                     nian1++;
  517.                                                                         if(nian1==100)
  518.                                                                         nian1=0;
  519.                                                         }
  520.                                                 }                                               
  521.                                         }
  522.                                 }
  523.                         }
  524.                 }
  525.         }
  526. }
复制代码






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

使用道具 举报

沙发
ID:110866 发表于 2017-6-25 08:41 | 只看该作者
楼主源文件呢?
回复

使用道具 举报

板凳
ID:262101 发表于 2017-12-19 15:52 | 只看该作者
楼主可以把源文件发给我吗??谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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