- 16x2 영숫자 LCD 디스플레이
- MSP430 용 16x2 LCD CCS 라이브러리
- MSP430의 16x2 LCD 디스플레이를위한 LCD 기능
- MSP430과 LCD 인터페이스를위한 회로도
- LCD 디스플레이 용 Code Composer Studio를 사용하여 MSP430 프로그래밍
이 기사는 Code Composer Studio를 사용한 MSP430 프로그래밍에 대한 튜토리얼 시리즈의 연속입니다. 마지막 튜토리얼은 GPIO 핀을 사용 하는 MSP430의 외부 인터럽트를 기반으로했습니다. 이 튜토리얼은 디스플레이를 MSP430과 인터페이스하는 방법 에 관한 것으로, 16 * 2 LCD 디스플레이 를 표시 할 때 전자 애호가를위한 첫 번째 선택입니다. 이전에는 Arduino IDE를 사용하여 MSP430과 LCD를 인터페이스했습니다.이 자습서에서는 Arduino IDE를 사용하는 대신 기본 Code Composer 스튜디오 플랫폼을 사용합니다. 이렇게하면 디자이너로서 더 많은 유연성을 얻을 수 있습니다.
16x2 LCD 디스플레이 및 다른 마이크로 컨트롤러와 함께 사용하는 방법에 대해 자세히 알아 보려면 아래 자습서를 참조하십시오.
- ATmega16과 LCD 인터페이스
- Raspberry Pi와 LCD 인터페이스
- PIC 마이크로 컨트롤러와 LCD 인터페이스
- ARM7-LPC2148과 LCD 인터페이스
- NodeMCU와 LCD 인터페이스
- STM32와 LCD 인터페이스
- MSP430G2와 LCD 인터페이스
- STM8과 LCD 인터페이스
명령과 전달 된 데이터를 저장할 수있는 내장 IC hd44780이 있습니다. LCD 모듈에는 약 16 개의 핀이 있습니다. 8 개는 데이터 핀, 4 개는 백라이트 LED 및 전체 LCD 모듈 용 전원 핀, 3 개는 동작 제어용, 1 개 핀은 콘트라스트 조정용입니다. 이 튜토리얼은 Dennis Eichmann이 만든 라이브러리를 기반으로합니다. 서로 다른 데이터 유형을 인쇄하기 위해 별도의 함수가있는 라이브러리를 사용하는 것은 매우 쉽습니다. 또한 선행, 공백 및 삭제 된 0을 사용하여 데이터를 다른 형식으로 표시하는 조항이 있습니다. 매우 광범위하고 포괄적 인 라이브러리이며 다른 연결로 구성 할 수 있습니다. 여기서 헤더 파일은 데이터 통신을위한 8 핀 병렬 구성을 수용하도록 수정되었습니다.
16x2 영숫자 LCD 디스플레이
일반 16x2 디스플레이에는 전달 된 명령과 데이터를 저장할 수 있는 내장 hd44780 IC (아래 빨간색 원)가 있습니다. LCD 모듈에는 약 16 개의 핀이 있습니다. 8 개는 데이터 핀, 4 개는 백라이트 LED 및 전체 LCD 모듈 용 전원 핀, 3 개는 동작 제어용, 1 개 핀은 콘트라스트 조정용입니다.
이 LCD 모듈은 위에 표시된 다용도이며 다른 세그먼트 LCD에 비해 최소 핀을 사용합니다. 이 모든 것이 정확히 어떻게 작동하는지 알고 싶다면 이미 LCD 작동 방식에 대해 자세히 논의한 16x2 LCD 디스플레이의 작동을 확인해야합니다.
RS 핀: RS = 1 은 LCD의 데이터 레지스터를 활성화하여 LCD의 데이터 레지스터에 값을 쓰는 데 사용됩니다. RS = 0 은 LCD의 명령 레지스터를 활성화합니다.
핀 활성화: 네거티브 에지 트리거; 핀이 HIGH 상태에서 LOW 상태로 변경되면 LCD는 데이터 핀에 쓰기를 요청합니다. 포지티브 에지 트리거; 핀이 LOW 상태에서 HIGH 상태로 변경되면 LCD는 데이터 핀에서 읽도록 프롬프트됩니다.
R / W 핀: R / W = 0 은 RS 핀 선택에 따라 명령 레지스터 또는 데이터 레지스터에 기록합니다. R / W = 1 은 RS 핀의 선택에 따라 IR 또는 DR에서 읽습니다.
RS R / W 작동
0 0 내부 작업으로 IR 쓰기 (디스플레이 지우기 등)
0 1 읽기 사용중 플래그 (DB7) 및 주소 카운터 (DB0 ~ DB6)
1 0 DR은 내부 작업으로 쓰기 (DR에서 DDRAM 또는 CGRAM으로)
1 1 DR을 내부 작업으로 읽음 (DDRAM 또는 CGRAM에서 DR로)
D0-D7 핀: 데이터는이 핀을 통해 명령 및 데이터 레지스터 간에 전송됩니다.
공급 핀: V ss, V dd 핀은 LCD 모듈에 전원을 공급하는 데 사용됩니다. A, K 핀은 LED 백라이트에 전원을 공급합니다. V 0 핀은 대비를 제어하는 데 사용됩니다.
MSP430 용 16x2 LCD CCS 라이브러리
이 튜토리얼은 Dennis Eichmann이 만든 라이브러리를 기반으로합니다. 서로 다른 데이터 유형을 인쇄하기 위해 별도의 함수가있는 라이브러리를 사용하는 것은 매우 쉽습니다. 또한 선행, 공백 및 삭제 된 0을 사용하여 데이터를 다른 형식으로 표시하는 조항이 있습니다. 매우 광범위하고 포괄적 인 라이브러리이며 다른 연결로 구성 할 수 있습니다. 여기서 헤더 파일은 데이터 통신을위한 8 핀 병렬 구성을 수용하도록 수정되었습니다. 라이브러리는 아래 링크에서 다운로드 할 수 있으며, 다운로드 후 아래 단계에 따라 CCS에 라이브러리를 추가합니다.
MSP430 용 16x2 라이브러리 다운로드 – Code Composer Studio
1 단계: 파일 및 프로젝트 생성
기본 CCS 프로젝트는 파일 메뉴를 사용하여 생성됩니다. 프로젝트 만들기 대화 상자에서 장치를 선택하고 프로젝트 이름으로 hd44780을 지정합니다. 프로젝트 유형 및 도구 체인에서 출력 유형을 정적 라이브러리로 선택하고 프로젝트를 만듭니다.
프로젝트 탐색기 레인 (왼쪽)에서 포함 폴더 내에 헤더 파일을 만들고 이름을 hd44780.h 로 지정 합니다. 그런 다음 다운로드 한 hd44780.h 파일 의 내용을 새로 만든 파일 에 복사합니다.
이제 출력 유형을 실행 파일로 변경하여 기본 프로젝트를 만들고 CCS_LCD 라는 프로젝트를 만듭니다.
2 단계: 기본 프로젝트에 대한 검색 경로 포함
hd44780 프로젝트의 속성 대화 상자와 MSP430 컴파일러의 포함 옵션 안에 검색 경로 파일에 포함 폴더를 추가합니다.
그런 다음 이 프로젝트 를 빌드 하여 .lib 파일 과 같은 필요한 링커 파일을 만듭니다. 이것을 빌드 하면 디버그 폴더 안에 hd44780.lib 파일 이 생성됩니다.
3 단계: 링커에 대한 검색 경로 포함
의 속성 대화 상자에서 CCS_LCD의 프로젝트와 MSP430 링커 탭의 파일 검색 경로는 포함 hd44780.lib 내부에있는 디버그 폴더 HD44780 프로젝트를. 디버그 폴더도 파일 검색 경로에 포함됩니다.
포함 폴더는 CCS_LCD 프로젝트 의 MSP430 컴파일러의 포함 옵션에 다시 추가됩니다.
라이브러리가 성공적으로 컴파일되고 주 프로젝트의 링커에 추가됩니다.
MSP430의 16x2 LCD 디스플레이를위한 LCD 기능
void hd44780_timer_isr (void): Timer A의 ISR에서 주기적으로 호출됩니다. Timer A는 화면 지우기, 커서 설정, 데이터 표시와 같은 LCD 기능을 주기적으로 수행하는 데 사용됩니다. 이 기능은 ISR에서 사용됩니다. 아무것도 반환하지 않습니다.
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): 첫 번째 인수에 지정된 문자열을 씁니다.
char * ch__string: 데이터 버퍼에 쓸 문자열 (hd44780_timer_isr 함수 내부). 데이터는 hd44780_timer_isr 이 주기적으로 호출 될 때 LCD IC의 데이터 레지스터 및 명령 레지스터에 복사됩니다.
uint8_t u8__row: 문자열이 쓰여질 행을 정의합니다.
uint8_t u8__column: 문자열이 쓰여질 열을 정의합니다.
uint8_t u8__cr_lf: 1로 설정하면 다음 행으로 넘어갑니다. 0이면 동일한 행에서 인쇄가 중지됩니다.
void hd44780_clear_screen (void): 이 함수는 전체 화면을 지 웁니다. 아무것도 반환하지 않습니다.
uint8_t hd44780_output_unsigned_16bit_value (uint16_t u16__value, uint8_t u8__leading_zero_handling, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): 이 함수는 LCD의 원하는 위치에 부호없는 16 비트 값을 표시합니다.
uint16_t u16__value: 표시 할 정수는 첫 번째 인수에 제공됩니다.
uint8_t u8__leading_zero_handling: 0이 전달되면 정수 값에 선행 0이 표시됩니다. 1이 전달되면 0이 비워집니다. 2가 매개 변수로 전달되면 유효 숫자 만 표시됩니다.
uint8_t u8__row: 정수가 표시되는 행이 선택됩니다.
uint8_t u8__column: 인쇄 할 열은 인수를 사용하여 선택됩니다.
uint8_t u8__cr_lf: 1로 설정하면 다음 행으로 넘어갑니다. 0이면 동일한 행에서 인쇄가 중지됩니다.
MSP430과 LCD 인터페이스를위한 회로도
전체 회로도는 아래 이미지에 나와 있습니다. 보시다시피 하드웨어 연결은 매우 간단하며 5V 어댑터를 사용하여 전체 보드에 전원을 공급했습니다.
연결은 위의 스케치에 따라 이루어집니다. 자세한 연결은 아래 표를 참조하십시오.
대 | 5V 전원 공급 장치의 접지 |
Vdd | 5V |
V0 | 전위차계 출력 |
RS | P2.1 |
R / W | 바닥 |
이자형 | P2.0 |
D0 | P1.0 |
D1 | P1.1 |
D2 | P1.2 |
D3 | P1.3 |
D4 | P1.4 |
D5 | P1.5 |
D6 | P1.6 |
D7 | P1.7 |
ㅏ | 220 Ohm 저항기 |
케이 | 바닥 |
LED 백라이트의 양극은 5V 전원에 직접 연결할 수 없습니다. LCD 모듈을 통한 전류 흐름을 최소화하기 위해 저항에 연결해야합니다. 성능 보드를 사용하여 LCD를 납땜 한 다음 점퍼 와이어를 사용하여 LCD를 MSP430 보드와 연결했습니다. 설정은 아래와 같이 보이지만 간단히 브레드 보드를 사용하여 연결할 수도 있습니다.
LCD 디스플레이 용 Code Composer Studio를 사용하여 MSP430 프로그래밍
이 프로젝트에 사용 된 전체 코드는이 페이지 하단에 있습니다. 코드 사용에 대한 설명은 다음과 같습니다. 먼저 헤더 파일 (hd44780.h)을 열고 파일의 첫 번째 부분에 마이크로 컨트롤러 부품 번호를 포함합니다.
#include "msp430g2553.h"
워치 독 타이머를 먼저 중지해야합니다. DCOCTL 및 BCSCTL1 제어 레지스터는 마이크로 컨트롤러의 발진기를 구성하는 데 사용됩니다. 아래 줄은 MCLK를 1MHZ로 구성합니다 .
WDTCTL = (WDTPW-WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
포트 1 핀은 데이터 핀에 사용되는 출력으로 언급되어야합니다. 핀 0과 핀 1은 RS 및 R / W 핀에 사용될 포트 2의 출력으로도 언급되어야합니다.
P1DIR = 0xFF; P2DIR = (0x01-0x02);
내장 타이머는 주기적으로 값을 표시하는 데 사용됩니다. 타이머 A는 SMCLK (1MHZ)를 클럭 소스로 선택하고 연속 모드는 작동 모드로 선택합니다.
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2-MC_2-TACLR);
비교 채널 1과 2에 대한 인터럽트와 타이머 오버플로 인터럽트는 시작 주소가 다른 동일한 인터럽트 벡터 ( TIMER0_A1_VECTOR )를 공유 합니다. 캡처 비교 채널 1 (CCR1) 은 스위치 케이스에서 사용되는 주소로 2 를 사용합니다.
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (void) { switch (TA0IV) { case 2: { hd44780_timer_isr (); 단절; } } }
코드를 컴파일 한 후에는 MSP430 시작하기 자습서에 설명 된대로 MSP430 보드에 업로드 할 수 있습니다. 모든 것이 예상대로 진행되면 아래와 같이 LCD 디스플레이에 약간의 대비가 표시됩니다.
테스트가 매우 어둡다면 전위차계를 조정하여 더 나은 대비를 얻을 수 있습니다. 프로젝트의 전체 작업은 아래 링크 된 비디오에서도 찾을 수 있습니다. 프로젝트가 즐거웠고 자신 만의 프로젝트를 만드는 것이 흥미 로웠기를 바랍니다. 질문이 있으시면 아래 댓글 섹션에 남겨주세요. 또한 포럼에 모든 기술 질문을 작성하여 답변을 받거나 토론을 시작할 수 있습니다.