-
[AVR] CLCD의 Instruction Table을 통한 헤더파일 작성AVR study 2013. 1. 29. 17:38반응형
이번 포스팅에서는 LCD의 명령을 통해서 비트를 설정하고 원하는 문자열을 출력하기 위한 헤더파일을 작성해 보겠습니다.
♣ LCD의 구조
이전 포스팅에서와 같은 그림입니다.
(1) 레지스터
LCD 모듈은 2개의 8비트 레지스터, Istruction Register(IR)와 Data Register(DR)를 가지고 있다.
▶ Istruction Register (IR) : 명령 레지스터
화면의 지움, 화면 시프트 등 LCD 동작 명령을 내리거나 드라이버 내의 DDRAM, CGRAM 주소를 설정하는데 사용한다.
▶ Data Register (DR) : 데이터 레지스터
화면에 표시할 데이터, 새로운 글꼴에 대한 데이터를 임시로 저장하는 레지스터이다. DR에 데이터를 쓰면 IR로 지정된 주소의 DDRAM또는 CGRAM에 데이터가 전달된다. DR의 데이터를 읽으면 지정된 주소의 DDRAM 또는 CGRAM에 데이터가 CPU에 전달된다.
(2) Busy Flag (BF)
BF는 LCD가 다음 명령을 받을 수 있는지 상태를 나타낸다. BF = 1이면 내부동작 중인 상태로 명령을 받을 수 없다.
(3) Address Counter (AC) : 어드레스 카운터
어드레스 카운터는 DDRAM 어드레스 카운터와 CGRAM 어드레스 카운터가 있다. 각각 데이터 쓰기/읽기를 할 DDRAM과 CGRAM의 주소를 나타낸다. IR 레지스터에 주소를 써넣음과 동시에 해당 어드레스 카운터에 값이 세트된다. 각 RAM에 데이터를 써넣으면 어드레스 카운터는 자동적으로 1 증가한다.
(4) 제어 신호
■ EN : LCD에 입출력을 허용하는 인에이블 신호이다.
■ RS : DR 또는 IR 레지스터를 정해주는 신호이다.
■ RW : 읽기/쓰기를 정해주는 신호이다.
(5) Display Data RAM (DDRAM)
DDRAM은 화면에 표시할 8비트 문자를 저장하는 곳으로 80x8 비트의 용량을 갖는다. 화면에 표시되지 않는 영역의 RAM은 일반적인 메모리로 사용될 수 있다. 다음은 2라인 16문자를 표시할 때 DDRAM의 주소와 화면 위치의 관계를 보여준다. DDRAM의 01번지에 글자 'A' 를 쓰면 화면 0행 1열에 'A'가 나타난다.
화면 0행
화면 1행
(6) Character Geneator ROM (CGROM)
CGROM은 8비트 문자 코드에 따라 5x8 도트 문자 또는 5x10 도트 문자를 형성한다.
표에서 CGRAM (1)~(8)로 표시된 공간은 사용자가 글꼴을 정의해서 사용할 수 있는 부분이다.
(7) Character Generator RAM (CGRAM)
대부분의 LCD는 한글 폰트를 지원하지 않는다. 따라서 한글을 디스플레이하기 위해서는 사용자가 임의로 글꼴을 정의해야 한다.
LCD에는 몇 개의 글꼴을 사용자가 만들 수 있는데 다음 표는 정의한 글꼴을 나타낸다. 문자코드, CGRAM 주소, 5x7 도트 사용자 글꼴의 관계를 나타낸다.
♣ LCD Instruction Table
- 화면 소거 명령어 (Clear Display)
- 커서를 홈으로 옮기는 명령어 (Return Home)
- 엔트리 모드 세트 명령어 (Entry Mode Set)
- 화면 On/Off 제어 명령어 (Display On/Off Control)
- 커서 혹은 화면 이동 명령어 (Cursor or Display Shift)
- 기능 세트 명령어 (Function Set)
- CGRAM 주소 설정
- DDRAM 주소 설정
- 비지 플래그 읽기
- DDRAM 혹은 CGRAM 데이터 쓰기
- DDRAM 혹은 CGRAM 데이터 읽기
(1) Clear Display
전체 화면을 지우고 DDRAM 주소를 0으로 설정한 수 커서를 홈 위치로 옮기며 DDRAM 주소 카운터를 0으로 한다.
RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
0
1
(2) Return Home
커서를 홈 위치로 옮긴다. DDRAM의 주소 카운터를 0으로 하고 디스플레이 시프트 된 것을 본래의 위치로 되돌린다.
RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
1
x
(3) Entry Mode Set
커서의 진행 방향 및 화면의 이동 여부를 결정한다. S가 0이면 Shift되지 않는다. I/D가 1인 경우에 S=1이면 좌로 화면 이동, S=0이면 우로 화면 이동한다.
RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
1
1/D
S
I/D
S
기능
0
0
커서 좌층 이동, 화면 이동 없음
0
1
커서 좌층 이동, 화면 이동
1
0
커서 우측 이동, 화면 이동 없음
1
1
커서 우측 이동, 화면 이동
(4) Display On/Off
화면의 ON/OFF, 커서의 ON/OFF, 커서 위치의 문자의 점멸 여부를 결정한다.
RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
1
D
C
B
D
C
B
기능
0
0
0
화면 OFF
커서 OFF
커서 점멸 OFF
0
0
1
화면 OFF
커서 OFF
커서 점멸 ON
0
1
0
화면 OFF
커서 ON
커서 점멸 OFF
0
1
1
화면 OFF
커서 ON
커서 점멸 ON
1
0
0
화면 ON
커서 OFF
커서 점멸 OFF
1
0
1
화면 ON
커서 OFF
커서 점멸 ON
1
1
0
화면 ON
커서 ON
커서 점멸 OFF
1
1
1
화면 ON
커서 ON
커서 점멸 ON
(5) Cursor Or Display Shift
DDRAM의 내용을 변경하지 않고 화면 혹은 커서를 오른쪽이나 왼쪽으로 이동시킨다.
RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
1
S/C
R/L
X
X
S/C
R/L
기능
0
0
커서 선택
커서 좌측 이동
0
1
커서 선택
커서 우측 이동
1
0
화면 선택
화면 좌측 이동
1
1
화면 선택
화면 우측 이동
(6) Function Set
데이터 버스 인터페이스의 4bit/8bit의 여부, 화면 표시 행수의 1행/2행 여부, 문자 폰트의 5x8 / 5x11의 여부를 결정한다.
RS
RW
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
1
DL
N
F
X
X
DL
N
F
기능
0
0
0
4bit
화면 1행
5 x 8 Font
0
0
1
4bit
화면 1행
5 x 11 Font
0
1
0
4bit
화면 2행
5 x 8 Font
0
1
1
4bit
화면 2행
5 x 11 Font
1
0
0
8bit
화면 1행
5 x 8 Font
1
0
1
8bit
화면 1행
5 x 11 Font
1
1
0
8bit
화면 2행
5 x 8 Font
1
1
1
8bit
화면 2행
5 x 11 Font
♣ 명령어를 통한 헤더파일 작성
#define CMD_CREAR_DISPLAY 0x01 //1. Clear Display
#define CMD_RETURN_HOME 0x02 //2. Return Home
//3. Entry Mode Set
#define CMD_ENTRY_MODE_SET_OPTION1 0x04 // cursor [left], Display shift[none]
#define CMD_ENTRY_MODE_SET_OPTION2 0x05 // cursor [left], Display shift[]
#define CMD_ENTRY_MODE_SET_OPTION3 0x06 // cursor [right], Display shift[none]
#define CMD_ENTRY_MODE_SET_OPTION4 0x07 // cursor [right], Display shift[]
//4. Display On/Off
#define CMD_DISPLAY_OPTION1 0x08 // Display [Off], Cursor [Off], Cursor Blink [Off]
#define CMD_DISPLAY_OPTION2 0x09 // Display [Off], Cursor [Off], Cursor Blink [On]
#define CMD_DISPLAY_OPTION3 0x0A // Display [Off], Cursor [On], Cursor Blink [Off]
#define CMD_DISPLAY_OPTION4 0x0B // Display [Off], Cursor [On], Cursor Blink [On]
#define CMD_DISPLAY_OPTION5 0x0C // Display [On], Cursor [Off], Cursor Blink [Off]
#define CMD_DISPLAY_OPTION6 0x0D // Display [On], Cursor [Off], Cursor Blink [On]
#define CMD_DISPLAY_OPTION7 0x0E // Display [On], Cursor [On], Cursor Blink [Off]
#define CMD_DISPLAY_OPTION8 0x0F // Display [On], Cursor [On], Cursor Blink [On]
//5. Cursor or Display Shift
#define CMD_CURSOR_DISPLAY_SHIFT_OPTION1 0x10 // [Cursor] Select, Cursor Shift [Left]
#define CMD_CURSOR_DISPLAY_SHIFT_OPTION2 0x14 // [Cursor] Select, Cursor Shift [Right]
#define CMD_CURSOR_DISPLAY_SHIFT_OPTION3 0x18 // [Display] Select, Display Shift [Left]
#define CMD_CURSOR_DISPLAY_SHIFT_OPTION4 0x1C // [Display] Select, Display Shift [Right]
//6. Function Set
#define CMD_FUNCTION_SET_OPTION1 0x20 // [4]bit mode, [1] line, [5x8] Font
#define CMD_FUNCTION_SET_OPTION2 0x24 // [4]bit mode, [1] line, [5x11] Font
#define CMD_FUNCTION_SET_OPTION3 0x28 // [4]bit mode, [2] line, [5x8] Font
#define CMD_FUNCTION_SET_OPTION4 0x2C // [4]bit mode, [2] line, [5x11] Font
#define CMD_FUNCTION_SET_OPTION5 0x30 // [8]bit mode, [1] line, [5x8] Font
#define CMD_FUNCTION_SET_OPTION6 0x3C // [8]bit mode, [1] line, [5x11] Font
#define CMD_FUNCTION_SET_OPTION7 0x34 // [8]bit mode, [2] line, [5x8] Font
#define CMD_FUNCTION_SET_OPTION8 0x38 // [8]bit mode, [2] line, [5x11] Font반응형'AVR study' 카테고리의 다른 글
[AVR] 사용자 정의 문자 선언을 통해 간단한 그림 출력 (2) 2013.01.30 [AVR] 간단한 LCD 구동 코드 예제 (0) 2013.01.29 [AVR] CLCD 내부구조 및 핀설명 / WH1602B-YYH-JT# (0) 2013.01.29 LCD란? LCD의 동작원리와 장단점 (1) 2013.01.27 [AVR]타이머/카운터 - LED패턴 변화 (0) 2013.01.26