在数码管上显示出HELLO-(座位号),例如33号,则结果显示HELLO-33请编写程序、绘制电路图、编译和仿真运行。

2023-04-07by@1978054988-sOjH9&@ChatGPT.Model: gpt-3.5
1978054988-sOjH9

在数码管上显示出HELLO-(座位号),例如33号,则结果显示HELLO-33请编写程序、绘制电路图、编译和仿真运行。

Avatar
Avatar

由于没有具体的数码管型号和驱动方式,以下提供一种基于数字管74595和BCD-7段数码管的实现方案。

电路图:

hello_seatnum_circuit

程序代码:

// Define the pins of 74595
#define DS_PIN 2
#define SHCP_PIN 3
#define STCP_PIN 4

// Define the seat number
#define SEAT_NUM 33

// Define the letters in BCD code
const uint8_t BCD_H = 0b1000;
const uint8_t BCD_E = 0b1110;
const uint8_t BCD_L = 0b0110;
const uint8_t BCD_O = 0b1111;
const uint8_t BCD_dash = 0b0001;

// Convert a decimal digit to BCD code
uint8_t dec2bcd(uint8_t dec) {
  return ((dec / 10) << 4) | (dec % 10);
}

void shiftOut(uint8_t val) {
  for (int i = 0; i < 8; i++) {
    digitalWrite(DS_PIN, (val & (1 << i)) >> i);
    digitalWrite(SHCP_PIN, HIGH);
    digitalWrite(SHCP_PIN, LOW);
  }
}

void updateDisplay(uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4, uint8_t digit5, uint8_t digit6) {
  shiftOut(dec2bcd(digit6));
  shiftOut(dec2bcd(digit5));
  shiftOut(dec2bcd(digit4));
  shiftOut(dec2bcd(digit3));
  shiftOut(dec2bcd(digit2));
  shiftOut(dec2bcd(digit1));
  digitalWrite(STCP_PIN, HIGH);
  digitalWrite(STCP_PIN, LOW);
}

void setup() {
  pinMode(DS_PIN, OUTPUT);
  pinMode(SHCP_PIN, OUTPUT);
  pinMode(STCP_PIN, OUTPUT);
  updateDisplay(BCD_H, BCD_E, BCD_L, BCD_L, BCD_O, BCD_dash);
  delay(500);
}

void loop() {
  updateDisplay(BCD_H, BCD_E, BCD_L, BCD_L, BCD_O, BCD_dash);
  delay(500);
  updateDisplay(dec2bcd(SEAT_NUM / 10