unsigned long time1=0;
unsigned long time2=0;
int seg7[] = {2, 3, 4, 5, 6, 7, 8};
char seg_7_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff};
// a b c d e f
int scan_line[] = {9,10,11,12};
char bcd[]={6,6,6,6};//一開機,先清除畫面
int i, j=0,cnt;
int x=0;
//-----------------------------------------------------------------------------
void setup()
{
for (i = 0; i < 8; i++)
{
pinMode(seg7[i], OUTPUT);//資料端
}
for (i = 0; i < 4; i++)
{
pinMode(scan_line[i], OUTPUT);//掃瞄端
}
}
//-----------------------------------------------------------------------------
void tx(byte data)
{
for (int j=0; j<7; j++) {
if (data % 2==1) // 取出 data 的最低位元
digitalWrite(seg7[j], LOW);
else
digitalWrite(seg7[j], HIGH);
data=data/2; // 除2,進行下一位元的處理
}
}
//-----------------------------------------------------------------------------
void display()
{
if(millis()-time1>5)
{
time1=millis();
tx(seg_7_table[bcd[j]]);
digitalWrite(scan_line[j],HIGH);
delay(1);
digitalWrite(scan_line[j],LOW);
j++;
if(j==4)
j=0;
}
if(millis()-time2>500)
{
time2=millis();
cnt++;
if(cnt>11)
cnt=0;
}
if(cnt==0){bcd[3]=0; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=6; }
if(cnt==1){bcd[3]=6; bcd[2]=0 ; bcd[1]=6 ; bcd[0]=6; }
if(cnt==2){bcd[3]=6; bcd[2]=6 ; bcd[1]=0 ; bcd[0]=6; }
if(cnt==3){bcd[3]=6; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=0; }
if(cnt==4){bcd[3]=6; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=1; }
if(cnt==5){bcd[3]=6; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=2; }
if(cnt==6){bcd[3]=6; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=3; }
if(cnt==7){bcd[3]=6; bcd[2]=6 ; bcd[1]=3 ; bcd[0]=6; }
if(cnt==8){bcd[3]=6; bcd[2]=3 ; bcd[1]=6 ; bcd[0]=6; }
if(cnt==9){bcd[3]=3; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=6; }
if(cnt==10){bcd[3]=4; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=6; }
if(cnt==11){bcd[3]=5; bcd[2]=6 ; bcd[1]=6 ; bcd[0]=6; }
}
void loop()
{
if(x==0)
{
display();
if(time1>=18500 || time2>=18500)//關閉time1 或 time2 (12*500)*3(跑三次,跑一輪)+500(還要在a stop所以加500=18500
{
for(int b=0;b<4;b++)
{
digitalWrite(scan_line[j],LOW);
}
x=1;
}
}
}