找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6833|回复: 0
收起左侧

数字时钟电路设计(proteus仿真电路 C源程序)

[复制链接]
ID:290363 发表于 2018-3-11 13:12 | 显示全部楼层 |阅读模式
相互学习,有错误请指出 没事~分享数字时钟电路设计!~

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.jpg

单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit dula=P2^0;
  5. sbit wela=P2^1;
  6. sbit s1=P1^0;
  7. sbit s2=P1^1;
  8. sbit s3=P1^2;
  9. sbit s4=P1^3;
  10. sbit g_56=P2^5;
  11. sbit g_34=P2^6;
  12. sbit g_12=P2^7;

  13. uchar nian,yue,ri,shi,fen,miao,leap,flag,num;
  14. uint t;
  15. uchar code table[]={
  16. 0x3f,0x06,0x5b,0x4f,
  17. 0x66,0x6d,0x7d,0x07,
  18. 0x7f,0x6f,0x00
  19. };
  20. uchar code table1[2][13]=
  21. {
  22. {0,31,28,31,30,31,30,31,31,30,31,30,31},
  23. {0,31,29,31,30,31,30,31,31,30,31,30,31}
  24. };
  25. void delay(uint z);
  26. void time0_init(void);
  27. void display_sfm(uchar shi_,uchar fen_,uchar miao_);
  28. void init_time();
  29. void display_nyr();
  30. void keyscan();



  31. void main()
  32. {
  33.    dula=0;
  34.    wela=0;
  35.    init_time();
  36.    time0_init();
  37.    while(1)
  38.    {
  39.        if(nian%4==0)
  40.          leap=1;
  41.        else
  42.           leap=0;

  43.            if(num==1)
  44.              { g_56=~g_56;
  45.                    g_34=0;
  46.                    g_12=0;
  47.                    delay(10);
  48.                      }
  49.        if(num==2)
  50.             {
  51.                g_56=0;
  52.                    g_34=~g_34;
  53.                    g_12=0;
  54.                    delay(10);
  55.             }
  56.                 if(num==3)
  57.             {
  58.                g_56=0;
  59.                    g_34=0;
  60.                    g_12=~g_12;
  61.                    delay(10);
  62.             }
  63.                 if(num==0)
  64.             {
  65.                g_56=0;
  66.                    g_34=0;
  67.                    g_12=0;
  68.             }   


  69.        if(t>=3120)
  70.                 {
  71.                   t=0;
  72.                   miao++;
  73.                   if(miao==60)
  74.                   {
  75.                      miao=0;
  76.                          fen++;
  77.                          if(fen==60)
  78.                          {
  79.                             fen=0;
  80.                                 shi++;
  81.                                 if(shi==24)
  82.                                 {
  83.                                    shi=0;
  84.                                    ri++;
  85.                                    if(ri==(table1[leap][yue]+1))
  86.                                    {
  87.                                        ri=1;
  88.                                            yue++;
  89.                                            if(yue==13)
  90.                                            {
  91.                                              yue=1;
  92.                                                  nian++;
  93.                                                  if(nian==100)
  94.                                                  {
  95.                                                    nian=0;
  96.                                                  }
  97.                                           
  98.                                            }
  99.                                   
  100.                                   
  101.                                    }
  102.                                 }
  103.                          }
  104.                   
  105.                   }
  106.                   
  107.                 }
  108.                 if(flag==0)      
  109.                display_sfm(shi,fen,miao);
  110.                 else
  111.                    //display_nyr();
  112.                    display_sfm(nian,yue,ri);
  113.             keyscan();



  114.    }

  115. }
  116. void delay(uint z)
  117. {
  118.       uint x,y;
  119.       for(x=z;x>0;x--)
  120.          for(y=110;y>0;y--);
  121. }

  122. void time0_init(void)
  123. {
  124.         TMOD=0x02;
  125.         TH0=0;
  126.         TL0=0;
  127.     //TH0=(65536-50000)/256;
  128.     //TL0=(65536-50000)%256;
  129.     ET0=1;
  130.         EA=1;
  131.     TR0=1;
  132.    
  133. }
  134. void init_time()
  135. {
  136.     t=0;
  137.         flag=0;
  138.         num=0;
  139.         g_56=0;
  140.         g_34=0;
  141.         g_12=0;

  142.         shi=0;
  143.         fen=0;
  144.         miao=0;

  145.         nian=11;
  146.         yue=6;
  147.         ri=3;



  148. }
  149. void time0() interrupt 1
  150. {
  151.         //TH0=(65535-50000)/256;
  152.     //TL0=(65535-50000)%256;
  153.         t++;       
  154. }
  155. void display_sfm(uchar shi_,uchar fen_,uchar miao_)
  156. {
  157.    wela=1;
  158.    P0=0xfe;
  159.    wela=0;

  160.    dula=1;
  161.    P0=table[shi_/10];
  162.    dula=0;
  163.    delay(1);

  164.    wela=1;
  165.    P0=0xfd;
  166.    wela=0;

  167.    dula=1;
  168.    P0=table[shi_%10];
  169.    dula=0;
  170.    delay(1);

  171.    wela=1;
  172.    P0=0xfb;
  173.    wela=0;

  174.    dula=1;
  175.    P0=table[fen_/10];
  176.    dula=0;
  177.    delay(1);

  178.    wela=1;
  179.    P0=0xf7;
  180.    wela=0;

  181.    dula=1;
  182.    P0=table[fen_%10];
  183.    dula=0;
  184.    delay(1);

  185.    wela=1;
  186.    P0=0xef;
  187.    wela=0;

  188.    dula=1;
  189.    P0=table[miao_/10];
  190.    dula=0;
  191.    delay(1);

  192.    wela=1;
  193.    P0=0xdf;
  194.    wela=0;

  195.    dula=1;
  196.    P0=table[miao_%10];
  197.    dula=0;
  198.    delay(1);


  199. }
  200. void display_nyr()
  201. {
  202.    wela=1;
  203.    P0=0xfe;
  204.    wela=0;

  205.    dula=1;
  206.    P0=table[nian/10];
  207.    dula=0;
  208.    delay(1);

  209.    wela=1;
  210.    P0=0xfd;
  211.    wela=0;

  212.    dula=1;
  213.    P0=table[nian%10];
  214.    dula=0;
  215.    delay(1);

  216.    wela=1;
  217.    P0=0xfb;
  218.    wela=0;

  219.    dula=1;
  220.    P0=table[yue/10];
  221.    dula=0;
  222.    delay(1);

  223.    wela=1;
  224.    P0=0xf7;
  225.    wela=0;

  226.    dula=1;
  227.    P0=table[yue%10];
  228.    dula=0;
  229.    delay(1);

  230.    wela=1;
  231.    P0=0xef;
  232.    wela=0;

  233.    dula=1;
  234.    P0=table[ri/10];
  235.    dula=0;
  236.    delay(1);

  237.    wela=1;
  238.    P0=0xdf;
  239.    wela=0;

  240.    dula=1;
  241.    P0=table[ri%10];
  242.    dula=0;
  243.    delay(1);
  244. }
  245. void keyscan()
  246. {
  247.     if(s1==0)
  248.         {
  249.            delay(5);
  250.            if(s1==0)
  251.            {
  252.               while(!s1);
  253.                   flag=~flag;                                         
  254.            }
  255.        
  256.         }
  257.         if(s2==0)
  258.         {
  259.            delay(5);
  260.            if(s2==0)
  261.            {
  262.                while(!s2);
  263.                    num++;
  264.                   if(num==1)
  265.                    {
  266.                        TR0=0;                            
  267.                    }
  268.                   if(num==4)
  269.                   {
  270.                       TR0=1;
  271.                           num=0;
  272.                   }
  273.                      
  274.            }
  275.        
  276.        
  277.     }

  278.            if(s3==0)
  279.            {
  280.                delay(5);
  281.                    if(s3==0)
  282.                    {
  283.                       while(!s3);
  284.               if(num==1&&flag==0)
  285.                           {
  286.                               shi++;
  287.                                   if(shi==24)
  288.                                      shi=0;                          
  289.                           }
  290.                           if(num==1&&flag!=0)
  291.                           {
  292.                                nian++;
  293.                                    if(nian==100)
  294.                                       nian=0;                          
  295.                           }

  296.                           if(num==2&&flag==0)
  297.                           {
  298.                                fen++;
  299.                                    if(fen==60)
  300.                                       fen=0;                          
  301.                           }
  302.                           if(num==2&&flag!=0)
  303.                           {
  304.                                yue++;
  305.                                    if(yue==13)
  306.                                       yue=1;                          
  307.                           }

  308.                           if(num==3&&flag==0)
  309.                           {
  310.                                miao++;
  311.                                    if(miao==60)
  312.                                       miao=0;                          
  313.                           }
  314.                           if(num==3&&flag!=0)
  315.                           {
  316.                                ri++;
  317.                                    if(ri==(table1[leap][yue]+1))
  318.                                       ri=1;                          
  319.                           }

  320.                   
  321.                    }
  322.           
  323.            }

  324.            if(s4==0)
  325.            {
  326.                delay(5);
  327.                    if(s4==0)
  328.                    {
  329.                       while(!s4);
  330.               if(num==1&&flag==0)
  331.                           {
  332. ……………………

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

所有资料51hei提供下载:
数字时钟电路设计(proteus仿真电路 C源程序).zip (390.61 KB, 下载次数: 43)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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