LED数码管显示

#include <REGX51.H>

bit up_low,up_high,down_low,down_high,ret_low,ret_high,s_low,s_high,s_flag;
unsigned char count=0, delay_s=0, temp=0;

void delay_50us(unsigned int t);
void CheckUpPress(void);
void CheckDownPress(void);
void CheckSensor(void);
void CheckResetPress(void);
void DisplayLED(void);

int main(void)
{
 TMOD = 0x01;
 TH0 = 0x3C;TL0 = 0xB0;
 ET0=1;
 EA=1;
 TR0=0;

 while(1)
 {
  CheckUpPress();
  CheckDownPress();
  CheckResetPress();
  CheckSensor();
  DisplayLED();
 }

 return 0;
}

void delay_50us(unsigned int t)
{
 unsigned int j;
 
 for(;t>0;t--)
  for(j=19;j>0;j--)
   ;
}

void CheckUpPress(void)
{
 P0_0=1;up_high=P0_0;
 if((up_high==0)&&(up_low==1))
 {
  delay_50us(200);
  P0_0=1;up_high=P0_0;
  if(up_high==0)
  {
   count++;
   if(count>59)
    count=0;
   up_low=0;
  }
 } 
 else if(up_high==1)
 {
  up_low=1;
 }
}

void CheckDownPress(void)
{
 P0_1=1;down_high=P0_1;
 if((down_high==0)&&(down_low==1))
 {
  delay_50us(200);
  P0_1=1;down_high=P0_1;
  if(down_high==0)
  {
   if(count>0)
    count--;
   down_low=0;
  }
 } 
 else if(down_high==1)
 {
  down_low=1;
 }
}

void CheckResetPress(void)
{
 P0_2=1;ret_high=P0_2;
 if((ret_high==0)&&(ret_low==1))
 {
  delay_50us(200);
  P0_2=1;ret_high=P0_2;
  if(ret_high==0)
  {
   count=0;
   ret_low=0;
  }
 } 
 else if(ret_high==1)
 {
  ret_low=1;
 }
}

void CheckSensor(void)
{
 P0_3=1;s_high=P0_3;
 if((s_high==0)&&(s_low==1)&&(s_flag==0))
 {
  delay_50us(200);
  P0_3=1;s_high=P0_3;
  if(s_high==0)
  {
   count++;
   if(count>59)
    count=0;
   s_low=0;
   s_flag=1;
   TR0=1;
  }
 } 
 else if(s_high==1)
 {
  s_low=1;
 }
}

void IntTimer0 () interrupt 1 using 3
{
 delay_s++;
 TH0=0x3C;
 TL0=0x0B0;
 if(delay_s==20)  //1s
 {
  delay_s=0;
  s_flag=0;
  TR0=0;
 }
}

void DisplayLED(void)
{
 int t,o;
 t=count/10;
 o=count%10;

 if(temp<3)
 {
  P2=0x0;
  P1=0x0;
  temp++;
  return;
 }
 else if(temp==3)
  temp=0;

 switch(t) //P.0~P.6 -> A~G
 {
  case 0: P2=0xBF; break;
  case 1: P2=0x86; break;
  case 2: P2=0xDB; break;
  case 3: P2=0xCF; break;
  case 4: P2=0xE6; break;
  case 5: P2=0xED; break;
  case 6: P2=0xFD; break;
  case 7: P2=0x87; break;
  case 8: P2=0xFF; break;
  case 9: P2=0xEF; break;
  default: P2=0x80;
 }

 switch(o)
 {
  case 0: P1=0xBF; break;
  case 1: P1=0x86; break;
  case 2: P1=0xDB; break;
  case 3: P1=0xCF; break;
  case 4: P1=0xE6; break;
  case 5: P1=0xED; break;
  case 6: P1=0xFD; break;
  case 7: P1=0x87; break;
  case 8: P1=0xFF; break;
  case 9: P1=0xEF; break;
  default: P1=0x80;
 }
}

 

 

///////////////////////////////////////////////////////////////////////////////

 

#include <REGX51.H>

bit up_low,up_high,down_low,down_high,ret_low,ret_high,s_low,s_high,s_flag;
bit setUp=0;
unsigned char count=0, delay_s=0, temp=0;
unsigned char NUMBER=60, times=0;

void delay_50us(unsigned int t);
void CheckUpPress(void);
void CheckDownPress(void);
void CheckSensor(void);
void CheckResetPress(void);
void CheckSetupPress(void);
void DisplayLED(void);

int main(void)
{
 TMOD = 0x01;
 TH0 = 0x3C;TL0 = 0xB0;
 ET0=1;
 EA=1;
 TR0=0;

 while(1)
 {
  CheckUpPress();
  CheckDownPress();
  CheckResetPress();
  CheckSensor();
  CheckSetupPress();
  DisplayLED();
 }

 return 0;
}

void delay_50us(unsigned int t)
{
 unsigned int j;
 
 for(;t>0;t--)
  for(j=19;j>0;j--)
   ;
}

void CheckUpPress(void)
{
 P0_0=1;up_high=P0_0;
 if((up_high==0)&&(up_low==1))
 {
  delay_50us(200);
  P0_0=1;up_high=P0_0;
  if(up_high==0)
  {
   count++;
   if((count>=NUMBER)&&(setUp==0))
    count=0;
   if(count>99)
    count=1;
   up_low=0;
  }
 } 
 else if(up_high==1)
 {
  up_low=1;
 }
}

void CheckDownPress(void)
{
 P0_1=1;down_high=P0_1;
 if((down_high==0)&&(down_low==1))
 {
  delay_50us(200);
  P0_1=1;down_high=P0_1;
  if(down_high==0)
  {
   if(count>0)
    count--;
   down_low=0;
  }
 } 
 else if(down_high==1)
 {
  down_low=1;
 }
}

void CheckResetPress(void)
{
 P0_2=1;ret_high=P0_2;
 if((ret_high==0)&&(ret_low==1)&&(setUp==0))
 {
  delay_50us(200);
  P0_2=1;ret_high=P0_2;
  if(ret_high==0)
  {
   count=0;
   ret_low=0;
  }
 } 
 else if(ret_high==1)
 {
  ret_low=1;
 }
}

void CheckSetupPress(void)
{
 P0_2=1;ret_high=P0_2;
 if(ret_high==0)
 {
  delay_50us(400);
  if(times<25)
  {
   times++;
   return;
  }
  
  P0_2=1;ret_high=P0_2;
  if(ret_high==0)
  {
   if(setUp==0)
    setUp=1;
   else if(setUp==1)
   {
    setUp=0;
    NUMBER=count;
   }
   count=0;
   times=0;
  }
 } 
 else if(ret_high==1)
 {
  times=0;
 }
}

void CheckSensor(void)
{
 P0_3=1;s_high=P0_3;
 if((s_high==0)&&(s_low==1)&&(s_flag==0))
 {
  delay_50us(200);
  P0_3=1;s_high=P0_3;
  if(s_high==0)
  {
   count++;
   if(count==NUMBER)
    count=0;
   s_low=0;
   s_flag=1;
   TR0=1;
  }
 } 
 else if(s_high==1)
 {
  s_low=1;
 }
}

void IntTimer0 () interrupt 1 using 3
{
 delay_s++;
 TH0=0x3C;
 TL0=0x0B0;
 if(delay_s==20)  //1s
 {
  delay_s=0;
  s_flag=0;
  TR0=0;
 }
}

void DisplayLED(void)
{
 int t,o;
 t=count/10;
 o=count%10;

 if(temp<3)
 {
  P2=0x0;
  P1=0x0;
  temp++;
  return;
 }
 else if(temp==3)
  temp=0;

 if((setUp==1)&&(count==0))
 {
  t=NUMBER/10;
  o=NUMBER%10;
  count=NUMBER;
 }

 switch(t) //P.0~P.6 -> A~G
 {
  case 0: P2=0xBF; break;
  case 1: P2=0x86; break;
  case 2: P2=0xDB; break;
  case 3: P2=0xCF; break;
  case 4: P2=0xE6; break;
  case 5: P2=0xED; break;
  case 6: P2=0xFD; break;
  case 7: P2=0x87; break;
  case 8: P2=0xFF; break;
  case 9: P2=0xEF; break;
  default: P2=0x80;
 }

 switch(o)
 {
  case 0: P1=0xBF; break;
  case 1: P1=0x86; break;
  case 2: P1=0xDB; break;
  case 3: P1=0xCF; break;
  case 4: P1=0xE6; break;
  case 5: P1=0xED; break;
  case 6: P1=0xFD; break;
  case 7: P1=0x87; break;
  case 8: P1=0xFF; break;
  case 9: P1=0xEF; break;
  default: P1=0x80;
 }
}

posted on 2012-06-29 14:15  Arrow.Lu  阅读(159)  评论(0)    收藏  举报