본 제품은 시리얼 방식으로 LCD를 제어할 수 있는 “시리얼 캐릭터 LCD 모듈”입니다. 기존의 LCD모듈은 12가닥 정도의 많은 선과 복잡한 제어 방식을 이해해야만 사용할 수 있는 “병렬접속” 방식이었지만, 본 제품은 단 한 선으로 시리얼 방식의 데이터를 송신하여, LCD상에 글자를 표현할 수 있는 방식으로 LCD 모듈에 대한 구체적인 이해 없이도 손쉽게 사용할 수 있도록 만든 제품입니다.
CLCD 모듈의 뒷면에는 콘트롤보드가 부착되어 있습니다. 이 콘트롤 보드가 CUNET(I2C) 신호를 받아서 LCD 모듈을 구동합니다.
CLCD는 CUNET(I2C)통신 이외에도 RS232신호를 받을 수 있도록 되어 있습니다. RS232에는 2종류의 콘넥터가 있는데, 3핀 콘넥터 5V레벨의 RS232신호를 연결하는 콘넥터입니다. PC와 직접 연결하고자 할 때에는 +/- 12V 레벨의 RS232신호를 연결하는 4핀 콘넥터를 사용합니다.
딥스위치로 보레이트 및 I2C 슬레이브 어드레스를 설정할 수 있습니다. DIP스위치 중 4번 스위치는 사용하지 않는 스위치입니다.
I2C와 RS232는 동시에 동작하도록 되어 있으나, 실제로 사용할 때에는 둘 중 하나만 연결해서 사용하시기 바랍니다.
다음은 CLCD의 명령코드 표입니다.
명령 | 전송예 (16진) | 바이트 수 | 수행시간 | 설 명 |
---|---|---|---|---|
ESC ’C’ | 1B 43 | 2 | 15mS | 화면을 클리어 합니다. 이 명령 수행 후 반드시 15mS를 딜레이 해 주어야 합니다. |
ESC ‘S’ | 1B 53 | 2 | 커서표시를 ON합니다.(디폴트) | |
ESC ‘s’ | 1B 73 | 2 | 커서표시를 OFF합니다. | |
ESC ‘B’ | 1B 42 | 2 | 백라이트를 ON합니다. (디폴트) | |
ESC ‘b’ | 1B 62 | 2 | 백라이트를 OFF합니다. | |
ESC ‘H’ | 1B 48 | 2 | LOCATE 0,0위치로 갑니다. | |
ESC ‘L’ | 1B 4C x y | 4 | 100 uS | 커서위치를 변경합니다. |
ESC ‘D’ | 1B 44 code 8byte | 11 | 캐릭터코드 8부터 15까지 8개 영역은 유저가 정의할 수 있는 영역입니다. Code 에 8~15사이의 코드를 하나 선택하시고, 이어서 8 개의 데이터를 보내주십시오. 이 코멘드를 수행한 후에는 LOCATE 0,0 명령을 반드시 수행하여 주십시오. |
|
ESC ‘K’ | 1B 4B X Y X Y data 0 | 문자를 표시합니다. 같은 X, Y 좌표를 두번 보냅니다. 이후 문자코드를 보냅니다. 맨끝에는 0을 보냅니다. |
다음은 CB280모듈에서 CLCD모듈을 CUNET(I2C)으로 접속하여 표시하는 샘플 프로그램입니다. 본 프로그램을 실행시키면 LCD상에 숫자가 증가되는 상황을 볼 수 있습니다.
Const Device = Cb280 Set Display 2,0,0,50 Dim i As Integer Delay 100 ' 최초 딜레이 (CLCD 모듈이 START UP 하는 시간을 기다려줌) Cls Delay 200 ' CLCD 가 클리어 하는데 걸리는 시간을 기다림 Csroff Clcdout 5,2, "Start!!!" Delay 500 Cls Delay 100 Do Incr i Clcdout 0,0, "COMFILE" Clcdout 1,3, "CUBLOC ",Dec i delay 100 Loop
CLCD에는 유저정의 캐릭터를 사용할 수 있습니다. 화살표등과 같은 특수문자를 유저가 임의대로 정의하여 사용하실 수 있습니다. 코드8부터 15까지 총 8개의 캐릭터를 정의하여 사용할 수 있습니다.
Const Device = CB320 Set Display 2,0,0,80 Wait 100 Cls Wait 100 Print 0x1b,"D",8,0k,0,0,0,15,15,0,0,0 '8 번 캐릭터를 정의 Print 0x1b,"D",9,0,0x10,0x18,0x1c,0x1c,0x18,0x10,0 '9 번 캐릭터를 정의 Locate 0,0 ' 정의가 끝나면 반드시 Locate 명령어를 수행해야합니다. Print "abc" Print 8,9 ' 정의한 캐릭터를 표시 Do Loop
정의가 끝난후에는 해당 코드를 보내면, 정의된 캐릭터가 표시됩니다.
위 그림처럼 5 x 8 캐릭터를 정의하실 수 있습니만, 실제로는 5x7 만 사용하실 수 있습니다. 8번째 줄은 커서가 위치해야되므로, 반드시 비워두시기 바랍니다.
다른 MCU, 예를들면 PIC, AVR등에서도 CLCLD를 사용하실 수 있습니다. 다음은 CCS-C (CCS 사의 PIC전용 C 컴파일러)를 사용해서 구동한 예입니다. (디바이스는 PIC16C711, 클록은 4MHz 사용, RS232전송 방법)
#include <16c711.h> #use delay(clock=4000000) // 4MHz 사용 시 #use rs232(baud = 19200, xmit = PIN_B1, rcv=PIN_B0) #byte TRISB = 0x85 #byte PORTB = 5 void main() { char i; TRISB = 1; delay_ms(200); // lcd 모듈이 초기화하는 시간을 기다림 printf(“%c%c’,0x1b,0x43); // cls delay_ms(200); // lcd모듈이 클리어하는 시간을 기다림 while(1) { printf(“%c%c%c%c”,0x1b,0x4c,0,0); // locate 0,0 printf(“COMFILE SERIAL “); printf(“%c%c%c%c”0x1b,0x4c,0,1); // locate 0,1 printf(“LCD MODULE %d “,i); i++; } }
다음은 FA-DUINO (산업용 아두이노)에서 CLCD를 사용한 예입니다.
#define STATE_PIN 13 // RS232 포트 확인용입니다. #define _DIR unsigned char // 자료형 재정의. /* 함수 프로토타입 부분입니다. */ void commandSet(char code); void Cls(void); void Csron(void); void Csroff(void); void Locate(_DIR x, _DIR y); void Clcdout(_DIR x, _DIR y, String data); /* ************************************** */ void setup() { pinMode(STATE_PIN,OUTPUT); // 확인용 led 출력방향설정. digitalWrite(STATE_PIN,LOW); // low로 출력합니다. Serial1.begin(19200); // 통신속도 19200 while(!Serial1); // RS232포트가 해당 속도로 열릴때까지 대기합니다. digitalWrite(STATE_PIN,HIGH); // high 출력을 통해 포트가 열렸음을 알립니다. Cls(); // CLCD를 초기화하고, CLCD에 출력된 모든 내용을 지웁니다. Csroff(); // 커서출력을 비활성합니다. /* 고정문구를 출력합니다. */ Clcdout(1,1,"ComfileTechNology"); Clcdout(1,2,"Value : "); /* ************************ */ } void loop() { // put your main code here, to run repeatedly: static unsigned long tmpd = 0x00; // 임시변수입니다. /* 500ms마다 1씩 증가하는 값을 출력합니다. */ Clcdout(9,2,(String)tmpd++); delay(500); /* ****************************** */ } /* 함수 정의부 */ void commandSet(char code) { Serial1.print((char)0x1b); Serial1.print((char)code); } void Cls() { commandSet(0x43); delay(15); // 15ms 대기해줍니다. } void Csron() { commandSet(0x53); } void Csroff() { commandSet(0x73); } void Locate(_DIR x, _DIR y) { commandSet(0x4c); Serial1.print((char)x); Serial1.print((char)x); Serial1.print((char)y); Serial1.print((char)y); delayMicroseconds(100); // 100uS 대기합니다. } void Clcdout(_DIR x, _DIR y, String data) { commandSet(0x4b); Serial1.print((char)x); Serial1.print((char)y); Serial1.print((char)x); Serial1.print((char)y); Serial1.print(data); Serial1.print((char)0x00); }