MAX7219 예제 (8자리 세그먼트 드라이버)

발행: (2026년 1월 1일 오전 05:35 GMT+9)
7 분 소요
원문: Dev.to

I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (or the portion you want translated) here? I’ll keep the source line exactly as you provided and preserve all formatting, markdown, and technical terms.

하드웨어

제가 사용한 보드에는 8‑자리 7‑세그먼트 디스플레이와 MAX7219 드라이버가 포함되어 있습니다.

MAX7219 8‑digit 7‑segment

핀아웃

기능
GND전원 그라운드
VCC전원 공급 (5 V)
DIN직렬 데이터 입력
CLK직렬 클럭
LOAD / CS래치 (칩‑셀렉트)

핀들은 SPI 인터페이스처럼 보이지만, MAX7219는 단순한 16‑비트 직렬 프로토콜만 사용합니다 (MAX7221은 SPI‑호환 변형입니다).

Serial Data Format

Each transaction consists of 16 bits:

  • Upper 8 bits – Register address
  • Lower 8 bits – Data for that register

The datasheet shows the bits being shifted MSB first (the functional diagram mistakenly mentions LSB first).

Serial Data Format

Register Address Map

Address (hex)Register nameDescription
0x01‑0x08Digit 0‑7각 자리의 세그먼트 데이터
0x09Decode Mode자리별 BCD 디코딩 활성화/비활성화
0x0AIntensity밝기 (0x0 … 0xF)
0x0BScan‑Limit표시되는 자리 수 (0‑7)
0x0CShutdown정상 동작 (0x01) / 셧다운 (0x00)
0x0FDisplay Test모든 세그먼트를 최대 밝기로 강제 켜기

Register Address Map

  • Display Test 레지스터는 모든 자리의 모든 세그먼트를 최대 밝기로 켭니다.*
  • Shutdown 레지스터는 0x01을 사용해 정상 동작을 활성화합니다(이름이 다소 혼동될 수 있습니다).*

레지스터: Scan‑Limit

Scan‑Limit 레지스터는 활성화되는 자리수를 선택합니다:

  • 0x00 – 자리수 0만 표시됩니다 (리셋 후 기본값)
  • 0x07 – 모든 8자리 모두 표시됩니다

출력을 전혀 원하지 않을 경우 다음 중 하나를 선택하십시오:

  • 장치를 Shutdown(0x0C 0x00) 상태로 전환하거나,
  • No‑Decode 모드에서 첫 번째 자리수를 0x00(세그먼트 모두 꺼짐)으로 설정하거나, BCD 모드에서는 0x0F로 설정합니다.

레지스터: Digit

각 디지털 레지스터는 개별 세그먼트를 제어하거나(디코딩이 활성화된 경우 BCD 값) 8비트를 보유합니다.

1. 디코드 없음 (원시 세그먼트) 모드

비트는 A‑G 세그먼트와 소수점 DP에 대응합니다:

비트세그먼트
D7DP
D6A
D5B
D4C
D3D
D2E
D1F
D0G

예시 – 숫자 1을 표시하려면 0x30을 기록합니다 (D5=1, D4=1, 즉 세그먼트 BC).

디코드 없음 모드

2. BCD (디코드) 모드

Decode Mode 레지스터의 해당 비트가 설정되면, 드라이버는 하위 니블(0x00x9)을 십진수 숫자로 해석하고 자동으로 올바른 세그먼트를 켭니다.

특수 BCD 코드(0xA0xF):

코드문자
0xA대시 (-)
0xBE
0xCH
0xDL
0xEP
0xF빈칸 (모든 세그먼트 꺼짐) – No‑Decode 모드의 0x00과 동일한 효과

0x040C 0x030B 0x020D 0x010E 순서를 전송하면 “HELP”를 표시할 수 있습니다 (digit 3 → H, digit 2 → E, digit 1 → L, digit 0 → P).

레지스터: 디코드 모드

Decode Mode 레지스터는 마스크이며, 각 비트는 해당 자리수에 대한 BCD 디코딩을 활성화합니다:

비트자리수
D0자리수 0
D1자리수 1
D7자리수 7
  • 0x00 – 모든 자리수에 대해 디코딩이 없음 (raw segment 모드).
  • 0x01 – 자리수 0에만 BCD 디코딩을 활성화.
  • 0x03 – 자리수 0 및 1에 대한 BCD 디코딩을 활성화, 기타 등등.

데이터 로드 (시리얼 쓰기)

데이터는 CLK상승 에지에서 클럭됩니다. 드라이버는 DIN을 샘플링하고 비트를 내부 16‑비트 시프트 레지스터에 (MSB 먼저) 이동시킵니다.

단일 비트 전송 (Arduino‑스타일 의사코드)

digitalWrite(PIN_CLK, LOW);          // prepare for rising edge
if (cmd & 0x8000) {                  // MSB of the 16‑bit word?
    digitalWrite(PIN_DIN, HIGH);
} else {
    digitalWrite(PIN_DIN, LOW);
}
digitalWrite(PIN_CLK, HIGH);         // latch the bit

전체 16‑비트 명령 전송

// Example: enable Display‑Test (register 0x0F, data 0x01)
uint16_t cmd = 0x0F01;               // high byte = address, low byte = data

for (int i = 0; i (reg)

Note: 필요에 따라 성능을 높이려면 매크로로 변환할 수 있습니다.

명령 생성

명령은 매우 쉽게 만들 수 있습니다. 예를 들어, BCD를 사용하여 숫자 6digit 0에 보내려면:

// 0x1 is the register for digit 0
uint16_t cmd = buildCmd(0x1, 6);
// send the command to the module
sendCmd(cmd);

BCD를 사용하지 않을 경우:

// 0x1 is the register for digit 0
// 6 uses segments A, C, D, E, F, G → 0b0101 1111 = 0x5F
uint16_t cmd = buildCmd(0x1, 0x5F);
sendCmd(cmd);

Example

아래 예제는 테스트 모드를 사용한 다음 대부분의 레지스터를 리셋합니다. 모듈만 리셋해도 충분하지만, 모든 것을 리셋하면 설정하기 전에 깨끗한 상태가 됩니다.

// Enable all 8 digits
cmdSetScanLimit(7);

// Set lowest intensity
cmdSetIntensity(0);

// Use BCD decoding for all digits
cmdSetDecodeMode(0xFF);

// Blank all segments
for (uint8_t i = 0; i < 8; i++) {
    uint16_t cmd = buildCmd(REGISTER_DIGIT0 + i, 0xF);
    sendCmd(cmd);
}

// Show all possible BCD values, finishing with a blank
for (uint8_t i = 0; i < 8; i++) {
    for (uint8_t j = 0; j < 16; j++) {
        uint16_t cmd = buildCmd(REGISTER_DIGIT0 + i, j);
        sendCmd(cmd);
        delay(200);
    }
}

Source: https://github.com/danguer/arduino-examples/tree/main/max7219

예제 저장소

https://github.com/danguer/arduino-examples/tree/main/max7219

Source: https://www.analog.com/media/en/technical-documentation/data-sheets/max7219-max7221.pdf

데이터시트

https://www.analog.com/media/en/technical-documentation/data-sheets/max7219-max7221.pdf

Back to Blog

관련 글

더 보기 »

RGB LED 사이드퀘스트 💡

markdown !Jennifer Davis https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex: 내가 만드는 이유

소개 안녕하세요 여러분. 오늘은 제가 누구인지, 무엇을 만들고 있는지, 그리고 그 이유를 공유하고 싶습니다. 초기 경력과 번아웃 저는 개발자로서 17년 동안 경력을 시작했습니다.