日々の記録

ほどよく書いてきます。

ダイナミック点灯

2012年05月30日 00時16分11秒 | その他雑記


ダイナミック点灯に挑戦。うまくいった。

ArduinoのDIGIATLのPin0からPin7がPORTDに対応します。NPNトランジスタ経由でアノードコモンの7セグLEDに接続。
DIGITALのPin8から13がPORTBですが、8,9,10,11を使って表示する桁を選択します。こちらはハイサイドスイッチなのでPNPトランジスタ経由で駆動します。

何も考えずに適当に回路つくったらトランジスタ12個、抵抗20本という回路になりましたが、マイコンのポートはLEDくらいなら直接駆動できるようなので、トランジスタは不要で、抵抗8本のみでよかったのかもしれません。

あと、高い桁の部分の0表示、消灯するような場合分けをしたら成功でしょうか。
以下コード


unsigned char SevenSeg[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};  // an array for 7 segment LED display
unsigned char SevenSegDigits[] = {0b00001110, 0b00001101, 0b00001011, 0b00000111}; //define digits

void setup() {
 DDRD=0b11111111; //setting PORTD0-7 for output
 DDRB=0b00001111; //setting PORTB0-3 for output
}
void loop() {
 unsigned int Value;
 unsigned char DigitVal[3];

  for(int i=0;i<10000;i++){  //表示する値

   Value=i;
   for(char ii=0;ii<4;ii++){  //各桁に分ける
    DigitVal[ii]=Value%10;
    Value=Value/10;
   }
   
    for(char k=0;k<2;k++){  //表示ループ
     for(char j =0;j<4;j++){
      PORTB=SevenSegDigits[j];
      PORTD=SevenSeg[DigitVal[j]];
      delay(1);  //表示の停止待ち時間
     }
    }
  }
}
コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Arduinoで7セグLED | トップ | 温度計 »

コメントを投稿

その他雑記」カテゴリの最新記事