學習目標  2唸經  

 

(一)數位輸入控制與Debounce

 

(二)Ardiuno語法基礎:if else if、digitalRead( )

 

(三)INPUT_PULLUP 模式

 

(四)單鍵開關、指撥開關

 

(五)七段顯示器

 

 


 

EX 5-1:修改EX 3-3」範例,加入「指撥開關x 2」的功能

 

 

1)指撥:ON1  OFF0 

 

2)指撥:10→四顆 LED,單顆左移循環

 

3)指撥:01→四顆 LED,單顆右移循環 

 

4)指撥:11 LED 1秒閃1 

 

5)指撥:00 LED 全滅 

 

 

 

 

//修改EX 3-3」範例,加入「指撥開關x 2」的功能

//1)指撥:ON1  OFF0

//2)指撥:10→四顆 LED,單顆左移循環

//3)指撥:01→四顆 LED,單顆右移循環

//4)指撥:11 LED 1秒閃1

//5)指撥:00 LED 全滅

 

 

const int LED[4]={10,11,12,13};         //定義第1013腳接 LED

int SW[2]={};                        //陣列內容可以不寫

int i;

 

void setup()

{

  for (i=0;i<=3;i=i+1)

  {

    pinMode(LED[i],OUTPUT);              // 設定第10~13腳為輸出

  }

  pinMode(2,INPUT);                      //定義第23腳接指撥開關

  pinMode(3,INPUT); 

}

 

void loop()

{

  SW[0]=digitalRead(2);

  SW[1]=digitalRead(3);

  if ((SW[1]==HIGH) && (SW[0]==LOW))

  {

    for (i=0;i<=3;i=i+1)

    {

      digitalWrite(LED[i],HIGH); 

      delay(1000);                  

      digitalWrite(LED[i],LOW);

    }

  }   

  else if ((SW[1]==LOW) && (SW[0]==HIGH))

  {

    for (i=3;i>=0;i=i-1)

    {

      digitalWrite(LED[i],HIGH); 

      delay(1000);                  

      digitalWrite(LED[i],LOW);

    }

  }

  else if ((SW[1]==HIGH) && (SW[0]==HIGH))

  {

    for (i=0;i<=3;i=i+1)

    {

      digitalWrite(LED[i],HIGH);

    }

    delay(1000);     

    for (i=0;i<=3;i=i+1)

    {

      digitalWrite(LED[i],LOW);

    }    

     delay(1000);

  }

  else

  { 

    for (i=0;i<=3;i=i+1)

    {

      digitalWrite(LED[i],LOW);

    } 

  }

}

 

 

 

 


  

Test 5-1:修改EX 4-3」範例,加入「指撥開關x 3」的功能  ORZ3.gif  

 

https://electronics520.pixnet.net/blog/post/388156166

 

 

void setup()

 

{

 

 

}

 

 

 

void loop()

 

{

 

 

 

}

 

 


 


 

 

 

EX 5-2BCD對共陽極七段顯示器「指撥開關x 4」的功能

 1)指撥:ON0  OFF1(利用 INPUT_PULLUP功能)

 2)指撥:00001001 七段:09

 3)指撥:10101111 七段:全滅

 4)利用「查表法」建立七段的字碼

 

 

 

 

//BCD對共陽極七段顯示器「指撥開關x 4」的功能

//1)指撥:ON0  OFF1(利用 INPUT_PULLUP功能)

//2)指撥:00001001 七段:09

//3)利用「查表法」建立七段的字碼

 

 

const int seg_7A[7]={0,1,2,3,4,5,6};     //定義數位輸出接腳06分別接共陽極七段顯示器的 a g

const byte code[10]=                 //定義共陽極七段顯示器所要顯示的「字碼」,字碼代號為:1gfedcba

            {B11000000, B11111001, B10100100, B10110000, B10011001,

             B10010010, B10000010, B11111000, B10000000, B10010000};                      

int SW[4]={};                       //定義 4pin 指撥開關

int i;

 

void setup()

{

  for (i=0;i<=6;i=i+1)

  {

    pinMode(seg_7A[i],OUTPUT);       // 設定第 0~6 腳為輸出。

  }

  for (i=7;i<=10;i=i+1)

  {

    pinMode(i,INPUT_PULLUP);       //定義第710腳接指撥開關

  }

}

 

void loop()

{

  int number=0;

  SW[0]=digitalRead(7);

  number=number+SW[0];

  SW[1]=digitalRead(8);

  number=number+SW[1]*2;

  SW[2]=digitalRead(9);

  number=number+SW[2]*4;

  SW[3]=digitalRead(10);

  number=number+SW[3]*8;

 

  if (number<=9)

  {

   for (i=0;i<=6;i=i+1)

   {

     if (bitRead(code[number],i)==1)

     {

       digitalWrite(seg_7A[i],LOW);   //此處的 LOWHIGH格式為「共陰極」,若將其巔倒則變為「共陽極」

     }

     else

     {

       digitalWrite(seg_7A[i],HIGH);

     }

   }

  }

  else

  {

    for (i=0;i<=6;i=i+1)

    {

      digitalWrite(seg_7A[i],LOW);

    }

  }  

}

 

 

 


 

 

EX 5-3:以按鍵開關完成09的上數計數器

 1)按鍵:按下→0  OFF1(利用 INPUT_PULLUP功能)

 2)電源 ON,七段無顯示。

 3)按鍵按住:由0 9,依序自動循環上數。

 4按一次按鍵,上數一次?

 

 

 

 

 

//以按鍵開關完成09的上數計數器

//1)按鍵:按下→0  OFF1(利用 INPUT_PULLUP功能)

//2)電源 ON,七段無顯示。

//3)按鍵按下:由0 9,依序循環上數。

//4)按一次按鍵,上數一次?

 

 

const int seg_7A[7]={0,1,2,3,4,5,6};                                     //定義數位輸出接腳06分別接共陽極七段顯示器的 a g

const byte code[10]=                                                     //定義共陽極七段顯示器所要顯示的「字碼」,字碼代號為:1gfedcba

            {B11000000, B11111001, B10100100, B10110000, B10011001,

             B10010010, B10000010, B11111000, B10000000, B10010000}; 

const int SW=11;                                                             //定義第11腳為「按鈕開關」

int Button;

int i,j=0;

 

void setup()

{

  for (i=0;i<=6;i=i+1)

  {

    pinMode(seg_7A[i],OUTPUT);                                           // 設定第 0~6 腳為輸出。

  }

  pinMode(11,INPUT_PULLUP);                                              //定義第11腳為按鈕開關

}

 

void loop()

{

  Button=digitalRead(SW);

  if (Button==0)

   {

     for (i=0;i<=6;i=i+1)

     {

       if (bitRead(code[j],i)==1)

       {

         digitalWrite(seg_7A[i],LOW);                   //此處的 LOWHIGH格式為「共陰極」,若將其巔倒則變為「共陽極」                 

       }

       else

       {

         digitalWrite(seg_7A[i],HIGH);

       }

     }

     //delay(500);

     if (j<9)

     {

       j=j+1;

     }

     else

     {

      j=0;

     } 

   }     

}

 

 

 


 

 

 EX 5-4:以按鍵開關完成09的上數計數器

 1)按鍵:按下→0  OFF1(利用 INPUT_PULLUP功能)

 2)電源 ON,七段無顯示。

 3)按鍵按住:不變。按鍵放開:由0 9,依序循環上數。

 4按一次按鍵,上數一次

 

 

 

 

 

//以按鍵開關完成09的上數計數器

//1)按鍵:按下→0  OFF1(利用 INPUT_PULLUP功能)

//2)電源 ON,七段無顯示。

//3)按鍵按下:由0 9,依序循環上數。

//4)按一次按鍵,上數一次

 

 

const int seg_7A[7]={0,1,2,3,4,5,6};                      //定義數位輸出接腳06分別接共陽極七段顯示器的 a g

const byte code[10]=                                              //定義共陽極七段顯示器所要顯示的「字碼」,字碼代號為:1gfedcba

            {B11000000, B11111001, B10100100, B10110000, B10011001,

             B10010010, B10000010, B11111000, B10000000, B10010000}; 

const int SW=11;                                                             //定義第11腳為「按鈕開關」

int debounces=6;

 

int i,j=0;

 

void setup()

{

  for (i=0;i<=6;i=i+1)

  {

    pinMode(seg_7A[i],OUTPUT);                                           // 設定第 0~6 腳為輸出。

  }

  pinMode(11,INPUT_PULLUP);                                              //定義第11腳為按鈕開關

}

 

void loop()

{

    if (digitalRead(SW)==0)

  {

    debounces=1;

  }

  else

  {

    if (debounces<5)

    {

      debounces=debounces+1;

      if (debounces==5)

      {

        j=j+1;

      }

    }

  }

 

    if (j<=9)

   {   

     for (i=0;i<=6;i=i+1)

     {

       if (bitRead(code[j],i)==1)

       {

         digitalWrite(seg_7A[i],LOW);   //此處的 LOWHIGH格式為「共陰極」,若將其巔倒則變為「共陽」                 

       }

       else

       {

         digitalWrite(seg_7A[i],HIGH);

       }

     }

     //delay(500);

   }

   else

   {

     j=0;

   }   

   

}

 

 


 

 Test 5-2:按鍵開關完成09的加、減法器  2挖鼻孔.gif   

 

 1)以EX5-2~EX5-4為參考。

 2指撥:ON0  OFF1(利用 INPUT_PULLUP功能)

 (3按鍵:按下→0  OFF1(利用 INPUT_PULLUP功能)

 

 4)電源 ON,由指撥讀入一組 BCD 碼的數字,並顯示於七段顯示器。

 

 5)A按鍵:下壓 → 執行加1的動作(只做1次)

 (6)B按鍵:下壓 → 七段顯示器不變;彈開上升 → 執行減1的動作

 

 

 

 

 

 

 

 

https://electronics520.pixnet.net/blog/post/388156166%20

 

 

void setup()

 

{

 

    

}

 

 

  

void loop()

 

  

{

 

 

 

}

 

 

 

 

 

 

 

 

 

 


 

 

Test 5-3:以按鍵開關完成09的上、下數計數器  2往生  

 1)按鍵:按下→0  OFF1(利用 INPUT_PULLUP功能)

 2)電源 ON,七段自動上數。

 3)每按一次「按鍵開關」,則改變「上、下」數的計數方式。

 

 

 

 

https://electronics520.pixnet.net/blog/post/388156166%20

 

 

void setup()

 

  

{

  

 

  

}

 

 

   

void loop()

  

 

{

 

  

 

}

 

  

 

 

創作者介紹
創作者 矽夢人生 的頭像
electronics520

矽夢人生

electronics520 發表在 痞客邦 留言(0) 人氣( 1745 )