【问题标题】:Seven Segment display always shows top七段显示器始终显示顶部
【发布时间】:2019-02-23 16:31:18
【问题描述】:

使用我的 Arduino,我创建了一个具有十六进制数字 0-F 的二维数组,以在七段显示器上显示。一切都很完美,我使用了一个 for 循环来打开显示屏的每个部分,但顶部显示屏 (A) 始终处于打开状态,即使它不应该打开也是如此。

void sevenSegment(int a) {
  for (int i = 0; i < nPins; i++) {
    digitalWrite(fontArray[a][i], HIGH);
  }
}

数组:

int fontArray[][7] = { 

  {13, 12, 11, 10, 9, 8}, // 0
  {12, 11},               // 1
  {13, 12, 10, 9, 7},     // 2
  {13, 12, 11, 10, 7},    // 3
  {12, 11, 8, 7},  // 4
  {13, 11, 10, 8, 7},   // 5
  {13, 11, 10, 9, 8, 7},   // 6
  {13, 12, 11}, // 7
  {13, 12, 11, 10, 9, 8, 7},  // 8
  {13, 12, 11, 10, 8, 7},  // 9
  {13, 12, 11, 9, 8, 7},  // A
  {11, 10, 9, 8, 7},  // B
  {13, 10, 9, 8}, // C
  {12, 11, 10, 9, 7}, // D
  {13, 10, 9, 8, 7}, // E
  {13, 9, 8, 7} };  // F

为什么显示器的顶部 (A) 引脚 13 总是在燃烧? :/

【问题讨论】:

    标签: arrays for-loop arduino


    【解决方案1】:

    这些段永远不会设置回LOW

    你需要这样的东西:

    int fontArray[][7] = { 
    
      // pins: {13, 12, 11, 10, 9, 8, 7},  // 8
    
      {1, 1, 1, 1, 1, 1, 0}, // 0
      {0, 1, 1, 0, 0, 0, 0}, // 1
      // ...
    };
    

    然后使用:

    void sevenSegment(int a) {
      for (int i = 0; i < 7; i++) {
        digitalWrite(13 - i, fontArray[a][i]);
      }
    }
    

    如果 pinnumber 不连续,可以像这样使用第二个数组:

    int pinArray[] = {13, 12, 11, 10, 9, 8, 7};
    
    void sevenSegment(int a) {
      for (int i = 0; i < 7; i++) {
        digitalWrite(pinArray[i], fontArray[a][i]);
      }
    }
    

    【讨论】:

    • 但是它会快速打开和关闭引脚 1。如何将 HIGH 值 1 和 LOW 值 0 链接到具有相应引脚号的数组?
    • @goeie_billen 任何地方都没有设置引脚 1。 HIGH 已经是 1,LOW 是 0。
    • @goeie_billen fontArray 现在包含每个数字的段值(1 表示高,0 表示低)。循环从引脚 13 倒数到引脚 7,并设置在 fontArray[a][i] 中找到的值。
    【解决方案2】:

    您的接线中没有错误,数组fontArray 没有显式初始化所有值。所以编译器会给这些未初始化的值(在一个全局数组中)一个默认值 0。

    结果是调用digitalWrite(0, HIGH)。根据电路板和引脚配置,引脚“0”可能会映射到 13。

    可以编写for循环来防止这种情况:

    for (int i = 0; i < nPins; i++) {
      int pin = fontArray[a][i];
      if (pin == 0) {
        break;
      }
      digitalWrite(pin, HIGH);
    }
    

    【讨论】:

    • 假设他使用的是 Uno,0 是 pin 0 (RX) 而不是 13。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2015-11-25
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多