ST7565P GLCD 다루기 - MGG19264(3편)
1. MGG19264 초기화
다음은 MGG19264를 초기화하는 함수 G19264입니다. 함수에서 호출하는 기능은 주석을 참조하기 바랍니다.
////////////////////////////////////////////////// // G19264_INIT // PARAM NONE // RETURN NONE // CHANGED AL ////////////////////////////////////////////////// G19264_INIT: LDI AL,ST7565P_LCD_BIAS_9 // 전압 bias를 1/9로 설정 RCALL G19264_WRITE_COMMAND LDI AL,ST7565P_SEGMODE_NORMAL //열의 진행방향을 정방향으로 (0에서 131로) RCALL G19264_WRITE_COMMAND LDI AL,ST7565P_COMMODE_REVERSE //행의 진행 방향을 역방향으로 (64에서 0으로) RCALL G19264_WRITE_COMMAND LDI AL,0x23 //Regulation ratio 4.5로 설정 RCALL G19264_WRITE_COMMAND //Power Set ON (booster, Regulator, Follow Circuit) LDI AL,ST7565P_PWR_CTRL_SET | ST7565P_BOOSTER_ON | ST7565P_REGULATOR_ON | ST7565P_FOLLOW_CIRCUIT_ON RCALL G19264_WRITE_COMMAND LDI AL,ST7565P_SETEV_CMD //EV(Electric volume)을 0x34로 설정 RCALL G19264_WRITE_COMMAND LDI AL,0x34 RCALL G19264_WRITE_COMMAND LDI AL,ST7565P_STARTLINE_CMD //start line을 0으로 RCALL G19264_WRITE_COMMAND LDI AL,ST7565P_DISPLAY_ON //display on RCALL G19264_WRITE_COMMAND RCALL G19264_CLEAR //clear screen RET
전원을 투입하면 GLCD의 내부 메모리에는 임의의 값이 기록되어 있습니다. 가급적 전원이 안정되도록 전원이 투입된 후 40 ~ 50mS 이상 경과한 다음에, 내부 메모리에 0 또는 다른 값을 기록하여 화면을 정리해야 합니다.
다음은 ST7565P 내부 메모리에 0을 써 넣는 함수 G19264_CLEAR입니다.
////////////////////////////////////////////////// // G19264_CLEAR // PARAM NONE // RETURN NONE // CHANGED NONE ////////////////////////////////////////////////// G19264_CLEAR: RCALL G19264_CLEAR_CS2 RJMP G19264_CLEAR_CS1 ////////////////////////////////////////////////// // G19264_CLEAR_CS1 // PARAM NONE // RETURN NONE // CHANGED NONE ////////////////////////////////////////////////// G19264_CLEAR_CS1: PUSH AL LDI AL,0 RJMP G19264_CLEAR_CS ////////////////////////////////////////////////// // G19264_CLEAR_CS2 // PARAM NONE // RETURN NONE // CHANGED NONE ////////////////////////////////////////////////// G19264_CLEAR_CS2: PUSH AL LDI AL,G19264_COLUMNS / ASCII_FONTSIZE_X // RJMP G19264_CLEAR_CS ////////////////////////////////////////////////// // G19264_CLEAR // PARAM NONE // RETURN NONE // CHANGED NONE ////////////////////////////////////////////////// G19264_CLEAR_CS: PUSH AH PUSH BL PUSH BH MOV BH,AL LDI AH,G19264_PAGES - 1 G19264_CLEAR_CS_LOOP: MOV AL,BH RCALL G19264_GOTOXY LDI BL,G19264_COLUMNS LDI AL,0 G19264_CLEAR_CS_LOOP_LOOP: RCALL G19264_WRITE_DATA DEC BL BRNE G19264_CLEAR_CS_LOOP_LOOP DEC AH BRPL G19264_CLEAR_CS_LOOP LDI AH,0 RCALL G19264_GOTOXY POP BH POP BL POP AH POP AL RET
G19264_CLEAR 함수는 G19264_CLEAR_CS2 함수와 G19264_CLEAR_CS1 함수를 호출합니다. 두 함수의 차이는
2. ST7565P용 폰트
이전에 다루었던 GLCD인 LTBE9H372K8K와 TG322431은 데이터 한 바이트를 기록하면 X축 방향으로 8개의 점을 표시합니다. 반면에 앞의 2편 글에서 살짝 언급한 바와 같이 ST7565P는 Y축 방향으로 표시합니다.
LTBE9H372K8K, TG322431의 경우
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
ST7565P의 경우
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
한 바이트를 화면에 출력하는 방식이 다르므로 비트맵 방식의 폰트로된 문자를 출력하는 방식도 달라야 합니다.
1) 8 * 16 크기의 영문자 표시 방법
LTBE9H372의 경우
① 한 바이트 출력
② 다음 행으로 이동
위와 같은 작업을 16회 반복
ST7565의 경우
① 한 바이트 씩 8열 출력
② 다음 page로 이동
③ ①을 시작한 열로 이동
④ 한 바이트씩 8열 출력
2) 16 * 16 크기의 한글 표시 방법
LTBE9H372의 경우
① 두 바이트 출력
② 다음 행으로 이동
위와 같은 작업을 16회 반복
ST7565의 경우
① 한 바이트 씩 16열 출력
② 다음 page로 이동
③ ①을 시작한 열로 이동
④ 한 바이트씩 16열 출력