디스플레이는 가전 제품이든 산업 기계이든 모든 기계의 필수 부분입니다. 디스플레이는 기계를 작동하기위한 제어 옵션을 표시 할뿐만 아니라 해당 기계가 수행 한 작업의 상태 및 출력도 표시합니다. 7- 세그먼트 디스플레이, 16x2 LCD 디스플레이, TFT 터치 스크린 디스플레이, OLED 디스플레이 등과 같은 전자 제품에 사용되는 많은 유형의 디스플레이가 있습니다.
16x2 LCD 디스플레이 는 가장 기본적인 디스플레이 모듈이며 계산기, 디지털 미터 등과 같은 일부 소형 전자 장비에도 사용됩니다. 다른 마이크로 컨트롤러와의 기본 인터페이스를 포함하여 16x2 LCD를 사용하여 많은 프로젝트를 수행했습니다.
- 8051 마이크로 컨트롤러와 LCD 인터페이스
- ATmega32 마이크로 컨트롤러와 LCD 인터페이스
- PIC 마이크로 컨트롤러와 LCD 인터페이스
- Arduino와 16x2 LCD 인터페이스
- Python을 사용하여 Raspberry Pi와 16x2 LCD 인터페이스
이 튜토리얼에서는 16x2 LCD를 Atmega16 AVR 마이크로 컨트롤러 와 인터페이스 하고 간단한 환영 메시지를 표시하는 방법을 살펴 봅니다.
필요한 구성 요소
- Atmega16
- 16x2 LCD 모듈
- 점퍼
- 브레드 보드
회로도
16x2 LCD 디스플레이 용 Atmega16 프로그래밍
프로그래밍에는 외부 라이브러리가 필요하지 않습니다. 여기서 Atmega16은 USBASP 및 Atmel Studio7.0을 사용하여 프로그래밍됩니다. 전체 프로그램 및 작업 비디오 는 프로젝트가 끝날 때 제공되며 Atmega16에 프로그램을 업로드하고 10k POT를 회전하여 LCD의 밝기를 조정하십시오.먼저 CPU 주파수를 정의하고 IO 핀 및 액세스 와 같은 Atmel Studio 패키지와 함께 제공되는 필수 라이브러리를 포함합니다.
프로그램에서 LCD의 RS 및 EN 핀을 정의 합니다. RS 핀은 데이터 및 명령 레지스터를 선택하는 데 사용됩니다. 활성화 핀은 데이터를 래치합니다.
#define en PA3 #define rs PA2
또한 LCD 인터페이스에 사용할 Atmega16의 PORT를 정의합니다. 여기서는 PORTA가 사용됩니다.
#define lcdDirection DDRA #define lcdPort PORTA
다음 단계는 매개 변수를 전달하여 명령을받을 함수를 구성하는 것입니다. 많은 LCD HEX 명령이 있습니다. Hex 명령은 LCD의 기능을 정의하는 데 사용됩니다. LCD 의 4 비트 모드를 사용하고 있기 때문에 바이트 (8 비트)는 2 개의 패킷으로 전송됩니다. 하나의 패킷은 Upper Nibble (4 비트)이고 다른 패킷은 Lower Nibble (4 비트)입니다.
void lcdCommand (unsigned char commands) { lcdPort = (lcdPort & 0x0F)-(commands & 0xF0); lcdPort & = ~ (1 <
다음 단계는 문자를 받아들이고이를 LCD 포트에 래치하는 것 입니다. 수신 된 문자는 니블을 통해 LCD 니블로 전송됩니다. 함수는 매개 변수에 의한 전달을 사용하여 캐릭터 를 취한 다음 상단 및 하단 니블을 취합니다. 'rs'핀은 데이터 레지스터에 대해 하이로 설정되고 데이터를 래치하기 위해 상승 펄스가 전송됩니다. 마찬가지로 활성화 값을 변경하고 활성화를 위해 상승 펄스를 전송하여 아래쪽 니블을 보냅니다.
void lcdChar (unsigned char string) { lcdPort = (lcdPort & 0x0F)-(string & 0xF0); lcdPort-= (1 <
이 함수 는 문자를 문자열로 변환하고 나중에 문자열 쓰기가 필요한 프로그램에서 사용할 수 있습니다.
void lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
이제 화면 을 지우는 함수가 작성 됩니다. HEX로 01 명령을 보낸 다음 커서를 초기 위치로 설정하기 만하면됩니다.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
이제 주 기능에서 LCD가 초기화됩니다. 처음에는 LCD의 PORT 방향을 인터페이스로 설정하십시오. 여기서 PORT는 OUTPUT으로 설정되어 있으므로 FF로 설정합니다.
lcdDirection = 0xFF; _delay_ms (20)
그런 다음 16 진수로 02를 전송하여 LCD를 4 비트 모드로 설정합니다. 또한 16 진수 28을 전송하여 4 비트 모드에서 2 줄, 15x7 매트릭스 픽셀로 설정합니다.
lcdCommand (0x02); lcdCommand (0x28);
명령 0 ℃와 06 커서 위치를 제어하는 데 사용됩니다. 마지막으로 16 진수로 01을 전송하여 화면을 지 웁니다. 그러면 LCD 초기화가 완료됩니다.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
초기화가 완료된 후 문자열을 전송하여 LCD를 테스트하십시오. 여기서 우리는 첫 번째 행 에 문자열 " Interfacing LCD "를 보냅니다.
lcdString ("인터페이싱 LCD");
그런 다음 16 진수로 c0 명령을 전송 하여 커서를 다음 행 으로 이동합니다. 마지막으로이 위치에 "With Atmega1 6" 문자열을 씁니다.
lcdCommand (0xC0); lcdString ("Atmega16 사용");
이것 으로 16x2 LCD와 Atmega16 인터페이스 에 대한 전체 자습서를 마쳤습니다. 이미지 또는 픽셀이 표시되지 않으면 코드 및 회로도에 따라 배선을 확인하거나 LCD의 V0 핀에 부착 된 POT 값을 변경하십시오. 의심이나 제안이 있으시면 포럼에 글을 쓰거나 아래에 의견을 보내주십시오.