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;
}
}