2021年7月11日 星期日

繞三圈停止 四位數七段顯示器 從最左邊的a出發結束也在a停止


 

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;

   }

  }

}

沒有留言:

張貼留言

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...