LCD 디스플레이 제어.  HD44780 기반 LCD 디스플레이를 Arduino에 연결합니다.  기능 설정 명령 실행

LCD 디스플레이 제어. HD44780 기반 LCD 디스플레이를 Arduino에 연결합니다. 기능 설정 명령 실행

문자 디스플레이가 있는 Arduino 보드와 친구를 사귀는 방법은 무엇입니까? 아주 간단합니다! 모든 것이 순서대로 세부 사항과 함께 아래에 있습니다.

컴퓨터에 연결하여 직렬 포트로 출력하지 않고 아두이노로부터 정보를 받고 싶다면 문자 표시를 사용할 수 있습니다. 그렇게 어렵지 않습니다. 의사소통을 통해 얻는 편리함은 매우 중요합니다.
작업을 위해 HD44780 칩을 기반으로 하는 J204A 문자 LCD 디스플레이를 사용했습니다. 종종 eBay에서 LCD2004로 찾아볼 수 있습니다. 20자 4줄 반전. 개당 60 ~ 100 루블에 불과한 페니로 eBay에서 다른 많은 사람들과 함께 구입했습니다. 러시아어는 기본적으로 지원되지 않지만 이것은 해결할 수 있는 문제이므로 다음에 자세히 설명합니다. 다이어그램의 커넥터는 납땜되지 않았으므로 납땜 인두로 작업해야 합니다.
라이브러리는 디스플레이 작업에 사용됩니다. LiquidCrystal.h기본 Arduino IDE에 포함되어 있습니다.

하지만 LCD2004 디스플레이에 대한 데이터 시트를 찾지 못했지만 인터넷에는 디스플레이에 많은 표가 있습니다. 그러나 그들은 실질적으로 서로 다르지 않습니다. 제어 및 연결은 완전히 동일합니다. 차이점은 디스플레이의 줄/문자 수에만 있습니다. 그러나 이것은 1602가 있는 경우에는 전혀 영향을 미치지 않습니다.

모든 연락처는 테이블에 정의되어 있습니다. 디스플레이를 가져 와서 사용자쪽으로 돌리면 연락처가 테이블에서 각각 왼쪽에서 오른쪽으로 위치하며 숫자가 증가합니다. 연락처 열의 괄호 안에 데이터 시트의 지정이 표시됩니다.

# 콘택트 렌즈 용도 메모
1 VSS(VSS) 접지. 지구. 마이크로컨트롤러 전원 공급 장치를 표시합니다. 0V
2 VDD(VCC) 디스플레이 마이크로컨트롤러의 공급 전압. +5V
3 V0(VEE) 디스플레이의 문자 대비. 전위차계를 통해 연결하는 것이 좋습니다. 0v에서 +5V까지
4 알에스(알에스) 등록 선택.
5 RW(R/W) 읽기/쓰기 모드 전환. 그것을 땅으로 드래그합시다. 디스플레이에 정보를 전송하기만 하면 됩니다. 0 쓰기 +5V 읽기
6 이자형 클럭킹
7 D0 (DB0) 데이터
8 D1 (DB1) 데이터 전송. (사용하지 않음) 데이터
9 D2(DB2) 데이터 전송. (사용하지 않음) 데이터
10 D3(DB3) 데이터 전송. (사용하지 않음) 데이터
11 D4 (DB4) 데이터
12 D5 (DB5) 데이터 전송. (약속 된) 데이터
13 D6 (DB6) 데이터 전송. (약속 된) 데이터
14 D7 (DB7) 데이터 전송. (약속 된) 데이터
15 A(LED+) +5V 전압, 디스플레이 백라이트, 디스플레이 밝기는 전위차계를 통해 조정할 수 있습니다. +5V
16 K(LED-) GND 접지, 디스플레이 백라이트 0V

V

디스플레이로의 데이터 전송은 사이클당 8비트와 4비트의 두 가지 버전으로 가능합니다. 왜냐하면 Arduino에는 접점이 거의 없으며 4개를 사용할 것입니다. 이것은 인식을 넘어서는 속도로 디스플레이의 정보를 업데이트하기에 충분합니다.

이것이 내가 모든 것을 연결하는 방법입니다. 혼란스러워 보일 수 있지만 시스템이 있습니다. 빨간색, 녹색, 노란색 및 주황색 와이어를 선택할 수 있습니다. 빨간색은 항상 +5V, 초록색은 GND, 노란색과 주황색은 아두이노와 데이터를 나르는 연결선입니다.

가장 중요한 부분은 디스플레이의 물리적 연결입니다. 클릭하여 열기 높은 해상도모든 것이 명확하게 보이는 곳.
R1 - 200OM 저항. 디스플레이 백라이트를 통과하는 전류를 제한하는 저항.
R2 - 저항이 최대 10kOM인 전위차계. 펜을 굴리고 문자의 대비를 선택합니다.


그리고 화면에 몇 개의 선을 표시하는 매우 간단한 스케치입니다.

H> // 디스플레이 작업을 위해 라이브러리를 연결합니다. /* LiquidCrystal lcd(rs, enable, d4, d5, d6, d7); LiquidCrystal 유형의 변수를 만들고 Arduino가 디스플레이와 함께 작동하는 접점을 결정합니다. 이 명령에 대한 자세한 내용은 여기 http://arduino.cc/en/Reference/LiquidCrystalConstructor */ LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup() ( lcd.begin(20, 4); // 디스플레이 특성 정의(라인당 20자, 4라인) // 디스플레이 1602의 경우 lcd.begin(16, 2) 지정; lcd.setCursor(1, 1); // 텍스트 출력을 시작할 위치를 지정합니다. 줄과 문자는 0부터 시작합니다!!! // 1은 이미 캐럿을 화면 시작 부분에서 한 칸 이동하고 텍스트를 한 줄 아래로 이동합니다. lcd.print( "compblog.vlukyanov" ); // 지정된 위치부터 텍스트 출력 lcd.setCursor(7, 2); // 화면의 8번째 문자부터 3번째 줄에 출력 lcd.print(".com") ; // 인쇄할 텍스트. ) void loop() ( // 루프에서 다른 작업을 수행하지 마십시오. 모든 작업은 보드 초기화 중에 이미 완료되었습니다. )

결과. 모든 연결 방법과 코드 작성 방법을 알고 있다면 모든 작업 시간은 5분입니다.

또한 디스플레이는 일부 기능을 자체적으로 수행할 수 있으며 일부 매개 변수를 설정할 수도 있습니다.

예를 들어:

  • 스크롤 텍스트;
  • 깜박이는 커서 위치;
  • 켜기/끄기.

그리고 이제 보너스!
디스플레이의 백라이트는 예를 들어 배터리 전원을 절약하려는 에너지를 소비합니다. 이 옵션은 직접 만들었습니다. 버튼을 누르면 디스플레이 백라이트가 5초 동안 켜집니다.

H> // 디스플레이 작업을 위해 라이브러리를 연결합니다. 정수 버튼 정수 = 0; // 호출할 인터럽트 번호. int screenLed = 4; // 화면이 연결된 핀 번호. +5V 휘발성 긴 x = 5000; // LiquidCrystal 시간을 저장하는 변수 lcd(6, 7, 8, 9, 10, 11); void setup() ( attachInterrupt(buttonInt, screenon, FALLING); // 인터럽트 설정 lcd.begin(20, 4); pinMode(screenLed, OUTPUT); digitalWrite(screenLed,HIGH); // 디스플레이 켜기 lcd.setCursor( 0 , 0); lcd.print("Start screenon test!"); ) // 버튼을 클릭했을 때 실행될 함수. void screenon() ( x = millis()+5000; // 백라이트를 끄는 시간을 기억하십시오. 현재 실행 시간 +5초. digitalWrite(screenLed,HIGH); // 디스플레이 백라이트에 전압을 적용하십시오. ) void 루프 () ( lcd.setCursor(0, 2); // 세 번째 줄로 이동 lcd.print(x); // 디스플레이가 꺼지는 시간을 출력 lcd.setCursor(0, 3); // 다음으로 이동 네 번째 줄 lcd.print( millis()); // 현재 실행 시간을 출력 if (x< millis()) // если время работы выключения наступило >( digitalWrite(screenLed,LOW); // 그런 다음 디스플레이를 끕니다 ) )

결과:

HD44780 컨트롤러를 기반으로 하는 LCD 1602 디스플레이는 여전히 모든 종류의 개발을 위한 가장 저렴하고 단순하며 수요가 많은 디스플레이 중 하나입니다. 전자 기기. 말 그대로 무릎에 조립된 간단한 장치와 커피 머신과 같은 더 심각한 산업 장치에서 모두 볼 수 있다는 것은 놀라운 일이 아닙니다. 예를 들어 LCD I2C 모듈 및 LCD 키패드 실드와 같이 가장 인기있는 Arduino 테마 모듈 및 실드가 조립되는 것은 이러한 디스플레이입니다.

이 글은 아두이노에 LCD를 연결하고 정보를 표시하는 방법을 그림과 함께 자세히 설명합니다.

1단계: 아두이노 LCD 1602

1602개의 디스플레이가 있습니다. 두 가지 다른 버전:

검은색 글자가 있는 노란색 백라이트
- 또는 (훨씬 더 자주 발생) 파란색 백라이트와 흰색.

HD44780 컨트롤러의 디스플레이 크기는 매우 다르지만 동일한 방식으로 제어됩니다. 가장 일반적인 크기는 16 x 02(즉, 두 줄에 16자) 또는 20 x 04입니다. 문자 자체의 해상도는 5 x 8픽셀입니다.

대부분의 디스플레이는 키릴 문자를 지원하지 않습니다(CTK 마킹 디스플레이 제외). 그러나 이러한 문제는 부분적으로 해결할 수 있으며 기사에서 해결 방법을 자세히 설명합니다.

디스플레이에는 연결을 위한 16핀 커넥터가 있습니다. 결론은 마킹 후면수수료, 다음과 같습니다.

1(VSS) - 컨트롤러의 마이너스 전원.
2(VDD) - 컨트롤러용 양극 전원 공급 장치.
3(VO) - 대비 제어 설정.
4(RS) – 레지스터 선택.
5(R/W) - 읽기 및 쓰기, 특히 접지에 연결된 경우 쓰기.
6 (E) – 활성화(활성화).
7-10(DB0-DB3) - 8비트 인터페이스의 낮은 비트.
11-14(DB4-DB7) - 인터페이스의 최상위 비트
15 (A) - 백라이트에 전원을 공급하기 위한 양극 양극.
16 (K) - 백라이트에 전원을 공급하는 음극 음극.

2단계: LCD 연결

디스플레이를 연결하고 정보를 전송하기 전에 성능을 확인하는 것이 좋습니다. 먼저 VSS 및 VDD 컨트롤러에 전압을 인가하고 백라이트(A, K)의 전원을 켠 다음 대비를 조정합니다. 이러한 설정에는 10kΩ 전위차계가 적합하며 그 모양은 중요하지 않습니다. +5V와 GND는 극단 다리에 인가되고 중앙의 다리는 VO 출력에 연결된다.

회로에 전원이 공급되면 필요한 대비를 달성해야 하며 잘못 조정하면 화면의 이미지가 보이지 않습니다. 대비를 조정하려면 전위차계로 "재생"해야 합니다. 회로가 올바르게 조립되고 대비가 올바르게 설정되면 화면의 상단 라인이 사각형으로 채워져야 합니다.

디스플레이가 작동하려면 Arduino IDE에 내장된 특수 LiquidCrystal.h 라이브러리가 사용되며 이에 대해서는 아래에서 설명하겠습니다. 8비트 및 4비트 모드에서 작동할 수 있습니다. 첫 번째 변형에서는 하위 및 상위 비트(BB0-DB7)만 사용되고 두 번째 변형에서는 하위 비트(BB4-DB7)만 사용됩니다.

그러나이 디스플레이에서 8 비트 모드를 사용하는 것은 잘못된 결정이며 새로 고침 빈도가 항상 초당 10 회 미만이기 때문에 속도면에서 거의 이점이 없습니다. 텍스트를 표시하려면 DB7, DB6, DB5, DB4, E 및 RS 핀을 컨트롤러 핀에 연결해야 합니다. 모든 Arduino 핀에 연결할 수 있으며 가장 중요한 것은 코드에서 올바른 순서를 설정하는 것입니다.

필요한 문자가 아직 컨트롤러의 메모리에 없으면 수동으로 결정할 수 있습니다(최대 총 7자). 고려 중인 디스플레이의 셀은 5 x 8 도트의 확장을 갖습니다. 심볼을 생성하는 작업은 비트 마스크를 작성하고 점이 타야 하는 곳에 비트 마스크를 배치하고 타지 않아야 하는 곳에 0을 배치하는 것입니다.

Arduino는 최소 6개의 디지털 출력을 사용하기 때문에 위에서 설명한 연결 방식이 항상 좋은 것은 아닙니다.

3단계: 회로도 우회

이 문제를 해결하고 단 두 가지로 해결하는 방법을 살펴보겠습니다. 추가 LCD-IIC/I2C 변환기 모듈이 필요합니다. 디스플레이에 납땜하고 Arduino에 부착하는 방법은 아래 이미지에서 볼 수 있습니다.

그러나이 연결 옵션은 특수 LiquidCrystal_I2C1602V1 라이브러리에서만 작동하지만 웹에서 쉽게 찾고 설치할 수 있으므로 문제없이 사용할 수 있습니다.

4단계: LiquidCrystal.h 라이브러리

LiquidCrystal.h 라이브러리는 공식 리소스에서 다운로드할 수 있습니다. 아래 링크에서도 다운로드할 수 있습니다.

스케치

아카이브를 다운로드했으면 Arduino 설치 디렉터리의 라이브러리 폴더에 있는 LiquidCrystal 폴더를 교체합니다.

에서 예제 스케치를 볼 수 있습니다. 파일 -> 예제 -> LiquidCrystal -> HelloWorld_SPI(파일 -> 예제 -> LiquidCrystal -> HelloWorld_SPI).

이것으로 다음 강의를 마칩니다. 양질의 프로젝트를 기원합니다!

필수적인 부분이란 큰 수전자 기기? 물론 표시 및 그래픽 데이터 출력 수단. 사용자는 "스마트박스"의 결과물을 시각적으로 볼 수 있을 때 항상 더 편리하고 즐겁습니다. 따라서 오늘은 디스플레이를 STM32에 연결하여 텍스트와 숫자를 표시해 보겠습니다. 우리 실험의 주인공은 Winstar의 상당히 인기있는 디스플레이가 될 것입니다. 그건 그렇고, 기술이 기본적으로 모든 디스플레이에 대해 동일하다는 중요한 설명이 주석에 나타났습니다. HD44780.중요한 추가 사항에 대해 JekaKey에게 감사드립니다.)

우선 디스플레이가 실제로 컨트롤러에 연결되어 있어야 합니다. 데이터시트를 다운로드하고 WH1602 핀아웃을 찾으십시오. 이봐:

아시다시피, 디스플레이 WH1602 16개의 핀이 있습니다. 하나하나 개별적으로 살펴보자면...

핀 Vss, Vdd 및 K는 접지 및 전원에 연결해야 합니다.

핀 번호 3은 대비를 조정하는 역할을 합니다. 거기에 +5V를 적용하면 아무것도 볼 수 없으며 핀을 접지에 단락시키면 두 줄의 검은색 사각형에 감탄할 것입니다. 😉 당연히 이것은 우리에게 적합하지 않으므로 우리는 대비를 조정하려면 전위차계(가변 저항이 있는 저항기)를 걸 필요가 있습니다. 이 디스플레이 핀에서 0.5-0.7V의 전압으로 문자를 가장 잘 볼 수 있습니다.

RS 핀은 이미 우리가 마이크로컨트롤러를 사용하여 제어할 출력입니다. 이 핀의 낮은 전압 레벨(0)은 이제 명령이 따를 것임을 의미합니다. 높은 레벨(1) - 이제 디스플레이 메모리에 기록할 데이터가 있음을 의미합니다.

핀 R / W - 여기에서 데이터를 읽거나(예: 디스플레이 사용 중 플래그), 이 경우 이 핀은 1이거나 명령/데이터를 디스플레이에 쓰면 여기에 0이 있습니다.

DB7 - DB0 - 데이터 버스, 그게 전부입니다.)

핀 E는 소위 Enable 신호입니다. 그는 이것을 위해 필요합니다. 디스플레이 작업(데이터 쓰기 또는 명령 제공)을 수행하려면 이 핀에 양의 펄스를 제공해야 합니다. 즉, 절차는 다음과 같습니다.

  1. 핀 RS, R / W, DB7 - DB0 - 우리 팀에 해당하는 필요한 신호.
  2. 출력 E에 하나를 공급합니다.
  3. Zhdems(데이터시트에 따름 - 최소 150ns)
  4. 출력 E에 낮은 수준(0)을 적용합니다.

디스플레이 백라이트에 전원을 공급하려면 A/Vee 다리에 4.2V를 연결해야 합니다.

이것이 WH1602 디스플레이와의 통신이 이루어지는 방식입니다.

우리는 WH1602 연결을 알아냈지만 예제로 이동하기 전에 디스플레이가 일반적으로 이해하는 명령을 고려해 보겠습니다. 이를 위해 데이터시트로 이동하여 흥미로운 테이블을 찾습니다.

각 특정 명령에 해당하는 WH1602 핀에 있어야 하는 모든 명령과 신호를 설명합니다. 예를 들어, 우리는 디스플레이를 지우고 테이블을 보고 싶습니다. 여기에 올바른 명령이 있습니다! 클리어 디스플레이!

RS, R / W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 핀에 0을 공급하고 DB0 다리에 단위를 공급합니다. 다음은 무엇입니까? 맞습니다, 핀 E에 하나를 놓고 잠시 기다렸다가 E를 다시 0으로 낮춥니다. 디스플레이가 지워졌습니다 😉 다음 명령을 실행하기 전에만 일시 중지해야 하며 각 명령에 대한 데이터시트에 표시되어 있습니다. 사용 중 플래그를 폴링하는 것이 더 효율적일 것입니다. 0으로 재설정되자마자 작업을 계속할 수 있습니다. 이 플래그를 읽는 특별한 명령도 있으므로 이것으로 모든 것이 명확합니다) 계속 진행하겠습니다 ...

그리고 사실 이론의 전부입니다. 이미 무언가를 쓰려고 할 수 있습니다. 디스플레이 작업을 더 쉽게 하기 위해 작은 라이브러리를 만들었습니다. 이제 어떻게 사용할 수 있는지 살펴보겠습니다. 시작하려면 다운로드하세요.

MT_WH1602.c 및 MT_WH1602.h라는 2개의 파일을 마음대로 사용할 수 있습니다. 우리는 두 번째 것을 떼어냅니다. 여기서 결론과 사용된 컨트롤러를 선택해야 합니다.

그건 그렇고, 내 디스플레이는 다음과 같이 연결됩니다.

RS-PC2
R/W-PB10
E-PB14
DB7-PD2
DB6-PC12
DB5-PA8
DB4-PA10
DB3-PA15
DB2-PD11
DB1-PA3
DB0-PA5

MT_WH1602.h 파일을 엽니다.

#정의 플랫폼(STM32F10x)

다음으로 디스플레이가 연결된 마이크로컨트롤러 핀을 선택합니다. 먼저 관련된 포트를 설정해 보겠습니다. 여기에서 연결할 때 GPIOA, GPIOB, GPIOC 및 GPIOD를 사용하고 다음과 같이 작성합니다.

마이크로컨트롤러의 다른 다리도 마찬가지입니다.

설정은 끝났습니다. 계속하겠습니다) 기사 시작 부분에 주어진 명령을 호출하기 위해 MT_WH1602.c 파일에는 다음 기능이 포함되어 있습니다 (명령 이름을 따서 이름이 지정되었으므로 여기에서 모든 것이 명확하다고 생각합니다. ):

무효 MT_WH1602_ClearDisplay(무효) ; 무효 MT_WH1602_ReturnHome(무효) ; 무효 MT_WH1602_EntryModeSet(부울 ID 주소, 부울 시프트) ; 무효 MT_WH1602_DisplayOnOff(부울 Dbit, 부울 Cbit, 부울 Bbit) ; 무효 MT_WH1602_CursorOrDisplayShift(부울 SCbit, 부울 RLbit) ; 무효 MT_WH1602_FunctionSet (부울 DLbit, 부울 Nbit, 부울 Fbit) ; 무효 MT_WH1602_SetCGRAMAddress(uint8_t 주소) ; 무효 MT_WH1602_SetDDRAMAddress(uint8_t 주소) ; 부울 MT_WH1602_ReadBusy(무효) ; 무효 MT_WH1602_WriteData(uint8_t 데이터) ;

일부 명령의 경우 함수에 매개변수를 전달해야 합니다. 예를 들면 다음과 같습니다.

무효 MT_WH1602_DisplayOnOff(부울 Dbit, 부울 Cbit, 부울 Bbit) ;

명령 테이블을 살펴보십시오.

Display ON/OFF 명령은 디스플레이를 켜거나 끌 뿐만 아니라 커서 및 커서 깜박임을 활성화/비활성화합니다. 데이터시트에서 이러한 명령 비트는 D, C 및 B로 지정된 다음 매개변수로 함수에 전달합니다. 디스플레이와 커서를 활성화해야 하지만 커서 깜박임은 비활성화해야 하는 경우 다음과 같이 명령을 호출합니다.

MT_WH1602_DisplayOnOff(1, 1, 0);

일반적으로 모든 것이 간단합니다 😉

요컨대, 우리는 새로운 과제, WH1602 디스플레이 작업을 위한 라이브러리를 추가하고 빈 .c 파일을 만들고 코드로 채우기 시작합니다.

// 라이브러리 파일 포함#include "MT_WH1602.h" /*******************************************************************/ 정수 메인(무효) ( // 이것 없이 아무데도 초기화 함수를 호출하지 않습니다 =)() ; // 이제 디스플레이의 초기 구성을 만들어야 합니다. // 문서와 인터넷에서 이렇게 권장합니다 ;) MT_WH1602_FunctionSet(1, 0, 0) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1, 0, 0) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1, 0, 0) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_FunctionSet(1, 1, 1) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_DisplayOnOff(1, 0, 0) ; MT_WH1602_Delay(1000 ) ; MT_WH1602_ClearDisplay() ; MT_WH1602_Delay(2000 ) ; // 여기에서 생각나는 예를 위해 지연의 첫 번째 값을 취했습니다.) // 일반적으로 Display Busy 플래그를 확인해야 합니다. // 이제 사이트 이름과 같은 것을 표시하겠습니다. MT_WH1602_WriteData(0x6D ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69 ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72 ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6F ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x74 ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x65 ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x68 ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6E ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69 ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x2E ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72 ) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Delay(100) ; 동안 (1) ( __NOP() ; ) ) /*******************************************************************/

완료, 확인)


보시다시피 모든 것이 올바르게 작동합니다)

그건 그렇고, 나는 이것 또는 저 문자를 표시하기 위해 디스플레이에 무엇을 쓸 것인지에 대한 질문을 어떻게 든 놓쳤습니다. 데이터 시트의 플레이트는 다음과 같습니다.

따라서 디스플레이 메모리에 쓸 값을 결정하려면 특정 문자에 대해 이 표의 상단과 왼쪽에 기록된 숫자를 가져와야 합니다. 예를 들어 문자 "A"입니다. 이 문자는 열 0100(0x4) 및 행 0001(0x1)에 해당합니다. 문자 "A"를 표시하려면 디스플레이에 값 0x41을 써야 합니다.

이제 모든 것이 될 것 같습니다 =) WH1602 디스플레이의 연결 및 작동을 알아 냈으니 곧 만나요!

추신 라이브러리 작업시 사용 중 플래그 읽기 기능을 테스트하지 않았으므로 갑자기 무언가가 제대로 작동하지 않으면 작성하면 알아낼 것입니다)

이 지침은 Arduino에 연결하고 16x2 및 20x4에서 LCD 화면을 사용하는 방법을 보여줍니다.

이 디스플레이에는 저전력 LED 백라이트가 내장되어 있으며 +5V에서 작동합니다. 이 LCD 디스플레이를 연결하려면 6핀이 필요합니다. Arduino의 모든 핀을 사용할 수 있습니다!

지침은 Adafruit LCD 화면(blue&white 16x2, RGB 16x2 LCD 및 blue&white 20x4, RGB 20x4)을 기반으로 작성되었습니다. 다른 제조업체의 LCD 화면을 사용하는 경우 작동한다는 100% 보장은 없습니다(99%의 경우 작동함).

문자 대 그래픽 LCD - 차이점은 무엇입니까?

수많은 LCD 화면이 있습니다. 이 기사에서는 문자 LCD에 대해 살펴보겠습니다. 이와 같은 화면은 텍스트를 표시하기 위한 훌륭한 옵션입니다. 아이콘 표시를 사용자 정의할 수도 있지만 이러한 아이콘의 크기는 7픽셀(매우 작음!)을 초과해서는 안 됩니다.

아래 사진은 두 줄이 있는 16자 LCD 모니터의 예를 보여줍니다.

자세히 보면 기호가 표시된 작은 사각형이 보입니다. 각 사각형은 별도의 픽셀 그리드입니다. 비교를 위해 그래픽 LCD 화면은 다음과 같습니다.

그래픽 액정 디스플레이에는 하나의 큰 픽셀 그리드가 있습니다. 이 예- 128x64). 텍스트를 표시할 수 있지만 이미지를 표시하는 것이 좋습니다. 그래픽 LCD는 일반적으로 더 크고 연결할 핀이 더 많으며 텍스트 LCD보다 사용하기 다소 어렵습니다.

이 글에서는 텍스트/문자 화면만 다루도록 하겠습니다!

다양한 LCD 화면 모델

문제가 되는 화면 유형을 제한한 후 어떤 화면인지 살펴보겠습니다.


텍스트를 표시하는 데만 사용되지만 다른 모델과 폼 팩터가 있습니다. 왼쪽 상단에는 파란색 배경에 흰색 텍스트가 있는 20x4 LCD가 있고 오른쪽 상단에는 녹색 배경에 검은색 텍스트가 있는 16x4 LCD가 있습니다. 왼쪽 하단은 파란색 배경에 흰색 텍스트가 있는 16x2이고 회색 배경에 검은색 텍스트가 있는 16x1입니다.

좋은 소식은 이 모든 화면을 상호 교환할 수 있다는 것입니다. 그 중 하나를 사용자 정의한 경우 다른 모델로 교체할 수 있습니다. Arduino 스케치를 약간 수정해야 하지만 배선은 동일합니다!


이 부분에서는 연결을 위해 하나의 레일과 16개의 핀이 있는 LCD 화면을 사용합니다(위 사진 참조). 연결을 위한 8핀이 있는 2개의 레일이 있는 LCD도 있습니다(아래 그림 참조).


두 번째 모델을 무납땜 회로 기판에 연결하는 것은 더 어렵습니다.

문자 LCD 화면을 Arduino에 연결

접촉 레일 설치


LCD 화면 외에도 추가 끈이 필요합니다. 먼저 10kΩ 전위차계입니다. 전위차계를 사용하여 디스플레이의 대비를 조정합니다. LCD 화면마다 대비 설정이 다르기 때문에 조정 없이는 할 수 없습니다. 또한 0.1" 핀 레일이 필요합니다.


접점이 있는 레일이 너무 길면 여분의 접점을 간단히 잘라내는 것이 유행입니다!

핀을 LCD에 납땜해야 합니다.

납땜할 때 브레드보드가 손상되지 않도록 각별히 주의하세요! 먼저 첫 번째 접점과 16개의 접점을 "잡아" 나머지를 납땜할 수 있습니다.


전원 및 백라이트

전원 및 조명 연결

설명


흥미로운 내용을 다루기 시작했습니다! LCD를 브레드보드에 장착합니다.


Arduino에서 브레드보드에 전원을 공급합니다. 빨간색 레일에 +5V를 연결하고 파란색 레일에 Gnd를 연결합니다.


그런 다음 LCD 화면의 백라이트를 연결합니다. 핀 16을 gnd에 연결하고 핀 15를 +5V에 연결합니다. 대부분의 LCD 화면에는 백라이트 저항기가 있습니다.

모듈에 저항이 없으면 5V와 핀 15 사이에 하나를 추가해야 합니다. 저항 값을 계산하려면 백라이트에 전원을 공급하기 위한 최대 전류와 데이터시트에서 전압 강하의 대략적인 값을 확인하십시오. 5V에서 전압 강하를 뺀 다음 최대 강도가장 가까운 더 높은 표준 저항 값으로 반올림합니다. 예를 들어 전압 강하가 3.5V이고 전류가 16mA인 경우 저항 값은 (5 - 3.5)/0.016 = 93.75옴 또는 표준 값으로 반올림한 100옴입니다. 데이터 시트를 찾을 수 없으면 220ohm 저항을 사용하십시오. 사실, 이 경우 백라이트가 매우 창백할 수 있습니다.


Arduino를 전원에 연결하십시오. 백라이트가 켜져야 합니다.

그건 그렇고, 일부 저렴한 LCD 화면에는 백라이트가 없습니다!

대비 조정 방식

대비 회로

설명


전위차계를 설치하십시오. 사진에서 핀 1의 오른쪽에 있습니다.


전위차계의 한쪽을 +5V에 연결하고 다른 쪽을 Gnd에 연결합니다. 전위차계의 중간 핀을 LCD의 핀 3에 연결합니다.


이제 우리는 화면의 논리를 연결합니다. 이것은 백라이트와 별도의 회로입니다! 핀 1은 Gnd로 연결되고 핀 2는 +5V로 연결됩니다.


아두이노를 켭니다. LCD 모니터에 백라이트가 있으면 불이 들어와야 합니다. 전위차계 노브를 돌려 첫 번째 줄에 있는 픽셀의 첫 번째 사각형을 확인합니다.

모든 것이 제대로 작동했다면 축하합니다. 이것은 논리, 조명 및 대비가 작동한다는 것을 의미합니다! 제대로 작동하지 않으면 실수가 무엇인지 알아낼 때까지 지침의 다음 단계로 진행하지 마십시오!

최종 연결

D0 ~ D7, RS, EN 및 RW. D0-D7은 디스플레이로 전송된 값을 저장하는 핀입니다. RS 핀은 컨트롤러에 데이터(예: ASCII 문자)를 표시할지 아니면 제어 바이트(예: 커서 위치 변경)인지 알려줍니다. EN 핀은 "활성화"의 줄임말로, 이 핀을 사용하여 데이터를 읽을 준비가 되었을 때 LCD에 알립니다. RW 핀은 방향을 설정하는 데 사용됩니다. 우리는 디스플레이에서 데이터를 표시하거나(보통) 읽습니다(덜 일반적으로 사용됨).

이 모든 핀을 Arduino에 연결할 필요는 없습니다. 예를 들어 화면에 데이터만 표시하는 경우 RW를 사용할 필요가 없으므로 Gnd 핀으로 "끌어당기기"만 하면 됩니다. 또한 8핀이 아닌 4핀을 사용하여 LCD 화면과 통신이 가능합니다. 아마도 8핀은 어떤 경우에 사용됩니까? 아마도 이것은 데이터 전송 속도에 영향을 미칩니다. 즉, 4개가 아닌 8개의 연락처를 사용하면 정보 교환 속도를 2배로 높일 수 있습니다. 에 이 경우, 속도는 중요하지 않으므로 4개의 핀을 사용하여 LCD를 Arduino에 연결합니다.

따라서 RS, EN, D7, D6, D5 및 D4의 6개 핀이 필요합니다.

LCD 화면으로 작업하려면 핀 설정 프로세스를 크게 단순화하는 LiquidCrystal 라이브러리를 사용합니다. 이 라이브러리의 장점 중 하나는 Arduino의 모든 핀을 사용하여 LCD 핀을 연결할 수 있다는 것입니다. 따라서 이 가이드의 끝에서 프로젝트에 중요한 경우 핀을 쉽게 변경할 수 있습니다.

최종 디스플레이 연결

설명


위에서 언급했듯이 RW 핀을 사용하지 않을 것이므로 접지로 당깁니다. 이것은 핀 5입니다.


RS를 연결한 후 - 이것은 핀 # 4입니다. 갈색 와이어를 사용하여 Arduino의 디지털 핀 #7에 연결합니다.


흰색 전선으로 EN 핀 - 핀 # 6을 Arduino의 디지털 핀 디지털 # 8에 연결합니다.


데이터 연락처에 차례가 왔습니다. DB7은 LCD의 핀 #14입니다. Arduino의 12번 핀에 주황색 선을 연결합니다.


DB6(핀 #13 노란색), DB5(핀 #12 녹색) 및 DB4(핀 #11 파란색)의 세 개의 데이터 핀이 남아 있습니다. Arduino의 핀 #11, 10 및 9에 각각 연결됩니다.


연결 결과 왼쪽 사진과 비슷한 결과가 나타납니다.

문자 LCD 사용

스케치를 Arduino에 업로드하여 LCD 화면을 제어할 차례입니다. LiquidCrystal 라이브러리는 기본적으로 Arduino IDE에 설치됩니다. 따라서 예제 중 하나를 다운로드하고 연결하는 데 사용한 핀에 따라 약간만 조정하면 됩니다.

스케치 파일→예제→LiquidCrystal→HelloWorld를 엽니다.

핀에 대한 정보를 업데이트합니다. 다음 줄을 찾습니다.

액정 액정(12, 11, 5, 4, 3, 2);

그리고 다음과 같이 변경하십시오.

이제 스케치를 컴파일하고 Arduino에 업로드할 수 있습니다.


필요한 경우 대비를 조정합니다.


당연히 모든 크기의 LCD 디스플레이를 사용할 수 있습니다. 예를 들어 아래 사진은 LCD 20x4의 작동을 보여줍니다.


또는 녹색 배경에 검은색 텍스트:


녹색 배경에 검은색 텍스트가 있는 화면의 장점 중 하나는 백라이트를 끌 수 있다는 것입니다.


우리는 몇 줄을 사용합니까

LCD가 긴 메시지를 처리하고 여러 줄을 사용하는 방법을 살펴보겠습니다. 예를 들어, 다음 행을 변경하는 경우:

lcd.print("안녕, 세상!");

다음 항목:

lcd.print("안녕하세요! 길고 긴 메시지입니다.");

16x2 LCD는 16번째 문자 이후의 모든 내용을 자릅니다.


그러나 20x4 LCD 디스플레이는 표시되지 않은 문자를 첫 번째 줄에서 세 번째 줄로 옮깁니다(두 번째 줄은 네 번째 줄에서 계속됨). 그다지 편리하지는 않지만이 단계에서는 참아야합니다. 따라서 긴 문자열을 표시할 때 허용되는 길이를 초과하지 않도록 문자 수를 세십시오.


RGB 백라이트가 있는 LCD

이 화면은 일반 화면과 동일하게 작동하지만 백라이트용 LED 3개(빨간색, 녹색, 파란색)가 있어 사용할 수 있습니다. 다른 색상조명.

위의 설명대로 LCD를 연결하고 확인한 후 아두이노의 PWM 아날로그 핀에 LED를 연결하여 색상을 미세 조정합니다. Arduino Uno를 사용하는 경우 3개의 무료 PWM 핀이 남아 있어야 합니다. 빨간색 LED(LCD의 핀 16)를 디지털 3에 연결하고 녹색 LED(핀 17)를 디지털 5에 연결하고 파란색 LED(LCD의 핀 18)를 디지털 6에 연결합니다. LCD 모듈에는 이미 저항이 있으므로 추가로 필요한 것을 연결할 필요가 없습니다.


이제 아래 스케치를 Arduino에 업로드하십시오.

// 스케치에 라이브러리를 포함합니다.

#포함

#포함

#REDLITE 3 정의

# 정의 GREENLITE 5

#블루라이트 6 정의

// 사용하는 연락처 수를 선언합니다.

// 데이터 전송을 위해

액정 LCD(7, 8, 9, 10, 11, 12);

// 밝기는 0 -> 255 범위에서 변경할 수 있습니다.

정수 밝기 = 255;

// LCD의 열과 행 수를 설정합니다.

lcd.begin(16, 2);

// LCD에 메시지를 표시합니다.

lcd.print("RGB 16x2 디스플레이");

lcd.setCursor(0,1);

lcd.print("다색 LCD");

핀모드(REDLITE, OUTPUT);

핀모드(GREENLITE, OUTPUT);

핀모드(블루라이트, 출력);

밝기 = 100;

for (int i = 0; i< 255; i++) {

setBacklight(i, 0, 255-i);

for (int i = 0; i< 255; i++) {

setBacklight(255-i, i, 0);

for (int i = 0; i< 255; i++) {

setBacklight(0, 255-i, i);

무효 setBacklight(uint8_t r, uint8_t g, uint8_t b) (

// 빨간색 LED를 설정합니다. 나머지 LED보다 더 밝습니다!

r = 맵(r, 0, 255, 0, 100);

g = 맵(g, 0, 255, 0, 150);

r = 맵(r, 0, 255, 0, 밝기);

g = 맵(g, 0, 255, 0, 밝기);

b = 맵(b, 0, 255, 0, 밝기);

// 공통 양극이므로 반전!

r = 맵(r, 0, 255, 255, 0);

g = 맵(g, 0, 255, 255, 0);

b = 맵(b, 0, 255, 255, 0);

Serial.print("R = "); Serial.print(r, DEC);

Serial.print(" G = "); Serial.print(g, DEC);

Serial.print(" B = "); Serial.println(b, DEC);

analogWrite(REDLITE, r);

analogWrite(GREENLITE, g);

analogWrite(BLUELITE, b);

이 스케치의 결과는 아래 비디오에 나와 있습니다.

createChar 명령

특수 문자를 사용하고 싶을 것입니다. 예를 들어 온도 센서(열전대)를 사용하여 프로젝트를 설계하는 경우 기호(°)가 유용합니다.

이는 createChar 명령을 사용하여 수행할 수 있습니다. 또한 새로운 기호를 생성하는 더러운 작업을 모두 수행하는 훌륭한 웹 사이트를 찾을 수 있습니다!

의견, 질문 및 공유를 남겨주세요 개인적인 경험아래에. 토론에서 새로운 아이디어와 프로젝트가 종종 탄생합니다!

전자 제품에 대한 열정을 갖고 있는 동안 우연히 여러 제조업체의 LCD를 사용하게 되었습니다. DataVision, WINSTAR, Uniworld Technology Corp.. 그들은 컨트롤러 유형, 핀 수 및 라인 길이가 다르지만 동시에 모두 동일한 연결 체계, 명령 시스템을 가지며 마이크로 컨트롤러의 동일한 프로그램에 의해 서비스되었습니다. 따라서 이제 디스플레이에 대해 이야기하겠지만 윈스타 WH0802A, 다음의 모든 사항은 다른 제조업체의 문자 LCD에 적용됩니다.

따라서 WH0802A-YGH-CT 디스플레이를 마이크로 컨트롤러에 연결합니다.

WH0802A는 KS0066 제어 컨트롤러가 내장된 2줄 8자 문자 디스플레이입니다.
디스플레이 출력의 목적을 분석합니다.

일부 디스플레이에는 두 가지 추가 출력– 백라이트 출력 +LED 및 –LED. 또한 결론이 있다고해서 백라이트도 있다는 의미는 아닙니다. 그 반대도 마찬가지입니다. 내 디스플레이에는 백라이트가 있지만 제어 핀이 없습니다.

기본적으로 WH0802A-YGH-CT 디스플레이의 백라이트는 꺼져 있습니다. 전원을 켜려면 몇 가지 간단한 조작, 즉 두 개의 점퍼를 설치하고 전류 제한 저항을 납땜해야 합니다(각각 사진 RK, JF 및 RA 참조).

디스플레이 연결 다이어그램

그것 전형적인 계획캐릭터 LCD를 켭니다. 디스플레이 백라이트 제어 방식은 사용하지 않겠지 만 만일을 대비하여 그렸습니다.

시작 코드

회로에 전원을 공급한 후 대비 조정기(저항 R1)를 켜야 합니다. 화면에 맨 위 줄이 나타나면 살아 있고 코드 작성을 시작할 때라는 의미입니다. 에 첫 단계우리는 8비트 버스를 사용할 것입니다. 첫 번째 결과를 얻으려면 두 가지 함수, 즉 데이터를 쓰는 함수와 명령을 쓰는 함수를 작성해야 합니다. 한 줄만 다릅니다. 데이터가 기록될 때 RS 신호는 1이어야 하고 명령이 기록될 때 RS는 0이어야 합니다. 아직 읽기 기능을 사용하지 않을 것이므로 R/W 신호는 항상 0입니다.

8비트 버스의 쓰기 주기는 다음과 같습니다.
1. RS 설정(0 - 명령, 1 - 데이터)
2. 데이터 바이트의 값을 DB7…DB0 버스로 출력
3. E=1로 설정
4. 프로그램 지연 1
5. E=0으로 설정
6. 프로그램 지연 2

문자 LCD 컨트롤러는 속도가 무한하지 않으므로 일부 작업 사이에 소프트웨어 지연이 사용됩니다. 첫 번째는 잠시 동안 스트로브 신호를 유지하는 데 필요하고 두 번째는 컨트롤러가 데이터를 쓰거나 명령을 실행할 시간을 갖기 위해 필요합니다. 지연 값은 항상 디스플레이 컨트롤러에 대한 설명에 나와 있으며 항상 최소값 이상을 유지해야 합니다. 그렇지 않으면 컨트롤러 작동 오류가 불가피합니다.

일반적으로 디스플레이 컨트롤러에는 소위 사용 중 플래그(BF)가 있습니다. 플래그가 1이면 컨트롤러가 사용 중이고 0이면 비어 있습니다. 두 번째 소프트웨어 지연 대신 사용 중 플래그를 읽고 디스플레이 컨트롤러가 사용 가능한 시기를 확인할 수 있습니다. 그러나 우리는 첫 번째 결과를 빨리 얻고 싶기 때문에 나중에 바쁜 플래그를 다룰 것입니다.

// 문자 LCD를 AVR에 연결
#포함
#포함

//LCD 데이터 버스가 연결된 포트
#define PORT_DATA 포트D
#define PIN_DATA 핀
#define DDRX_DATA DDRD

//컨트롤 핀이 연결된 포트
#define PORT_SIG PORTB
#define PIN_SIG PINB
#define DDRX_SIG DDRB

// 마이크로 컨트롤러 핀 번호
//LCD 제어 핀이 연결된 위치
#정의 RS 5
#정의 RW 6
#정의 EN 7

// 비트 작업을 위한 매크로
#define ClearBit(reg, 비트) reg &= (~(1<<(bit)))
#define SetBit(reg, 비트) reg |= (1<<(bit))

#define F_CPU 8000000
#define _delay_us(미국) __delay_cycles((F_CPU / 1000000) * (us));
#define _delay_ms(밀리초) __delay_cycles((F_CPU / 1000) * (밀리초));

//명령 입력 함수
무효의 LcdWriteCom( 부호 없는 문자데이터)
{
클리어비트(PORT_SIG, RS); // RS를 0으로 설정
PORT_DATA = 데이터; // 버스로 데이터 출력
SetBit(PORT_SIG, EN); // E를 1로 설정
_delay_us(2);
클리어비트(PORT_SIG, EN); // E를 0으로 설정
_delay_us(40);

//데이터 쓰기 기능

무효의 LcdWriteData( 부호 없는 문자데이터)
{
SetBit(PORT_SIG, RS); //RS를 1로 설정
PORT_DATA = 데이터; // 버스로 데이터 출력
SetBit(PORT_SIG, EN); //E를 1로 설정
_delay_us(2);

클리어비트(PORT_SIG, EN); // E를 0으로 설정

delay_us(40);
}

정수기본( 무효의 )
{
동안 (1);
반품 0;
}

여기에는 복잡한 장소가 없으며 모든 것이 명확해야 합니다. 계속하세요.

모든 LCD는 사용하기 전에 초기화해야 합니다.초기화 프로세스는 일반적으로 디스플레이 컨트롤러의 데이터시트에 설명되어 있습니다. 하지만 거기에 정보가 없더라도 순서는 이러할 것 같습니다.

1. 음식을 대접하다

2. 대기 >40ms

3. Function set 명령을 내립니다.

DL– 버스 폭 설정용 비트
0 - 4비트 버스, 1 - 8비트 버스

N– 디스플레이 라인 수 설정용 비트
0 - 단일 라인 모드, 1 - 2라인 모드

에프- 글꼴 설정 비트
0 - 형식 5*8, 1 - 형식 5*11

* - 이 비트에 무엇이 있든 상관없음

4. 디스플레이 켜기/끄기 명령을 내립니다.

– 디스플레이 활성화/비활성화 비트
0 - 디스플레이 꺼짐, 1 - 디스플레이 켜짐

– 커서 활성화/비활성화 비트
0 - 커서 비활성화, 1 - 커서 활성화

– 깜박임 활성화 비트
0 - 깜박이는 커서 활성화, 1 - 깜박이는 커서 비활성화

5. 디스플레이 지우기 명령을 내립니다.


6. 대기 > 1.5ms

7. 입력 모드 설정 명령을 내립니다.

ID– DDRAM(디스플레이 데이터 RAM)의 주소 증가/감소 순서
0 - 커서가 왼쪽으로 이동, 주소가 1씩 감소, 1 - 커서가 오른쪽으로 이동, 주소가 1씩 증가

– 전체 디스플레이의 시프트 순서
0 - 이동 없음, 1 - I/D 신호에 따라 이동 발생 - 0인 경우 - 표시가 오른쪽으로 이동, 1 - 표시가 왼쪽으로 이동

이 예에서 초기화 함수는 다음과 같습니다.