LCD 디스플레이 드라이버(MCP23008, MCP23017)
일반
MCP23008 또는 MCP23017 I/O Expander 모듈을 사용한 LCD 디스플레이를 위한 드라이버입니다. I2C 인터페이스를 사용합니다.

호환모듈
- LCD1602
- LCD1604
- LCD2002
- LCD2004
사양 (MCP23008)
- 8-bit remote bidirectional I/O port
- High-speed I2C interface (MCP23008)
- Hardware address pins
- Configurable interrupt output pin
- Configurable interrupt source
- Polarity Inversion register for input port data polarity config.
I2C 주소
A0, A1, A2 점퍼를 변경하여 I2C 주소를 변경할 수 있습니다. (모듈 제조사마다 다를 수 있음)

A0 | A1 | A2 | I2C주소 |
---|---|---|---|
Low | Low | Low | 0x20 |
Low | Low | High | 0x21 |
Low | High | Low | 0x22 |
Low | High | High | 0x23 |
High | Low | Low | 0x24 |
High | Low | High | 0x25 |
High | High | Low | 0x26 |
High | High | High | 0x27 |
사용 가능한 GPIO
- 라즈베리파이 0~4
- 라즈베리파이 5
- 비글본 블랙/그린
- 젯슨 나노
- FT232H, FT2232H, FT4232H
- MCP2221
명령
[INIT]
초기 설정을 입력합니다.
항목 | 타입 | 설명 |
---|---|---|
칩셋 | WRITE | 칩셋을 선택합니다. (MCP23008,MCP23017) |
열 갯수 * | WRITE | 디스플레이의 열 갯수(Colums)를 입력합니다. |
행 갯수 * | WRITE | 디스플레이의 행 갯수(Rows)를 입력합니다. |
도트 | WRITE | 디스플레이의 도트 크기를 선택합니다. (5×8,5×10) |

[SET_CURSOR]
커서를 지정한 위치로 이동합니다.
항목 | 타입 | 설명 |
---|---|---|
열 | WRITE | 열 (Column) 위치를 입력합니다. (가장 왼쪽이 0) |
행 | WRITE | 행 (Row) 위치를 입력합니다. (가장 위가 0) |
[PRINT]
텍스트를 디스플레이에 표시합니다.
항목 | 타입 | 설명 |
---|---|---|
텍스트 | WRITE | 현재 커서 위치에 표시할 텍스트를 입력합니다. |
[CLEAR]
디스플레이에 표시된 내용을 모두 삭제하고 커서를 HOME(좌측상단)으로 이동합니다.
[HOME]
커서를 HOME(좌측상단)으로 이동합니다.
[DISPLAY_ON]
디스플레이를 켭니다.
[DISPLAY_OFF]
디스플레이를 끕니다.
[CURSOR_ON]
커서를 표시합니다.
[CURSOR_OFF]
커서를 표시하지 않습니다.
[BLINK_ON]
커서를 깜박입니다.
[BLINK_OFF]
커서를 깜박이지 않습니다.
[SCROLL_LEFT]
표시된 텍스트를 왼쪽으로 한칸 이동합니다. 이 명령을 일정한 주기로 실행하면 좌측으로 스크롤되는효과가 나타납니다.
[SCROLL_RIGHT]
표시된 텍스트를 오른쪽으로 한칸 이동합니다. 이 명령을 일정한 주기로 실행하면 우측으로 스크롤되는 효과가 나타납니다.
[LEFT_TO_RIGHT]
텍스트를 현재 커서기준으로 좌측에서 우측방향으로 표시합니다.
[RIGHT_TO_LEFT]
텍스트를 현재 커서기준으로 우측에서 좌측방향으로 표시합니다.
[AUTO_SCROLL_ON]
텍스트가 표시될때마다 텍스트의 길이만큼 좌측으로 자동 스크롤합니다.
[AUTO_SCROLL_OFF]
자동스크롤을 끕니다.
[BACKLIGHT_ON]
백라이트를 켭니다.
[BACKLIGHT_OFF]
백라이트를 끕니다.
[CREATE_CHAR]
사용자 정의 문자를 만들어 디스플레이 내부 저장소(CGRAM)의 0~7의 위치에 로드합니다. 최대 8개의 사용자 정의 문자를 로드할 수 있습니다.
항목 | 타입 | 설명 |
---|---|---|
CGRAM 위치 | WRITE | 사용자 정의 문자를 저장할 CGRAM의 위치를 입력합니다. (0~7) |
사용자 정의 문자 * | WRITE | 사용자 정의 문자를 바이트 배열로 입력합니다. |
사용자정의문자 생성기를 활용하면 쉽게 바이트 배열을 구할 수 있습니다. (Data Type을 Hex로 설정)
[WRITE_CHAR]
사용자 정의 문자를 현재 커서 위치에 표시합니다.
항목 | 타입 | 설명 |
---|---|---|
CGRAM 위치 | WRITE | 현재 커서 위치에 표시할 CGRAM의 위치를 입력합니다. (0~7) |
예제
목표
현재 날짜와 시간을 LCD 디스플레이에 표시합니다.
부품
부품 | 갯수 |
---|---|
라즈베리파이 4 * | 1 |
LCD모듈 | 1 |
연결
LCD모듈 | GPIO |
---|---|
VCC(5V) | 5V |
GND | GND |
DAT (SDA) | 2 (I2C1 SDA) |
CLK (SCL) | 3 (I2C1 SCL) |

프로젝트