ch5_1開關控制蜂鳴器與四位數七段顯示器上下數

 老蔡mytsaii教學網頁,hi 你好,我是老蔡mytsaii

ch5_1開關控制蜂鳴器與四位數七段顯示器上下數

四位數七段顯示器預設0000

按upCounter時蜂鳴器發出1kHz聲音,七段顯示器+1

按downCounter時蜂鳴器發出1kHz聲音,七段顯示器-1

七段顯示器數值範圍0000~9999


//ch5_1

const int upCount=A0;//開關上數接A0

const int downCount=A1;//開關下數接A1

const int scan[4]={5,6,7,8};//pin5~pin8 = scan[0]~scan[3]

const int dataPin=10;//串列資料

const int latchPin=11;//栓鎖訊號

const int clockPin=12;//接腳移位脈波訊號

const int segCode[10]=  {//0~9編碼低態作動

                        0xC0,//0,11000000

                        0xF9,//1,11111001

                        0xA4,//2,10100100

                        0xB0,//3,10110000

                        0x99,//4,10011001

                        0x92,//5,10010010

                        0x82,//6,10000010

                        0xF8,//7,11111000

                        0x80,//8,10000000

                        0x90//9,10010000

                        };

int dispData[4]={0,0,0,0};

const int buzzerPin=13;//蜂鳴器接13。

int counter=0;//計數器從0開始

void Transfer(void);//宣告Transfer

void doDownCounter(void);//宣告下數函數

void doUpCounter(void);//宣告上數函數

void scan7seg(void);//宣告掃scan7seg函數


void setup()

{

  for(int i=0;i<4;i++)

  {

    pinMode(scan[i],OUTPUT);

    digitalWrite(scan[i],1);

  }

  pinMode(dataPin,OUTPUT);

  pinMode(clockPin,OUTPUT);

  pinMode(latchPin,OUTPUT);

  digitalWrite(latchPin,0);

  Serial.begin(9600);

  pinMode(buzzerPin,OUTPUT);

  digitalWrite(buzzerPin,0);//buzzerPin預設0

}

void loop()

{

  scan7seg();

  int i=digitalRead(upCount);

  if(!i)

  {

    doUpCount();

    beep();

    while(!i)

    {

      i=digitalRead(upCount);

      scan7seg();

    }

  }

  else

  {

    int i=digitalRead(downCount);

    if(!i)

    {

      doDownCount();

      beep();

      while(!i)

      {

        i=digitalRead(downCount);

        scan7seg();

      }

    }

  }

}

void beep(void)

{

  tone(buzzerPin,1000);//產生1kHz聲音

  delay(100);

  noTone(buzzerPin);//聲音停止

}

void scan7seg()

{

  for(int i=0;i<4;i++)

  {

    digitalWrite(latchPin,0);

    shiftOut(dataPin,clockPin,MSBFIRST,segCode[dispData[i]]);

    digitalWrite(latchPin,1);

    digitalWrite(scan[3-i],0);

    delay(1);

    digitalWrite(scan[3-i],1);

  }

}

void doUpCount()

{

  counter++;

  if(counter>=10000)

  {

    counter=0;

  }

  Transfer();

}

void doDownCount()

{

  counter--;

  if(counter<0)

  {

    counter=9999;

  }

  Transfer();

}

void Transfer()

{

  dispData[0]=counter/1000;

  dispData[1]=counter/100%10;

  dispData[2]=counter/10%10;

  dispData[3]=counter%10;

}


留言

這個網誌中的熱門文章

量測例外練習01(計算+量測)