#define sw1 digitalRead(35)//定義按鈕腳位
int seg[] = {27,26,25,33,32,2,4};
int tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x07f,0x67,0x00};
int s1=23;
int s2=5;
int s3=18;
int s4=19;
int i,j,k,s,t,f;
void setup() {
pinMode(15, INPUT_PULLUP); //定義按鈕上拉模式
pinMode(14, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(35, INPUT_PULLUP);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(s4, OUTPUT);
pinMode(sw1, INPUT_PULLUP);
for (i=0;i<7;i++) //以迴圈方式定義腳位
{
pinMode(seg[i], OUTPUT);
digitalWrite(seg[i],HIGH);
}
}
void display(int a)
{
for (i=0;i<7;i++) //控制a~g來顯示0~9
{
if(a%2==0)
{
digitalWrite(seg[i], HIGH);
}
else{
digitalWrite(seg[i], LOW);
};
a=a/2;
}
}
void out()
{
digitalWrite(s4,1);
digitalWrite(s3,0);
digitalWrite(s2,0);
digitalWrite(s1,0);
display(tab[k%10]);
delay(8);
display(tab[10]); //個位數
digitalWrite(s4,0);
digitalWrite(s3,1);
digitalWrite(s2,0);
digitalWrite(s1,0);
display(tab[(k/10)%10]); //十位數
delay(8);
display(tab[10]);
/*
digitalWrite(s4,0);
digitalWrite(s3,0);
digitalWrite(s2,1);
digitalWrite(s1,0);
display(tab[(k/100)%10]);
delay(2);
display(tab[10]);
digitalWrite(s4,0);
digitalWrite(s3,0);
digitalWrite(s2,0);
digitalWrite(s1,1);
display(tab[(k/1000)]);
delay(2);
display(tab[10]); //因為只數到20所以百位千位就不用用到
*/
}
void sw()
{
if(sw1==0) //按鈕控制
{
delay(20);
while(digitalRead(35==0));
f++;
if(f>2)f=0;
}
}
void loop() {
sw();
if(f==0) //按下按鈕時輸出
{
out();
}
if(f==1) //到20停下然後在按一下開始下數
{
k++;
if(k>20)k=20;{
for(t=0;t<20;t++){
out();
}
}
}
if(f==2)
{
k--;
if(k==0)k=36;{ //下數到0再重新從36開始下數
for(t=0;t<36;t++){
out();
}
}
}
}