이전 튜토리얼에서 PIC 마이크로 컨트롤러와 16 * 2 LCD를 인터페이스하는 방법을 배웠습니다. PIC 마이크로 컨트롤러의 초보자 인 경우 더 진행하기 전에 먼저 살펴 보는 것이 좋습니다. 이전에는 PIC 마이크로 컨트롤러의 LED 깜박임 프로그램 및 타이머를 사용하여 PIC의 기본 사항도 배웠습니다. MPLABX 및 XC8 컴파일러를 사용하여 PIC 마이크로 컨트롤러 학습에 대한 모든 자습서를 여기에서 확인할 수 있습니다.
이 튜토리얼에서는 PIC16F877A PIC 마이크로 컨트롤러를 사용하여 자체 사용자 정의 문자 를 만들고 LCD 화면에 표시하여 더 재미있게 만들어 보겠습니다. 또한 HD44780A IC 자체에서 제공하는 미리 정의 된 주로 사용되는 사용자 지정 문자가 있으며,이를 사용하는 방법도 살펴볼 것입니다. 이전 튜토리얼에서 설명했듯이 LCD에는 문자를 표시하는 데 도움이되는 Hitachi HD44780 컨트롤러가 내장되어 있습니다. 우리가 표시하는 각 문자는 이미 HD44780 IC의 ROM 내부에 미리 정의되어 있습니다. LCD에 문자를 표시하기 전에 LCD 컨트롤러 IC HD44780에 대해 배웁니다.
16x2 도트 매트릭스 LCD 컨트롤러 IC HD44780:
커스텀 캐릭터를 표시하기 위해서는 IC에 커스텀 캐릭터가 어떻게 생겼는지 알려 주어야합니다. 이를 위해서는 HD44780 LCD 컨트롤러 IC 내부에 존재 하는 세 가지 유형의 메모리 에 대해 알아야합니다.
문자 생성기 ROM (CGROM): 앞서 말했듯이 내부에 미리 정의 된 문자의 모든 패턴을 포함하는 읽기 전용 메모리입니다. 이 ROM은 각 유형의 인터페이스 IC에 따라 다르며 일부는 미리 정의 된 사용자 지정 문자가있을 수 있습니다.
디스플레이 데이터 RAM (DDRAM): 랜덤 액세스 메모리입니다. 문자를 표시 할 때마다 패턴이 CGROM에서 가져와 DDRAM으로 전송 된 다음 화면에 배치됩니다. 간단히 말해서 DDRAM은 현재 LCD 화면에 표시되는 모든 문자의 패턴을 갖습니다. 이렇게하면 IC가 각주기에 대해 CGROM에서 데이터를 가져올 필요가 없으며 짧은 업데이트 빈도를 얻는 데 도움이됩니다.
문자 생성기 RAM (CGRAM): 이것은 또한 랜덤 액세스 메모리이므로 데이터를 쓰고 읽을 수 있습니다. 이름에서 알 수 있듯이이 메모리는 사용자 지정 캐릭터를 생성하는 데 사용할 수있는 메모리입니다. 캐릭터에 대한 패턴을 형성하고 CGRAM에 써야합니다.이 패턴은 필요할 때 화면에 읽고 표시 할 수 있습니다.
이제 HD44780 인터페이스 IC에 존재하는 메모리 유형에 대한 기본적인 이해를 얻었습니다. 좀 더 이해하기 위해 데이터 시트를 살펴 보겠습니다.
데이터 시트에서 알 수 있듯이 HD44780 IC는 사용자 지정 패턴을 CGRAM에 저장하기 위해 8 개의 위치로 제공되었으며 오른쪽에도 LCD 화면에도 표시 할 수있는 사전 정의 된 문자가 있음을 알 수 있습니다. 우리가 어떻게 할 수 있는지 보자.
16x2 LCD에 사용자 지정 문자 표시:
커스텀 캐릭터를 표시하려면 먼저 패턴을 생성 한 다음 CGRAM에 저장해야합니다. 우리는 이미 라이브러리 기능을 가지고 있기 때문에 몇 가지 간단한 명령으로 쉽게 수행 할 수 있습니다. 여기에 LCD 기능 용 라이브러리가 있지만 여기에는 프로그램 자체의 모든 라이브러리 기능을 복사하여 붙여 넣었으므로 프로그램에이 헤더 파일을 포함 할 필요가 없습니다. 또한 기본 LCD 작동 및 핀 배치에 대한이 문서를 확인하십시오.
첫 번째 단계는 패턴 또는 사용자 지정 문자를 생성하는 것입니다. 우리가 알고 있듯이 각 문자는 5 * 8 점의 조합입니다. 어떤 점 (픽셀)이 높고 낮게 유지되어야하는지 선택해야합니다. 아래와 같이 상자를 그리고 캐릭터에 따라 영역을 음영 처리하면됩니다. 여기 내 캐릭터는 스틱맨입니다. 음영 처리되면 아래와 같이 각 바이트의 동등한 이진 값을 간단히 작성하십시오.
음영 처리 된 영역에 '1'을, 각 바이트에 대해 음영 처리되지 않은 영역에 '0'을 입력하면 맞춤 패턴이 준비됩니다. 마찬가지로 8 개의 메모리 공간에 대해 8 개의 사용자 지정 패턴 코드를 만들었습니다. CGROM. 아래 표에 나열되어 있습니다.
S.NO: |
커스텀 캐릭터 |
패턴 코드 |
1 |
|
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
2 |
|
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
삼 |
|
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
4 |
|
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
5 |
|
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
6 |
|
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
7 |
|
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
8 |
|
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
참고: CGRAM에 제공된 8 개의 공간을 모두로드 할 필요는 없습니다.
프로그래밍 및 작업 설명:
이제 패턴 코드가 준비되었으므로 LCD의 CGRAM에로드하고 PIC 마이크로 컨트롤러를 사용하여 표시하기 만하면됩니다. CGRAM에로드하기 위해 5 * 8 요소 배열을 형성하고 ' for 루프 ' 를 사용하여 각 바이트를로드 할 수 있습니다. 패턴 코드의 배열은 다음과 같습니다.
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // CGRAM 메모리 공간 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000, // 코드 CGRAM 메모리 공간 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // CGRAM 메모리 공간 3 용 코드 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // CGRAM 메모리 용 코드 space 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // CGRAM 메모리 공간 코드 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // CGRAM 메모리 공간 코드 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // CGRAM 메모리 공간 코드 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // CGRAM 메모리 공간 코드 8};
각 메모리 공간은 해당 문자 패턴으로로드됩니다. 이 패턴을 HD44780 IC에로드하려면 HD44780의 데이터 시트를 참조해야하지만 CGRAM의 주소를 설정하는 데 사용할 수있는 명령 줄일뿐입니다.
// *** CGROM에 사용자 지정 문자로드 *** ////// Lcd_Cmd (0x04); // CGRAM 주소 설정 Lcd_Cmd (0x00); //.. CGRAM 주소 설정 (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // 홈으로 돌아 가기 Lcd_Cmd (2); //.. 홈으로 돌아 가기 // *** 사용자 지정 문자로드 완료 *** //////
여기서 ' for 루프' 내부에서 각 바이너리 값은 CGROM에로드됩니다. 패턴이로드되면 아래와 같이 void Lcd_Print_Char (char data) 함수를 사용하여 패턴의 위치를 호출하여 사용자 지정 문자를 표시하도록 만들 수 있습니다.
Lcd_Print_Char (0); // 사용자 지정 문자 표시 0 Lcd_Print_Char (1); // 사용자 지정 문자 1 표시 Lcd_Print_Char (2); // 사용자 지정 문자 2 표시 Lcd_Print_Char (3); // 사용자 지정 문자 3 표시 Lcd_Print_Char (4); // 사용자 지정 문자 4 표시 Lcd_Print_Char (5); // 사용자 지정 문자 5 표시 Lcd_Print_Char (6); // 사용자 지정 문자 표시 6 Lcd_Print_Char (7); // 사용자 지정 문자 7 표시
사전 정의 된 특수 문자 인쇄:
HD44780 IC에는 DDROM에 미리 정의 된 특수 문자가 저장되어 있습니다. 이러한 문자는 데이터 시트의 이진 값을 참조하여 화면에 직접 인쇄 할 수 있습니다.
예: "ALPHA"문자의 이진 값은 0b11100000입니다. 이를 얻는 방법은 아래 그림에서 이해할 수 있으며 마찬가지로 IC에 미리 정의 된 특수 문자에 대한 값을 얻을 수 있습니다.
바이너리 값이 알려지면 아래와 같이 void Lcd_Print_Char (char data) 함수를 사용하여 해당 문자를 화면에 인쇄 할 수 있습니다.
Lcd_Print_Char (0b11100000); // 데이터 시트의 알파 이진 값
이 프로젝트 의 전체 코드 는 아래 코드 섹션에 제공되며, 이 튜토리얼의 끝 부분에 있는 자세한 비디오 설명 도 확인하십시오.
회로 연결 및 테스트:
이 프로젝트에는 추가 하드웨어 요구 사항이 없으며 이전 LCD 인터페이스 자습서에서 동일한 연결을 사용하고 LED 깜박임 자습서에서 만든 것과 동일한 보드를 사용했습니다. 항상 그렇듯이 Proteus를 사용하여 출력을 확인하는 프로그램을 시뮬레이션 해 보겠습니다.
시뮬레이션이 예상대로 실행되면 코드를 하드웨어 설정에 직접 구울 수 있습니다. 프로그램 의 출력은 다음과 같아야합니다.
이것이 MPLABX 및 XC8 컴파일러와 함께 PIC 마이크로 컨트롤러 를 사용하여 16x2 LCD에 사용자 지정 문자를 표시 하는 방법 입니다. 또한 여기에서 전체 PIC 마이크로 컨트롤러 학습 시리즈를 확인하십시오.