⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 基于51的时钟程序.txt

📁 用WAVE6000开发环境写的电子钟程序
💻 TXT
字号:
#include "absacc.h"
#include <reg51.h>
#include <stdio.h>

#define   uint   unsigned int
#define   uchar  unsigned char

#define   C_8155   XBYTE  [0x8000]
#define   PA_8155  XBYTE  [0x8001]
#define   PB_8155  XBYTE  [0x8002]
#define   PC_8155  XBYTE  [0x8003]

uchar   code   TABLE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
                        0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF,0x0C,0x89,0x7F,0xBF,
                        0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint  i1=2,i2=3,i3=5,i4=9;i5=5;i6=0,j1=4,y1=1;

uchar hcq[6];   //显示缓冲
uint  z1=0,b=0;
uchar KEY_NUM;

void  xian();
void  yanshi(uint d);
void  xiugai();
uchar zhi,a=0;
uchar time,time1 ; //   一秒/半秒 计数

uchar   bdata   KEY_HANG;
uchar   bdata   KEY_LIE;

sbit    HANG0=KEY_HANG^0;
sbit    HANG1=KEY_HANG^1;
sbit    HANG2=KEY_HANG^2;
sbit    HANG3=KEY_HANG^3;
sbit    LIE0 =KEY_LIE^0;
sbit    LIE1 =KEY_LIE^1;
sbit    LIE2 =KEY_LIE^2;


/*******************去显影延时程序*********************/
void del()
 {uchar i,j;
    for(i=100;i>0;i--)
    for(j=2;j>0;j--)
     {
     }
 }

//*******************延时子程序*********************
void  yanshi(uint d)
{

   uchar  j;
   while(d--)
   {for(j=0;j<100;j++)
      {;}
     xian();
   }

}
//**********************时钟程序*********************

void  biao()
   {if(i6==9)
      {i6=0;
           if(i5==5)
           {i5=0;
                 if(i4==9)
                 {i4=0;
                       if(i3==5)
                       {i3=0;
                             if(i2==9)
                             {i2=0;i1++;}
                              else if(i1==2&&i2==3)
                              {i1=0;i2=0;}
                              else i2++;
                       }
                       else i3++;
                 }
                 else i4++;
           }
           else i5++;

      }
      else i6++;
   }
/*****************闪烁***********************/
void shanshuo()
   {   hcq[i1]=16;
   }


//********************显示子程序*******************

void  xian()
{   
   uchar sel,i;
    sel=0x10;
    for(i=0;i<6;i++)
    {
        PB_8155=TABLE[hcq[i]];
        PA_8155=sel;
        sel=sel<<1;
        del();
    }
    sel=0x01;
    for(i=0;i<4;i++)
    {
      PB_8155=TABLE[hcq[i+2]];
      PA_8155=sel;
      sel=sel<<1;
      del();
  
   }
  

}

/***************扫描键盘******************/

uchar KEY_JUDGE( uchar d )
{
      uchar a;
      PA_8155=d;
      PC_8155=PC_8155&0X07;
      a=~PC_8155;
      return a;
}
/***************       求键值子程序         ******************/

uchar  KEY_VALUE()
{
      uchar a, b, c=0xFF, i, Scan;
      if ( ( KEY_JUDGE( 0x00 ) & 0x07 ) !=0 )
      {
         xian();         /* 若有键按下则调显示子程序去抖 */
         xian();

         Scan=0xFE;              /* 扫描字赋初值 */
         for ( i=0 ; i<4 ; i++ )
         {
            KEY_LIE=KEY_JUDGE( Scan );
            if ( ( KEY_LIE & 0x07 ) != 0 ) { i=4; KEY_HANG=Scan ; }
            else
             {
              a=Scan>>(8-1);
              b=Scan<<1;
              Scan=a|b;
             }
         }
            while ( ( KEY_JUDGE(0X00) & 0x07 ) != 0 ) { xian(); }  /* 若键没有被释放,则调显示延时 */
            if ( HANG0==0 )   { a=0;}
            else if ( HANG1==0 )  { a=1; }
            else if ( HANG2==0 )  { a=2; }
            else if ( HANG3==0 )  { a=3; }
            if ( LIE0==1 )   { b=1; }
            else if ( LIE1==1 )   { b=2; }
            else if ( LIE2==1 )   { b=3; }
            c=a*3+b;               /* 计算键值 */
            if ( c==11 ) { c=0; }  /* 若键值为11,则改为0 */

      }
     return c;
}
/*********************允许****************/
void yunxu()
{
   if(zhi>2)
   i1=0;
   else i1=zhi;
}

/*********************允许1****************/
void yunxu1()
{
   if(i1==2)
   i2<5;
   else i2=0;
}
/*************  #号键处理程序  **************/

void jingjian()
  {
     z1++;
     //xiugai();
      
       // case 5:que_ding();y1=1;break;
       // case 6:z1=0;quxiao();break;
     
  }


//*******************取消******************
void quxiao()
  {
      jingjian();
  }

/**************确定**************/

void queding()
{
  
    switch (z1)
    {    
          case 1 : yunxu();break;
          case 2 :i2=zhi; break;
          case 3 :i3=zhi; break;
          case 4 :i4=zhi; break;
          case 5 :i5=zhi; break;
          case 6 :i6=zhi; break;
          case 7 :break;
          case 8 :z1=0,quxiao();break;
          default: break;

    }
      
  
}



/******************中断程序*****************/
 void int_t0() interrupt 1 using 0
 {TH0=0x4C;   //设置产生中断的时间50毫秒
  TL0=0x00;
  time--; time1--;

  if(time==0)   //一秒钟到了,要做的事
        { time=20;
          //b=~b;
          biao();

          }
   }


//*****************主程序*********************


main ()
{  uchar KEY_NUM;
   yanshi(100) ;
    TMOD=1;
  TH0=0x4C;
  TL0=0x00;
  EA=1;
  ET0=1;
  TR0=1;
  time=20;
  time1=10;
   C_8155=0x03;          //单片机工作方式控制字
  while(1)
    {
        hcq[0]=i1;
        hcq[1]=i2;
        hcq[2]=i3;
        hcq[3]=i4;
        hcq[4]=i5;
        hcq[5]=i6;


        KEY_NUM=KEY_VALUE();
               switch ( KEY_NUM )
               {
                  case 1 : zhi=1;queding();break;
                  case 2 : zhi=2;queding();break;
                  case 3 : zhi=3;queding();break;
                  case 4 : zhi=4;queding();break;
                  case 5 : zhi=5;queding();break;
                  case 6 : zhi=6;queding();break;
                  case 7 : zhi=7;queding();break;
                  case 8 : zhi=8;queding();break;
                  case 9 : zhi=9;queding();break;
                  case 0 : zhi=0;queding();break;
                  //case 10: xingjian();break;
                  case 12: jingjian();break;
                  default: break;
               }
               xian();
     }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -