以下是一个参考程序,使用 Arduino 和七段数码管实现两位数计数程序,从 00 到 99 循环显示数字。

const int SEG_A = 2;
const int SEG_B = 3;
const int SEG_C = 4;
const int SEG_D = 5;
const int SEG_E = 6;
const int SEG_F = 7;
const int SEG_G = 8;
const int DIGIT_1 = 9;
const int DIGIT_2 = 10;

const byte SEGMENTS[] = {
  0b0111111, // 0
  0b0000110, // 1
  0b1011011, // 2
  0b1001111, // 3
  0b1100110, // 4
  0b1101101, // 5
  0b1111101, // 6
  0b0000111, // 7
  0b1111111, // 8
  0b1101111  // 9
};

void setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(DIGIT_1, OUTPUT);
  pinMode(DIGIT_2, OUTPUT);
}

void loop() {
  for (int i = 0; i < 100; i++) {
    displayNumber(i);
    delay(500);
  }
}

void displayNumber(int number) {
  int digit1 = number / 10;
  int digit2 = number % 10;
  displayDigit(DIGIT_1, digit1);
  delay(5);
  displayDigit(DIGIT_2, digit2);
  delay(5);
}

void displayDigit(int digitPin, int digit) {
  byte segments = SEGMENTS[digit];
  digitalWrite(digitPin, LOW);
  digitalWrite(SEG_A, bitRead(segments, 0));
  digitalWrite(SEG_B, bitRead(segments, 1));
  digitalWrite(SEG_C, bitRead(segments, 2));
  digitalWrite(SEG_D, bitRead(segments, 3));
  digitalWrite(SEG_E, bitRead(segments, 4));
  digitalWrite(SEG_F, bitRead(segments, 5));
  digitalWrite(SEG_G, bitRead(segments, 6));
  digitalWrite(digitPin, HIGH);
}

该程序使用 displayNumber 函数显示两位数,并使用 displayDigit 函数显示单个数字的数码管。在 loop 函数中,程序循环显示从 0 到 99 的数字。在 setup 函数中,程序将所有引脚设置为输出模式。

请注意,由于数码管的闪烁问题,我们需要在每个数码管上设置一个短暂的延迟,以防止一个数字的数码管闪烁到下一个数字的数码管上。在这个程序中,我们使用了一个 5 毫秒的延迟。


原文地址: https://www.cveoy.top/t/topic/m3Ym 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录