- 16x2 LCD 디스플레이 작동
- STM8 마이크로 컨트롤러와 LCD 인터페이스에 대한 회로 다이어그램
- STM8 LCD 라이브러리 – STM8S103F3P6 용 헤더 파일
- STM8S 마이크로 컨트롤러 용 LCD 프로그램
- LCD가있는 STM8 – 작동
16x2 영숫자 LCD 디스플레이는 애호가와 애호가들 사이에서 가장 일반적으로 사용되는 디스플레이입니다. 디스플레이는 사용자에게 기본 정보를 표시하고 싶을 때 매우 유용하며 코드 테스트 또는 디버깅에도 도움이 될 수 있습니다. 이 특정 16x2 LCD 모듈은 쉽게 구할 수 있으며 오랫동안 인기가있었습니다. 링크 된 문서에서 16x2 LCD 모듈의 기본 사항에 대해 자세히 알아볼 수 있습니다.
STM8 마이크로 컨트롤러 튜토리얼 시리즈를 계속 진행하기 위해이 튜토리얼에서는 LCD를 STM8 마이크로 컨트롤러와 인터페이스하는 방법을 배웁니다. 이전에 16x2 LCD를 다른 많은 마이크로 컨트롤러와도 인터페이스했으며, 튜토리얼은 아래에 나열되어 있으며 관심이있는 경우 확인할 수 있습니다.
STM8을 처음 사용하는 경우 STM8 마이크로 컨트롤러 시작하기 문서를 확인하여 컨트롤러 보드 및 프로그래밍 환경의 기본 사항을 이해하십시오. 이 자습서에서는 기본 사항을 다루지 않습니다.
16x2 LCD 디스플레이 작동
이름에서 알 수 있듯이 16x2 LCD에는 16 개의 열과 2 개의 행이 있습니다. 따라서 총 32 개의 문자를이 디스플레이에 표시 할 수 있으며 이러한 문자는 알파벳, 숫자 또는 기호 일 수 있습니다. 이 튜토리얼에서 사용 하는 간단한 16x2 LCD 핀아웃 은 다음과 같습니다.
보시다시피 디스플레이에는 16 개의 핀이 있으며 아래 표와 같이 전원 핀, 대비 핀, 제어 핀, 데이터 핀 및 백라이트 핀의 다섯 가지 범주로 나눌 수 있습니다. 이 튜토리얼의 회로도를 논의 할 때 각 핀의 세부 사항을 살펴 보겠습니다.
범주 | 핀 번호. | 핀 이름 | 함수 |
전원 핀 | 1 | VSS | 접지 핀, 접지에 연결 |
2 | VDD 또는 Vcc | 전압 핀 + 5V | |
대비 핀 | 삼 | V0 또는 VEE | 대비 설정, 가변 저항을 통해 Vcc에 연결됩니다. |
제어 핀 | 4 | RS | 레지스터 선택 핀, RS = 0 명령 모드, RS = 1 데이터 모드 |
5 | RW | 읽기 / 쓰기 핀, RW = 0 쓰기 모드, RW = 1 읽기 모드 | |
6 | 이자형 | 활성화, LCD를 활성화하려면 하이에서 로우 펄스가 필요합니다. | |
데이터 핀 | 7-14 | D0-D7 | 데이터 핀, LCD 또는 명령 지침에 표시 할 데이터를 저장합니다. |
백라이트 핀 | 15 | LED + 또는 A | 백라이트 + 5V에 전원을 공급하려면 |
16 | LED- 또는 K | 백라이트 접지 |
LCD 뒷면에는 아래 이미지와 같이 두 개의 검은 색 점이 있으며 그 안에 HD44780 LCD 드라이버 IC (빨간색 원으로 둘러싸여 있음)가 있습니다. 우리의 마이크로 컨트롤러는이 IC와 통신하여 LCD에 표시되는 내용을 제어해야합니다. 이 모든 것이 정확히 어떻게 작동하는지 알고 싶다면 이미 LCD 작동 방식을 자세히 논의한 16x2 LCD 디스플레이의 작동을 확인해야합니다.
이 튜토리얼에서는 간단한 LCD_print _char 및 LCD_print_string 명령을 사용하여 16x2 LCD 디스플레이에 영숫자 (알파벳 및 숫자)를 표시하는 회로도와 코드에 대해 설명 합니다. 이 명령은 헤더 파일을 포함시킨 후 프로그램에서 직접 사용할 수 있습니다. 헤더 파일은 대부분의 항목을 처리하므로 디스플레이 또는 HD44780 드라이버 IC의 작동 방식을 반드시 알아야하는 것은 아닙니다.
STM8 마이크로 컨트롤러와 LCD 인터페이스에 대한 회로 다이어그램
전체 STM8 LCD 회로 는 아래 이미지에서 찾을 수 있습니다. STM8S103F3P6 컨트롤러와 LCD 의 연결 이 매우 간단 하다는 것을 알 수 있듯이 LCD 디스플레이가 보드에 직접 연결되어 있고 ST-link도 보드를 프로그래밍하기 위해 연결됩니다.
전원 핀 Vss 및 Vcc는 STM8S 보드의 5V 핀에 연결됩니다. LCD의 작동 전압은 5V이고 3.3V에서 작동하도록 연결되어 있습니다. 따라서 STM8S103F3P6 마이크로 컨트롤러는 3.3V에서 작동해야 LCD에 5V 전원을 공급해야하지만 충전 컨트롤러 IC를 사용하여이를 방지 할 수 있지만이 자습서에서는 이에 대해 논의하지 않습니다.
다음으로 LCD의 대비를 설정하는 데 사용되는 대비 핀이 있고이를 전위차계에 연결하여 대비를 제어 할 수 있습니다. 우리는 10k pot을 사용했지만 근처의 다른 값을 사용할 수도 있습니다. pot은 0-5V를 대비 핀에 제공하는 전위 분배기 역할을합니다. 일반적으로 저항을 직접 사용하여 적절한 대비를 위해 약 2.2V를 제공 할 수도 있습니다. 값. 그런 다음 재설정 (RS), 읽기 / 쓰기 (RW) 및 활성화 (E) 핀이 있습니다. 읽기-쓰기 핀은 LCD에서 아무것도 읽지 않으므로 쓰기 작업 만 수행하므로 접지됩니다. 다른 두 개의 제어 핀 Rs 및 E는 각각 PA1 및 PA2 핀에 연결됩니다.
그런 다음 데이터 핀 DB0 ~ DB7이 있습니다. 16x2 LCD는 두 가지 모드로 작동 할 수 있습니다. 하나는 LCD에서 8 개의 데이터 핀 (DB0-DB7)을 모두 사용해야하는 8 비트 작동 모드이고 다른 하나는 4 개만 필요한 4 비트 작동 모드입니다. 데이터 핀 (DB4-DB7). 4 비트 모드는 컨트롤러에서 GPIO 핀이 덜 필요하기 때문에 일반적으로 사용되므로이 자습서에서는 4 비트 모드도 사용했으며 핀 DB4, DB5, DB6 및 DB7 만 핀 PD1, PD2, PD3에 연결했습니다., 및 PD4.
마지막 두 핀 BLA 및 BLK는 내부 백라이트 LED에 전원을 공급하는 데 사용되며 전류 제한 저항으로 560ohm 저항을 사용했습니다. ST-Link 프로그래머는 이전 튜토리얼 에서처럼 항상 연결되어 있습니다. 브레드 보드에서 완전한 연결을했고 설정은 아래 이미지와 같이 보입니다.
STM8 LCD 라이브러리 – STM8S103F3P6 용 헤더 파일
회로도를 진행하기 전에 다음 링크를 사용하여 GitHub에서 STM8 LCD 헤더 파일 을 가져옵니다.
STM8S 16x2 LCD 헤더 파일
전체 리포지토리 를 다운로드하고 stm8s103_LCD_16x2.h 파일을 얻 거나 위 링크에서 코드를 간단하게 얻을 수 있습니다. 프로젝트를 설정하는 동안이 헤더 파일과 함께 inc 디렉토리에 필요한 모든 헤더 파일을 포함해야합니다.
헤더 파일을 추가하고 프로그램을 컴파일하는 방법을 잘 모르겠다면이 페이지 하단의 비디오를 따르십시오. 헤더 파일 내부의 코드가 어떻게 작동하는지 궁금하다면 LCD 튜토리얼을 통해 PIC를 확인할 수 있습니다. 이 프로젝트에서 사용 된 헤더 파일은 여기서 설명한 것과 매우 유사하므로 자세한 내용은 다루지 않겠습니다.
STM8S 마이크로 컨트롤러 용 LCD 프로그램
데모를 위해 "Circuit Digest"와 같은 간단한 문자열을 표시하도록 STM8S 컨트롤러를 프로그래밍 한 다음 두 번째 줄에서 1 초마다 "Test"값을 증가시킵니다. 전체 프로그램은이 페이지 하단에서 찾을 수 있습니다. 설명은 다음과 같습니다.
핀을 정의하고 항상 필요한 헤더 파일을 추가하여 프로그램을 시작합니다. 위에서 논의한 회로도에서 LCD_RS 를 PA1에 연결 했으므로 LCD_RS GPIOA, GPIO_PIN_1 로 정의했습니다 . 마찬가지로 다른 핀에 대해서도 동일한 작업을 수행했습니다. 다른 회로를 따르고있는 경우 그에 따라 이러한 값을 변경해야합니다.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD, GPIO_PIN_3 #define LCD_PIN_4 # "16stm8s.h"# include_stm8.h "
다음으로 메인 프로그램 내에서이 샘플 코드에 필요한 변수를 선언했습니다. 0으로 초기화 된 test_var 라는 테스트 변수 가 있습니다. 변수를 증가시켜 LCD에 표시합니다. d1에서 d4까지의 문자는 LCD가 int 값을 직접 표시 할 수 없기 때문에 테스트 변수의 4 자리를 나타냅니다. 문자로 변환해야합니다.
// 변수 선언 int test_var = 0; char d4, d3, d2, d1;
LCD_Begin () 함수는 LCD를 초기화하는데 사용된다. 이 기능은 필요한 모든 GPIO 핀을 초기화하고 LCD를 16x2 LCD 모드로 설정합니다. 그런 다음 LCD의 모든 값을 지우는 데 사용되는 LCD_Clear () 함수 가 있습니다. 이렇게 하면 LCD의 모든 내용이 지워 지므로 새 값을 쓸 수 있습니다. 그런 다음 LCD_Set_Cursor (x, y) 함수가 있습니다. 여기서 x와 y는 새 문자를 작성해야하는 위치입니다. 예를 들어, (1,1)은 첫 번째 행과 첫 번째 열을 의미하고, 마찬가지로 (2,12)는 두 번째 행 12 열을 의미합니다. 앞서 논의했듯이 여기에는 2 개의 행과 16 개의 열이 있습니다.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
이제 LCD가 설정되고 지워지고 커서가 그 자리에 있습니다. 다음은 화면에 무언가를 인쇄하는 것입니다. 우리는 사용할 수 LCD_Print_String ("샘플 문자열") LCD와에 문자열 인쇄 LCD_Print_Char (A)를 액정에 문자 값을 출력 할 수 있습니다. 여기 프로그램에서는“STM8S103F3P3 LCD”를 인쇄하고 아래 코드를 사용하여 5 초의 지연을 생성했습니다.
Lcd_Print_String ("STM8S103F3P3 LCD"); 지연 _ms (5000);
5 초 지연 후 LCD를 다시 지우고 첫 번째 행에 "Circuit Digest"를 표시하고 두 번째 행에 "Test:"를 표시합니다.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("회로 다이제스트"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("테스트:");
while 루프 내 에서 정수 변수 test_var 의 값 을 개별 문자로 분할하여 간단한 나누기 및 모듈러스 연산자를 사용하여 LCD에 표시 할 수 있습니다. 또한 ASCII 값을 문자로 변환하기 위해 '0'을 추가했습니다.
d4 = test_var % 10 + '0'; d3 = (test_var / 10) % 10 + '0'; d2 = (test_var / 100) % 10 + '0'; d1 = (test_var / 1000) + '0';
그런 다음 6자인 두 번째 행에 "Test:"를 이미 작성 했으므로 커서를 (2,6)으로 설정했습니다. 덮어 쓰면 기존 문자가 LCD에 새 문자로 대체됩니다. 또한 1 초 지연을 추가하고 변수를 증가 시켰습니다.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); 지연 _ms (1000); test_var ++;
LCD가있는 STM8 – 작동
프로그램을 테스트하려면 코드를 컨트롤러에 업로드하고 마이크로 USB 포트로 전원을 켭니다. LCD가 작동하려면 5V가 필요하므로 USB 포트에서 보드에 전원을 공급해야합니다. 이전에는 5V 전원이 필요하지 않았기 때문에 ST-link에서 직접 전원을 공급했습니다.
보시다시피 LCD는 예상대로 작동하며 테스트 변수 값은 대략 1 초마다 증가합니다. 또한 우리는 타이머를 사용하지 않았고 지연 기능 만 사용하여이 지연을 생성 했으므로 지연 기간이 정확할 것으로 기대하지 마십시오. 나중에 다른 자습서에서 해당 목적으로 타이머를 사용할 것입니다.
프로젝트의 전체 작업은 아래 링크 된 비디오에서 찾을 수 있습니다. 튜토리얼을 즐겁게 읽고 유용한 것을 배웠기를 바랍니다. 질문이 있으시면 댓글 섹션에 남겨 주시거나 다른 기술 질문에 대한 포럼을 사용하십시오.