const int SEG[7] = {6,7,8,9,10,11,12}; // 宣告顯示信號接腳
const int scan[4] = {2,3,4,5}; // 宣告掃描信號接腳
const int SEG_code [10] = {
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90 };
const int PB[4] = {A2,A3,A4,A5};
const int DD = A1;
const int DIPSW = A0;
const int BZ = 13;
int disp[4]={0,0,0,0};
int DISP;
unsigned long x0,x1,x2;
boolean phase0;
int seconds = 0, sec = 0;
void beep(int pin, int counts);
void scanner(int x);
void setup() {
for(int i = 0; i < 7; i++)
pinMode(SEG[i], OUTPUT);
for(int i = 0; i < 4; i++)
{
pinMode(scan[i], OUTPUT);
pinMode(PB[i], INPUT);
}
pinMode(DD, OUTPUT);
pinMode(BZ, OUTPUT);
pinMode(DIPSW, INPUT);
}
void loop()
{
if(digitalRead(DIPSW))
phase0=true;
else
{
phase0=false;
disp[3]=1;
disp[2]=2;
disp[1]=0;
disp[0]=0;
}
while(phase0)
{
seconds=0;
if(!digitalRead(PB[0]))
{
if(disp[3]==2 && disp[2]==3)
{
disp[3]=0;
disp[2]=0;
}
else if(disp[2]==9)
{
disp[2]=0;
disp[3]++;
}
else
disp[2]++;
}
if(!digitalRead(PB[1]))
{
if(disp[3]==0 && disp[2]==0)
{
disp[3]=2;
disp[2]=3;
}
else if(disp[2]==0)
{
disp[2]=9;
disp[3]--;
}
else
disp[2]--;
}
if(!digitalRead(PB[2]))
{
if(disp[1]==5 && disp[0]==9)
{
disp[1]=0;
disp[0]=0;
}
else if(disp[0]==9)
{
disp[0]=0;
disp[1]++;
}
else
disp[0]++;
}
if(!digitalRead(PB[3]))
{
if(disp[1]==0 && disp[0]==0)
{
disp[1]=5;
disp[0]=9;
}
else if(disp[0]==0)
{
disp[0]=9;
disp[1]--;
}
else
disp[0]--;
}
scanner(25);
if(digitalRead(DIPSW))
phase0=true;
else
{
phase0=false;
disp[3]=1;
disp[2]=2;
disp[1]=0;
disp[0]=0;
}
}
while(!phase0)
{
scanner(2);
x1=millis();
x2=x1-x0;
if(x2>=500)
{
x0=x1;
sec=!sec;
digitalWrite(DD,sec);
if(sec)
{
if(++seconds==60)
{
seconds=0;
if(disp[0]==9)
{
disp[0]=0;
if(disp[1]==5)
{
disp[1]=0;
if(disp[2]==2 && disp[3]==2)
{
disp[2]=2;
disp[3]=1;
}
else if(disp[2]==9)
{
disp[2]=0;
disp[3]++;
}
else
disp[2]++;
}
else
disp[1]++;
}
else
disp[0]++;
}
}
}
if(digitalRead(DIPSW))
phase0=true;
else
phase0=false;
}
}
void beep(int pin, int counts)
{
for(int i=0; i<counts; i++)
{
tone(pin,1000,100);
delay(100);
}
}
void scanner(int x)
{
for(int i=0; i<x; i++)
{
for(int j=0; j<4; j++)
{
for(int k=0; k<4; k++)
digitalWrite(scan[k],1);
DISP=SEG_code[disp[j]];
for(int k=0; k<8; k++)
{
if(bitRead(DISP,k))
digitalWrite(SEG[k],1);
else
digitalWrite(SEG[k],0);
}
digitalWrite(scan[j],0);
delay(1);
}
}
}