找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数码管显示数字钟设计

[复制链接]
跳转到指定楼层
楼主
ID:376391 发表于 2019-1-2 10:24 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
程序源如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit dula=P2^6;
sbit wela=P2^7;      
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit buzzer=P3^7;   
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};   
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};


uint num,num1,num2,num3,shi1,shi2,fen1,fen2,miao1,miao2,keynum1,keynum4;
uint nnum1,nnum2,nnum3,nshi1,nshi2,nfen1,nfen2,nmiao1,nmiao2;           

void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
   for(j=110;j>0;j--) ;
    }


void display(uchar A,uchar B,uchar C,uchar D,uchar E,uchar F)
{
    miao1=num1/10;
    miao2=num1%10;
    fen1=num2/10;
    fen2=num2%10;
    shi1=num3/10;
    shi2=num3%10;
    nmiao1=nnum1/10;
    nmiao2=nnum1%10;
    nfen1=nnum2/10;
    nfen2=nnum2%10;
    nshi1=nnum3/10;
    nshi2=nnum3%10;


    P0=0xff;
    wela=1;
    P0=0xfe;
    wela=0;
    dula=1;
    P0=table[A];
    dula=0;            
    delayms(1);
    P0=0xff;
    wela=1;
    P0=0xfd;
    wela=0;
    dula=1;
    P0=table[B];
    dula=0;            
    delayms(1);
    P0=0xff;
    wela=1;
    P0=0xfb;
    wela=0;
    dula=1;
    P0=table[C];
    dula=0;            
    delayms(1);
    P0=0xff;
    wela=1;
    P0=0xf7;
    wela=0;
    dula=1;
    P0=table[D];
    dula=0;            
    delayms(1);
    P0=0xff;
    wela=1;
    P0=0xef;
    wela=0;
    dula=1;
    P0=table[E];
    dula=0;            
    delayms(1);
    P0=0xff;
    wela=1;
    P0=0xdf;
    wela=0;
    dula=1;
    P0=table[F];
    dula=0;            
    delayms(1);
    }


void keyscan()
{
   if(key1==0)
   {   delayms(10);
       if(key1==0)
       {
         keynum1++;
         while(!key1);
         }
    }
    if(keynum1!=0)
    {  TR0=0;
       if(keynum1==1)
       {
          if(key2==0)
          {
             delayms(10);
             if(key2==0)
             {
                 num1++;
                 if(num1==60)
                 num1=0;
                 while(!key2);
             }
          }
          if(key3==0)
          {
               delayms(10);
               if(key3==0)
                {
                   if(num1==0)
                   num1=60;
                   num1--;
                   while(!key3);
                   }
          }
        }
      if(keynum1==2)
      {   if(key2==0)
          {   delayms(10);
              if(key2==0)
              {   num2++;
                  if(num2==60)
                  num2=0;
                  while(!key2);
                  }
            }
          if(key3==0)
          {  delayms(10);
             if(key3==0)
             {   if(num2==0)
                 num2=60;
                 num2--;
                 while(!key3);

                 }
            }
        }
       if(keynum1==3)
       {   if(key2==0)
           {    delayms(10);
                if(key2==0)
                {   num3++;
                    if(num3==24)
                    num3=0;
                    while(!key2);
                    }
                }
           if(key3==0)
           {   delayms(10);
               if(key3==0)
               {
                   if(num3==0)
                   num3=24;
                   num3--;
                   while(!key3);
                   }
                }
            }
        if(keynum1==4)
        {
            keynum1=0;
            TR0=1;
               }
    }
       if(key4==0)
       {
          delayms(10);
          if(key4==0)
          {    keynum4++;
               while(!key4);
               }
        }
       if(keynum4!=0)
       {   TR0=0;
           if(keynum4==1)
           {   if(key2==0)
               {   delayms(10);
                   if(key2==0)
                   {   nnum1++;
                       if(nnum1==60)
                       nnum1=0;
                       while(!key2);
                    }
                }
                if(key3==0)
                {   delayms(10);
                    if(key3==0)
                    {   if(nnum1==0)
                        nnum1=60;
                        nnum1--;
                        while(!key3);
                    }
                }
            }
          if(keynum4==2)
          {   if(key2==0)
              {   delayms(10);
                  if(key2==0)
                  {   nnum2++;
                      if(nnum2==60)
                      nnum2=0;
                      while(!key2);
                  }
               }
               if(key3==0)
               {   delayms(10);
                   if(key3==0)
                   {   if(nnum2==0)
                       nnum2=60;
                       nnum2--;
                       while(!key3);
                       }
                }
        }
          if(keynum4==3)
          {   if(key2==0)
              {   delayms(10);
                  if(key2==0)
                  {   nnum3++;
                      if(nnum3==24)
                      nnum3=0;
                      while(!key2);
                    }
                }
              if(key3==0)
              {   delayms(10);
                  if(key3==0)
                  {   if(nnum3==0)
                      nnum3=24;
                      nnum3--;
                      while(!key3);
                  }
               }
            }
         if(keynum4==4)
         {
                keynum4=0;
                TR0=1;
            }
        }
}


void main()
{   num3=15;num2=29;num3=0;
    nnum3=15;nnum2=30;nnum3=0;
    TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536- 50000)%256;
    EA=1;
    ET0=1;
    TR0=1;
    while(1)
    {   keyscan();
        if(keynum4==0)
        {
            display(shi1,shi2,fen1,fen2,miao1,miao2);
            }
        if(keynum4!=0)
        {   display(nshi1,nshi2,nfen1,nfen2,nmiao1,nmiao2);
             }
        if(keynum1==0)
           if(num1==nnum1&num2==nnum2&num3==nnum3)
           {
                buzzer=0;
                delayms(5000);
                buzzer=1;
            }
        }
    }


void T0_time() interrupt 1
{   TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    num++;
    if(num==20)
    {
       num=0;
       num1++;
       if(num1==60)
       num1=0;
       if(num1==0)
       {
           num2++;
           if(num2==60)
           num2=0;
           if(num2==0)
           {
              num3++;
              if(num3==24)
              num3=0;
              }
        }
    }
}

-446c4dc3b99bd6e1.png (162.42 KB, 下载次数: 22)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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