- DD RAM 어드레스
텍스터형 LCD 모듈의 DD RAM은 표시할 문자들의 ASCII 코드 데이터가 저장되는 내부 메모리이면 모두 80개의 번지가 있는데, 화면의 각 행과 열의 문자 위치에는 고유한 어드레스값이 부여되어 있다.
그런데, 첫번째 행은 DD RAM 어드레스가 00H부터 시작되고 2번째 행은 항상 40H부터 시작되므로, LCD 모듈이 2행 이상으로 구성되는 경우에 각 행과 행 사이에는 어드레스가 연속하여 있지 않게 되어 주의하여야 한다. 또한, 물리적으로 4행으로 되어 있는 LCD 모듈은 어드레스가 1행과 3행이 이어져 있고 2행과 4행이 이어져 있어서 논리적으로는 2행으로 동작한다.
텍스터형 LCD 모듈의 각 모델에 따라 표시 문자의 위치에 대한 DD RAM의 어드레스를 보이면 같다.
LCD 열 번호
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
1행 DD RAM
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
2행 DD RAM
40
41
43
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
- CG ROM
문자 제너레이터 ROM은 8비트 문자 코드로부터 208개의 5X8 도트 혹은 32개의 5X10 도트의 문자 패턴을 발생한다.
사용자 정의 패턴은 마스크 프로그램되어 있는 ROM에 의해서 사용될수 있다.
- CG RAM
문자 제너레이터 RAM은 프로그램에 의해서 원하는 문자 패턴을 만들고자 할때 사용하는 RAM 영역이다.
5X8 도트의 문자 패턴을 만들 경우에는 최대 8종류의 패턴을 만들 수 있고, 5X10 도트의 경우는 4종류의 문자 패턴을 만들 수 있다.
◆ LCD 커넥터 기능
핀
신호명
기능
01
Vss
전원 GND
02
Vdd
전원 +5V
03
Vo
화면 밝기 제어 동작 전압
04
Rs
Regiter Select
L = Instruction Register(IR)
H = Data Register(DR)
05
R/W
Read/Write
L = Data Write(CPU -> LCD)
H = Data Read(CPU <- LCD)
06
E
Enable Signal for Read/Write LCD
H = 모듈의 인에이블 신호
07
DB0
(LSB)
데이터 버스
(4비트 인터페이스 모드에서느 DB7 ~ DB4를 사용)
(MSB)
08
DB1
09
DB2
10
DB3
11
DB4
12
DB5
13
DB6
14
DB7
15
A/EL1
백라이트(+) Anode
16
K/EL2
백라이트(-) Cathode
RS(Register Select)
- IR(Instruction Register) : CPU로부터 써넣기만 할 수 있음.
* LCD 화면 클리어, 커서 시프트, 글자 ON/OFF 등 LCD의 제어 명령 정보만 저장
* 표시 데이터 RAM(DD RAM)과 글자 제너레이터 RAM(CG RAM)의 표시를 위한 어드레스 정보 저장
- DR(Data Register) : DD RAM 혹은 CG RAM에 써넣기 위한 데이터를 저장하거나, DD RAM 혹은 CG RAM으로부터 읽혀진 데이터가 일시적으로 저정되는 레지스터
* CPU로부터 데이터 레지스터(DR)에 써넣은 데이터는 LCD의 내부적인 동작에 의해서 DD RAM 또는 CG RAM에 자동적으로 써넣어진다.
* LCD로부터 데이터를 읽기 위해서 어드레스 정보를 인트스럭션 레지스터(IR)에 써넣으면 DD RAM 또는 CG RAM으로부터 DR에 내부적인 동작에 의해서 자동 저장되고, DR에 저장된 데이터가 CPU로 읽혀지게 되는것이다.
◆ LCD 레지스터
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Clear Display
0
0
0
0
0
0
0
0
0
1
1.52ms
Return Home
0
0
0
0
0
0
0
0
1
-
1.52ms
Entry Mode Set
0
0
0
0
0
0
0
1
I/D
S
37us
Display ON/OFF Control
0
0
0
0
0
0
1
D
C
B
37us
Cursor or Display Shift
0
0
0
0
0
1
S/C
R/L
-
-
37us
Function Set
0
0
0
0
1
DL
N
F
-
-
37us
Set CG RAM Address
0
0
0
1
CG RAM Address
37us
Set DD RAM Address
0
0
1
DD RAM Address
37us
Read Busy Flag and Address
0
1
BF
Address Counter
0us
Data Wite to CG RAM or DD RAM
1
0
Write Data
41us
Data Read From CG RAM or DD RAM
1
1
Read Data
41us
- Clear Display
모든 DD RAM 번지에 공백 문자(20H)를 써서 화면 전체를 지우고, 어드레스 카운터(address counter)를 DD RAM 어드레스 00H로 하여 커서를 home 위치로 한다. 또한 이 명령은 엔트리 모드에서 I/D=1로 강제 설정하는 기능을 포함한다.
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Clear Display
0
0
0
0
0
0
0
0
0
1
1.52ms
- Return Home
LCD에 글자가 표기되는 밑부분에 커서가 존재하는데 DD RAM의 내용은 변경하지 않고 어드레스 카운터를 00H로 하여 이 커서만을 home 위치로 보낸다.
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Return Home
0
0
0
0
0
0
0
0
1
-
1.52ms
- Entry Mode Set
커서의 움직이는 방향을 설정하거나, 글자가 표기된 표시 부분을 시프트할 것인지를 결정하는 것이다. 또한 이들의 동작은 데이터 쓰기/읽기 동안에 수행된다.
I/D = H : Right increment
I/D = L : Left decrement
S = H : Shift enable
S = L : Shift disable
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Entry Mode Set
0
0
0
0
0
0
0
1
I/D
S
37us
- Display ON/OFF Control
현재 DD RAM의 내용이 화면에 표시되도록 ON/OFF 하거나(D), 커서를 ON/OFF하거나(C), 커서를 깜박이게 할 것인지(B)의 여부를 지정한다. 커서가 깜빡이는 시간 간격은 fosc=270kHz에서 약 380ms 정도이다.
D = H : Display ON
D = L : Display OFF
C = H : Cursor ON
C = L : Cursor OFF
B = H : 문자 깜빡임 enable
B = L : 문자 깜빡임 disable
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Display ON/OFF Control
0
0
0
0
0
0
1
D
C
B
37us
- Cursor or Display Shift
화면표시 내용은 변경하지 않는 상태에서 화면 또는 커서를 오른쪽 또는 왼쪽으로 시프트하도록 지정한다.
S/C = H : Display
S/C = L : Cursor
R/L = H : Right shift
R/L = L : Left shift
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Cursor or Display Shift
0
0
0
0
0
1
S/C
R/L
-
-
37us
- Function Set
CPU와의 인터페이스에서 데이터의 길이를 8비트 또는 4비트로 지정하고, 화면표시 행수를 2행 또는 1행으로 지정하며, 문자의 폰트를 5X11 도트(마지막줄은 커서가 나타나는 위치로서 문자 표시는 5X10 도트) 또는 5X8 도트(마지막줄은 커서가 나타나는 위치로서 문자 표시는 5X7 도트)로 지정한다.
DL = H : 8bit(DB7~DB0) 사용
DL = L : 4bit(DB7~DB4) 사용 (*상위 4비트 전송하고 하위 4비트 전송함)
N = H : 2행
N = L : 1행
F = H : 5X10 도트
F = L : 5X8 도트
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Function Set
0
0
0
0
1
DL
N
F
-
-
37us
N
F
디스플레이 라인
글자폰트
Duty Facto
참고
0
0
1
5x8 도트
1/8
0
1
1
5x10 도트
1/11
1
*
2
5x8 도트
1/16
5x10 도트의 글자 폰트는 2라인을 디스플레이가 안됨
참고
CPU와 4비트 방식으로 인터페이스할 경우에는 DB4~DB7을 사용하며, 상위 4비트를 먼저 전송하고 하위 4비트를 나중에 전송해야 한다. 또한, 외형적으로 16문자X1행으로 되어 있는 LCD 모듈은 소프트웨어적으로 8문자X2행의 구조를 가지므로 N=1로 설정해야 하는데 유의하다.
- Set CG RAM Address
CG RAM의 어드레스를 지정한다. 이후에 송수신하는 데이터는 CG RAM의 데이터이다.
CG RAM의 어드레스는 DB5~DB0의 6비트까지 설정 가능하며 이 번지가 설정되고 만들고자 하는 폰트의 데이터를 CG RAM에 입력하면 된다.
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Set CG RAM Address
0
0
0
1
CG RAM Address
37us
- Set DD RAM Address
DD RAM의 어드레스를 지정한다. 이후에 송수신하는 데이터는 DD RAM의 데이터이다.
DD RAM의 어드레스는 DB7~DB0 비트까지 설정 가능하며 이 번지가 설정되면 디스플레이 라인은 설정하는 N의 값에 따라서 번지가 결정된다.
N = H : 0x00~0x27(1행), 0x40~0x67(2행)
N = L : 0x00 ~0x4F
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Set DD RAM Address
0
0
1
DD RAM Address
37us
- Read Busy Flag & Address
LCD 모듈이 내부 동작중임을 나타내는 busy flag(BF) 및 어드레스 카운터의 내용을 리드한다. LCD 모듈이 각 제어 코드를 실행하는데는 지정된 시간이 필요하므로 CPU는 다음 제어 코드를 보내기 전에 충분히 시간지연을 주어 대기하는 방법을 사용 할 수도 있으며, CPU가 이 BF를 읽어서 이것이 1로 표시되어 있는 경우에는 계속 기다리고 0인 경우에는 다음 제어 코드를 보내는 방법을 사용하면 보다 효율적인 처리가 가능하다.
기능
Rs
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
실행시간
Read Busy Flag and Address
0
1
BF
Address Counter
0us
◆ LCD 초기화 순서
1)초기화를 수행하기 전에 최소한 30ms 이상을 기다린다.
2)Function set 명령을 보내고, 4.1ms 이상을 기다린 후에 다시 Function set 명령을 보내며, 100us 이상을 기다린 후에 다시 한번 Function set 명령을 보낸다.
이상의 3회 라이트 동작에서는 비지 체크를 수행하면 안된다.
3)Function set 명령을(0x38) 보낸다.
4)Display ON/OFF control 명령을 보낸다.
5)Entry mode set 명령을 보낸다.
6)DD RAM 어드레스를 보낸다.
7)표시할 문자 데이터를 보내다.
8)필요한 경우 6~7의 과정 반복
참고
텍스트형 LCD 모듈이 리셋되고 나서 내부적인 준비를 마치고 동작을 개시하려면 LCD 모듈에 따라 약 15~30 ms가 소요되므로 전원 투입후나 리셋 후에 최초의 초기화 명령을 보내기 전에는 충분한 시간 지연을 주어야 한다. +3.3V형 LCD 모듈에서는 이 시간이 40~50 ms정도에 달하는 것도 있다. 이렇게 리셋 후에 약간의 대기시간을 필요로 하는 것은 82C55A와 같은 주변 LSI에서도 필요한데, 이러한 현상은 각 소자들이 리셋신호를 인식하는 전압레벨이 다르거나 리셋후의 동작과정이 소자마다 다른데 기인한다. 이 때문에 시스템 부팅시에는 최소한 50ms 정도의 충분한 시간 지연을 주는 것이 바람직하다.
참고
위에서 2)번의 초기화 처리과정은 HD44780U, SED1278, ST7066 등에서만 해당된다. 그러나, 삼성전자의 S6A0069(또는 KS0066) LCD 콘트롤러에서는 이를 개선하였기 때문에 2)번 항목이 필요없으므로 생략한다. 이는 아래에서 설명하는 4비트 인터페이스의 경우에도 동일하게 적용된다.
참고
텍스트형 LCD 모듈에 전원이 인가되었으니 초기화가 올바르게 되지 않은 상태에서는 첫번째행의 모든 문자들이 검은색으로 표시된다.
1)초기화를 수행하기 전에 최소한 30ms 이상을 기다린다.
2)Function set 명령을 보내고, 4.1ms 이상을 기다린 후에 다시 Function set 명령을 보내며, 100us 이상을 기다린 후에 다시 한번 Function set 명령을 보낸다.
이상의 3회 라이트 동작에서는 비지 체크를 수행하면 안된다.
3)Function set 명령을 8비트로 보낸다.
4)Function set 명령을 상위 4비트와 하위 4비트로 나누어 각각 DB7~DB4로 보낸다.
5)Display ON/OFF control 명령을 상위 4비트와 하위 4비트로 나누어 각각 DB7~DB4로 보낸다.
6)Entry mode set 명령을 상위 4비트와 하위 4비트로 나누어 각각 DB7~DB4로 보낸다.
7)DD RAM 어드레스를 상위 4비트와 하위 4비트로 나누어 각각 DB7~DB4로 보낸다.
8)표시할 문자 데이터를 상위 4비트와 하위 4비트로 나누어 각각 DB7~DB4로 보내다.
9)필요한 경우 7~8의 과정 반복
참고
LCD 모듈이 리셋되고 나면 이것은 디폴트(default)로 8비트 인터페이스 모드로 동작하므로 3)에서 라이트한 Function set 명령은 LCD 모듈이 비록 상위 4비트만을 받았더라도 8비트 모드로 처리된 것이다. 따라서, LCD 모듈이 이 명령의 하위 4비트까지 받도록 하려면 4)에서 처럼 처음부터 4비트씩 다시 보내야만 한다. 이후의 모든 명령이나 데이터는 1바이트를 상위 4비트와 하위 4비트로 나누어 2차례에 전송해야 한다.