마이크로 시스템 1 선 덕 한선 덕 한 lecture7. LCD 구동
마이크로 시스템 2 강의 목표 현재 디스플레이 장치로써 가장 널리 사용되어지는 LCD 을 프로세서 에서 어떻게 제어 하는지 알아본다.
마이크로 시스템 1. 문자 LCD 구성 3 문자 LCD(Liquid Crystal Display) 는 대부분 LCD( 드라이버 ), LCD 를 제어하는 컨트롤러가 하나의 통합된 모듈형식으로 구성됨. 프로세서는 컨트롤러 ( 제어기 ) 와 연결되어 데이터를 주고 받음. Fig1.1 HD44780 LCD Controller 의 내부 구조
마이크로 시스템 제어 레지스터의 종류 Instruction Register(IR) : LCD 모듈의 환경 ( 명령 ) 을 설정하는데 이용되는 레지스터. Data Register(DR): LCD 모듈에 글자를 나타내기 위한 데이터 값이 들어가는 레지스터. 구동 우선 Instruction Register 에 디스플레이를 위한 적절한 명령을 써 넣 고, 디스플레이 할 문자를 Data Register 에 써 넣는다. 1.1 LCD 제어기의 특징 ․ 4 비트, 8 비트의 마이크로컨트롤러와 인터페이스 가능 ․ 5×8 도트, 5×10 도트의 디스플레이 가능 ․ 80 × 8 비트의 디스플레이 RAM(D.D RAM : 최대 80 글자까지 ) ․ 240 문자 폰트를 위한 문자 발생기 ROM(C.G ROM) ․ 64 × 8 비트 문자 발생기 RAM(C.G RAM) ․ +5V 단일 전원사용
마이크로 시스템 2. LCD 모듈의 단자 기능 5 핀 번호기 호기 호레 벨레 벨기 능 1Vss- 0V 2Vdd- +5V 3Vo- LCD 밝기 조정 ( 가변저항 ) 4RSH/L L: 명령 입력 (IR 선택 ), H: 데이터 입력 (DR 선택 ) 5H/L L: 쓰기 (CPU→LCD M), H: 읽기 (CPU→LCD M) 6EH 모듈의 허가 신호 7DB0H/L 4 비트 데이터 버스 이용시 사용 불가 8 비트 데이터 버스 이용시 모두 사용 8DB1H/L 9DB2H/L 10DB3H/L 11DB4H/L 4 비트 데이터 버스 이용시 사용 가능 12DB5H/L 13DB6H/L 14DB7H/L
마이크로 시스템 3. LCD Controller Read/Write 6 Fig3.1 읽기 동작 타이밍도
마이크로 시스템 7 Fig3.2 쓰기 동작 타이밍도
마이크로 시스템 8 동 작 기 능동 작 기 능 00 IR 선택하여 제어 명령 쓰기 ( 디스플레이 클리어 등 ) 01 DB7 로부터 비지 플래그를 읽기 / 어드레스 카운터를 DB0- DB6 으로부터 읽기 10 DR 선택하여 데이터 값을 쓰기 (DR 에서 DD RAM 혹은 CG RAM 으로 ) 11 DR 선택하여 데이터 값을 읽어오기 (DD RAM 혹은 CG RAM 에서 DR 로
마이크로 시스템 9 LCD 명령어 셋
마이크로 시스템 10 ☞ Busy Flag(BF) Busy Flag 는 연속적으로 LCD 모듈에 제어명령이 입력될 때, LCD 모듈이 처리 할 수 있는가를 나타내는 상태 표시 플래그이다. ·BF = 0 : 다음 명령을 써 넣을 수 있다. (RS = 0, = 1 일 때, BF 값은 D7 에 출력된다.) ·BF = 1 : HD44780U 는 내부 동작 모드로서 다음 제어명령이 받아질 수 없다.
마이크로 시스템 11 회로도
마이크로 시스템 12 프로그램 #include static volatile bit 0x90; static volatile bit 0x91; static volatile bit 0x92; #define High 1 #define Low 0 #define DataP P0 // Instruction & Data Signal #define EnablePP1 // Control Signal #define FUNCSET0x38 #define ENTMODE0x06 #define ALLCLR0x01 #define DISPON0x0C #define LINE20xC0 #define CUR_HOME0x02
마이크로 시스템 13 void Delay(unsigned int time) { while(time--); } void Busy(void) { unsigned char buf=0; RS = Low; RW = High; E = High; while(buf & 0x80) { buf = P0; } void init(void) { EnableP = 0x0F; } void Command(unsigned char byte) { Busy(); DataP = byte; E = High; RW = Low; RS = Low; Delay(50); E = Low; } void Data(unsigned char byte) { Busy(); DataP = byte; E = High; RW = Low; RS = High; Delay(50); E = Low; } void LCD_String(char str[]) { char *pStr = 0; pStr = str; while(*pStr)Data(*pStr++); }
마이크로 시스템 14 void LCD_Init(void) { EnableP = 0x0F; Delay(10); Command(FUNCSET); Delay(50); Command(DISPON); Command(ALLCLR); Command(ENTMODE); } void Initialize(void) { LCD_Init(); init(); } void main() { Initialize(); while(1) { Command(CUR_HOME); LCD_String("real Starting"); Command(LINE2); LCD_String("1 "); }
마이크로 시스템 15 LCD 로 표시하는 시계 프로그램을 구현하시오 조건 - 타이머 사용 - 10ms 를 1 초로 간주