본문 바로가기
임베디드 (Embedded)/STM32

[STM32] LCD 커서 이동

by 기딩 2023. 11. 14.
728x90

lcd 설정 방법은 이전 포스팅에 있다.
https://silvow94.tistory.com/39

[STM32] STM32CubeIDE i2C-LCD 사용하기

NUCLEO-F429ZI 보드를 이용하여 lcd를 출력해보자. (board select로 프로젝트 만든 상태) 먼저 i2C 모드를 Disable에서 I2C로 활성화하면 자동으로 핀2개가 설정된다. (나는 Pb8이 더 편해서 옮겼다.) generate code

silvow94.tistory.com

이번에는 각 줄에서 커서 위치를 이동해보자.
 
먼저, lcd는 2행 16열로 구성되어 있다.
lcd의 주소는 다음과 같다.
( lcd 장치의 주소는 제조사마다 다를 수 있는데, 보통은 0X27이나 0X3F이다. )

#define LCD_ADDR (0x27 << 1)



편하게 2진수의 맨 앞의 1은 일단 고려하지 않고 숫자를 말하겠다.
lcd의 첫 번째 줄의 첫 커서로 이동하는 코드 (0~15)

LCD_SendCommand(LCD_ADDR, 0b10000000);

 
lcd의 두 번째 줄의 첫 커서로 이동하는 코드
(64~79)

LCD_SendCommand(LCD_ADDR, 0b11000000);

2진수(0b니까)에서 10으로 시작하면 1번째 줄, 11로 시작하면 2번째 줄이다.
 
그럼 나머지 000000(여섯 자리)가 15칸 즉, 2~16열(다 0이면 위에처럼 1열)을 표현한다.
 
이제부턴 2진수 계산만 할 수 있다면 쉽다.
4번째 열로 이동하고 싶다면 1을 뺀 3을 적으면 된다. 즉, 0b10000011은 1행 4열
0b11001000은 2행 9열 (11로 시작하고, 2진수가 8을 나타냄)
0b10001101은 1행 14열 (10으로 시작하고, 2진수가 13을 나타냄)
 
따라서,
1행은 0b10xxxxxx
2행은 0b11xxxxxx
n열은 0bxx(n-1)을 표현하면 된다!
 
 
커서 위치 이동에 대한 정보가 없어 혼자 파악해 보았는데,
2진수의 첫번째(2의 7승 자리)가 왜 항상 1로 적는지는 아직 모르겠다.

728x90