数码管的显示,倒计时,正计时,暂停,等

#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int 
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
uchar run,key;
unsigned char flag=0;
unsigned  char fen1=29,maio1=59,maio1_=60;
uchar  fen2,maio2,maio2_;
//float time0,time1;
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};


void Init()//清零
{
    run=0;
maio2_=0;
    maio2=0;
fen2=0;
EA=0;
ET0=0;
TR0=0;
}


void delay(unsigned char i)//延时
{
   char j,k;
   for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}




void keyscan()//按键检测
{
   if(key1==0)
   {
       delay(5);
  if(key1==0)
  {
     run=1;
  }
}
   if(key2==0)
   {
       delay(5);
  if(key2==0)
  {
     run=0;
  }
}
if(key3==0)
     {
       delay(5);
  if(key3==0)
  {
     run=2;
}
}
    if(key4==0)
    {
       delay(5);
  if(key4==0)
  {
      run=3;
  }
}
}


void T0_time()interrupt 1
{
    TH0=(65536-9216)/256; //每隔10毫秒发起一次中断。
TL0=(65536-9216)%256;
if(run==1)
    {
   flag=1;
        maio2_+=1;
if(maio2_==60)
{
  maio2_=0;
  maio2++;
  if(maio2==60)
  {
     maio2=0;
 fen2++;
 if(fen2==60)
 fen2=0;
}
}
}  
if(run==2)
{
  flag=0; 
       maio1_-=1;
  if(maio1_==0)
  {
    maio1_=60;
    maio1--;
    if(maio1==0)
{
   maio1=60;
fen1--;
if(fen1==0)
   fen1=60;
}  
  }


   }
}


void display(char fen,char miao,char miao_)
{


    int a[6];
    a[1]=miao_/10;
    a[2]=miao%10;
    a[3]=miao/10;
    a[4]=fen%10;
    a[5]=fen/10;
  
    P0=table[a[1]];
    dula=1;
    dula=0;
    P0=0x7f;
    wela=1;
    wela=0;
    delay(5);
 

    P0=0x40;
    dula=1;
    dula=0;
    P0=0xbf;
    wela=1;
    wela=0;
    delay(5);
    
P0=table[a[2]];
    dula=1;
    dula=0;
    P0=0xdf;
    wela=1;
    wela=0;
    delay(5);


    P0=table[a[3]];
    dula=1;
    dula=0;
    P0=0xef;
    wela=1;
    wela=0;
    delay(5);




P0=0x40;
    dula=1;
    dula=0;
    P0=0xf7;
    wela=1;
    wela=0;
    delay(5);


  P0=table[a[4]];
    dula=1;
    dula=0;
    P0=0xfb;
    wela=1;
    wela=0;
    delay(5);


    P0=table[a[5]];
    dula=1;
    dula=0;
    P0=0xfd;
    wela=1;
    wela=0;
    delay(5);


P0=0x3f;
    dula=1;
    dula=0;
    P0=0xfe;
    wela=1;
    wela=0;
    delay(5);    
}


void check_display()
{
     if(run==0)
TR0=0;
     if(run==1&&TR0==0||run==2&&TR0==0)
     {
TMOD=0x01;
   TH0=(65536-9216)/256;  //每隔10毫秒发起一次中断。
TL0=(65536-9216)%256;
EA=1;
ET0=1;
TR0=1;
    }


if(run!=3)
{
   
   if(flag==1)
    {
      display(fen2,maio2,maio2_);
    }
      if(flag==0)
    {
     display(fen1,maio1,maio1_);
    }
    }
else
    {
   
   display(0,0,0);
   fen1=29;
maio1=59;
maio1_=60;
   fen2=0;
maio2=0;
   maio2_=0;
}
}  


void main()
{  
    Init();
while(1)
{
   keyscan();
check_display();
}
}

猜你喜欢

转载自blog.csdn.net/yilongdashi/article/details/80600274