日々の記録

ほどよく書いてきます。

Arduinoで7セグLED

2012年05月28日 20時57分58秒 | 電子工作
このあいだArduinoをAmazonで買って以来、ぽちぽちいじっている。
Arduino-IDEでもプログラムするけどAVR Studio 6でも裸AVR用にプログラムも作りつつ勉強しています。

ArduinoにもPORTD=0b11111111;とかの命令が送れたらいいのになと思いながらコード書いてましたが、
調べたらArduinoでもPORTDなど直接操作できるみたい。


以下のコードはPORTD、つまりDIGITALの0から7を7セグのAからHまでに割り振り、動かします。
行の頭のスペースが消えちゃうので読みにくいけど、これで動きます。

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

void setup() {
DDRD=0b11111111; //setting PORTD for output
}
void loop() {
for(int i=0;i<10;i++){
PORTD=SevenSeg[i];
delay(500);
}
// PORTD=0b10000000; //display dot
// delay(500);
}



ちなみに、これを知らずに昨日はすごく長いコードを書いてしまった。上のコードはコンパイルして694バイト、下のは1530バイトにもなります。
恥ずかしながら載せると、でも、確かどこかのHPを参考にして作りました。特にconst int LedCountなどは拾いモンです。

const int LedCount = 10;
int ledPins[] = {
0, 1, 2, 3, 4, 5, 6, 7, 13 }; // an array of pin numbers to which LEDs are attached

void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
for (int thisLed = 0; thisLed < LedCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop() {
int i;
for(i=0;i<10;i++){
DispOut(i);
delay(500);
}
// DispOff();
// delay(500);
}

void DispOff(){
int i;
for(i=0;i digitalWrite(i,LOW);
}
}
void DispOut(int Num){
if(Num == 0) {
DispOff();
digitalWrite(0, HIGH); //まじムダ
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
}

if(Num==1) {
DispOff();
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
}

if(Num==2) {
DispOff();
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
}

if(Num==3) {
DispOff();
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(6,HIGH);
}

if(Num == 4) {
DispOff();
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}

if(Num == 5) {
DispOff();
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}

if(Num == 6) {
DispOff();
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}

if(Num == 7) {
DispOff();
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
}

if(Num == 8) {
DispOff();
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}

if(Num == 9) {
DispOff();
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}

}
コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 測定器制御 | トップ | ダイナミック点灯 »

コメントを投稿

電子工作」カテゴリの最新記事