如何在LED显示屏上点亮多条线?

时间:2017-12-02 03:09:56

标签: arduino display words led

我正在制作一个LED显示屏项目并尝试在显示屏上显示一些字词,但我无法连续点亮。以下是代码。

int greenPin = 7;
int redPin = 6;
int stbPin = 2;
int clkPin = 3;
int aPin = 4;
int bPin = 5;
int delayTime = 1;
int i = 0;

void setup() {
  pinMode(greenPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  pinMode(stbPin, OUTPUT);
  pinMode(clkPin, OUTPUT);
  pinMode(aPin, OUTPUT);
  pinMode(bPin, OUTPUT);
  digitalWrite(aPin, LOW);
  digitalWrite(bPin, LOW);
  digitalWrite(stbPin, HIGH);
  digitalWrite(clkPin, LOW);
}

void loop() {
  digitalWrite(stbPin, LOW);
  digitalWrite(aPin, HIGH);
  digitalWrite(bPin, LOW);
  twoLines(B11111111, B11111111, B00000000, B00000000, B11111111, B11111111, B00000000, B00000000);
  digitalWrite(aPin, LOW);
  digitalWrite(bPin, LOW);
  delayMicroseconds(delayTime);
  digitalWrite(stbPin, HIGH);
  delayMicroseconds(delayTime);
}

void twoLines( byte br, byte dr, byte ar, byte cr, byte bg, byte dg, byte ag, byte cg) {
  byte Garr[] = { ag, bg, cg, dg };
  byte Rarr[] = { ar, br, cr, dr };

  for ( int i = 0; i < 4; i++ ) {
    for (byte mask = 11111111; mask > 0; mask >>= 1) {
      digitalWrite(clkPin, LOW); // delayMicroseconds(delayTime);
      if (Rarr[i] & mask) {
        digitalWrite(redPin, HIGH);
      } else {
        digitalWrite(redPin, LOW);
      }
      if (Garr[i] & mask) {
        digitalWrite(greenPin, HIGH);
      } else {
        digitalWrite(greenPin, LOW);
      }
      delay(2);
      digitalWrite(clkPin, HIGH);
      delay(2);
    }
  }
}

现在,我最多只能点亮两行,但我希望能够一次点亮三行来创建字母。任何形式的帮助表示赞赏。以下是LED显示屏的外观。

LED Display

1 个答案:

答案 0 :(得分:0)

对于您这样做的第一件事,请阅读LED的数据表并查看它们绘制的电流量。如果你得到100个LED并且每个吸收20 mA,这将是2安培,不仅Arduino无法提供它,你冒着燃烧你的Arduino的风险。在确定系统需要多少电流后,您必须使用可以处理它的电源。您有多种选择,例如BJT是电流放大器,但它使设计复杂化,需要一些电气工程背景。另一种选择是使用外部电源,如电池或墙上插头。然后,您只需购买一个可以满足您当前需求的适配器或稳压器。此外,在这种情况下,你需要某种继电器来控制你的Arduino LED指示灯。继电器的作用是它允许您使用微控制器逻辑打开和关闭它,但是当它打开时它使用外部电源。