MAX7219 예제 (8자리 세그먼트 드라이버)
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 드라이버가 포함되어 있습니다.

핀아웃
| 핀 | 기능 |
|---|---|
| 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).

Register Address Map
| Address (hex) | Register name | Description |
|---|---|---|
| 0x01‑0x08 | Digit 0‑7 | 각 자리의 세그먼트 데이터 |
| 0x09 | Decode Mode | 자리별 BCD 디코딩 활성화/비활성화 |
| 0x0A | Intensity | 밝기 (0x0 … 0xF) |
| 0x0B | Scan‑Limit | 표시되는 자리 수 (0‑7) |
| 0x0C | Shutdown | 정상 동작 (0x01) / 셧다운 (0x00) |
| 0x0F | Display Test | 모든 세그먼트를 최대 밝기로 강제 켜기 |

- 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에 대응합니다:
| 비트 | 세그먼트 |
|---|---|
| D7 | DP |
| D6 | A |
| D5 | B |
| D4 | C |
| D3 | D |
| D2 | E |
| D1 | F |
| D0 | G |
예시 – 숫자 1을 표시하려면 0x30을 기록합니다 (D5=1, D4=1, 즉 세그먼트 B와 C).

2. BCD (디코드) 모드
Decode Mode 레지스터의 해당 비트가 설정되면, 드라이버는 하위 니블(0x0‑0x9)을 십진수 숫자로 해석하고 자동으로 올바른 세그먼트를 켭니다.
특수 BCD 코드(0xA‑0xF):
| 코드 | 문자 |
|---|---|
| 0xA | 대시 (-) |
| 0xB | E |
| 0xC | H |
| 0xD | L |
| 0xE | P |
| 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를 사용하여 숫자 6을 digit 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