brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Oct 28. 2020

48. 8X8 도트 매트릭스로 움직이는 전광판 만들기

4 in 1 MAX7219 도트 매트릭스 디스플레이 사용법

4개의 8X8 도트 매트릭스 LCD 모듈로 만들어진 MAX7219 디스플레이 모듈을 이용하여 글자가 흘러가는 전광판을 만들어 보자.

 8X8 도트 매트릭스는 16개의 핀을 가지고 있어서 이를 연결하여 사용하는 것은 쉽지 않은 일이다.


그런데 이러한 도트 매트릭스 모듈 4개를 연결한 7219 모듈은 오히려 5개의 핀만을 연결하여 사용하면 되므로 쉽게 사용할 수 있다.

해당 모듈에 한글을 만들어 디스플레이한 모습은 아래와 같다.


4개의 모듈에 맞추어 4개의 한글을 만들어 넣어본 모습인데 각 글자의 bit 데이터는 아래와 같다.

비트맵을 구성하는 방법은 1602 커스텀 글꼴 제작 때 설명했으므로 생략하도록 하겠다.


byte mat48[4][8] ={

  { 0x00, 0x7e, 0x02, 0x12, 0x12, 0x14, 0x7e, 0x00},  // 고

  { 0x00, 0xf4, 0x94, 0x96, 0x94, 0x94, 0xf4, 0x00},    // 마

  { 0x00, 0x72, 0x8a, 0x72, 0x0e, 0xfa, 0x22, 0x22},   // 워

  { 0x00, 0x38, 0x44, 0x44, 0x38, 0x28, 0xfe, 0x00}    // 요

 };


한글 비트맵 전체를 파일로 넣어두고 필요한 글자만 읽어서 처리하면 좋겠지만, 아두이노 우노는 자료 파일을 적용하기 어렵다. 그래서 필요한 글자만 별도의 변수에 넣어서 사용하게 된다.

나중에 배울 ESP32 모듈과 같은 경우에는 파일 시스템을 사용하는 것이 용이하여 이를 이용한 한글 구현이 좀더 쉬울 수 있다.


모듈의 뒷면을 보면 아래와 같이 추가로 모듈을 연결할 수 있는 핀이 구성되어 있다.

여러 개의 모듈이 없어서 연결해 보지는 못했지만 상하로 배치하여 구성하면 16X16 형태의 비트맵 한글꼴도 구현이 가능할 것으로 보인다.


본 작품을 위한 핀의 연결 방법은 다음과 같다.

VCC     -- 5V
GND  -- GND
DIN  -- D11
CS    -- D10
CLK  -- D13


필요한 라이브러리는 LedControl.h 를 사용하기 위한 라이브러리로 아래의 라이브러리를 설치해 주면 된다.


이 라이브러리를 동작시키려면 설치된 회로에 대해 선언해 주면 된다.


#include "LedControl.h"

LedControl lc=LedControl(11,13,10,4);  // Pins: DIN, CLK, CS, 연결 Display 개수


setup 함수에서는 아래와 같이 4개의 매트릭스 모듈에 각각 3가지 명령을 수행해 주면 된다.

위와 같이 시작, 밝기, 지우기 - 3개의 명령을 각각의 모듈에 선언해 주었다.


loop 함수에서 호출하는 display_DOT 안에 있는 lc.setRow가 글자를 쓰는 작업을 하는 명령이다.

setRow(줄번호, 데이터)의 형태를 갖는다.


나는 이 코드 안에서 글자를 좌측으로 한 칸씩 움직이는 함수를 shift_Left_4 MAT이라는 이름으로 추가하였다.

이 부분은 아래와 같은 구조를 갖는다.

byte 데이터를 좌로 움직이는 명령은 <<이다. 이를 이용하여 글자를 좌로 움직이고 그 첫 비트가 1일 경우 이를 앞에 있는 글자의 같은 자리 제일 마지막으로 옮겨주는 작업을 위의 코드로 진행하였다.


모든 코드를 구성하여 실행하면 아래의 동영상과 같이 동작하게 된다.

여려분들의 상상력을 동원하고, 더 길게 모듈을 연결하거나, 상하로 연결하면 대형 전광판을 만드는 것도 어렵지 않을 것으로 보인다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari