비주얼 베이직 자료/첫번재 프로젝트 일지

신당기 2012. 3. 2. 23:56

이거 뭐 여기저기 기웃거리다 자료를 꾸어 오는 것 같다 쓸쓸하기도 하고 재밌기도 하다....

 

네이버의 "전자공작"이라는 카페에 갔다가 회원작품에서 보게 된 것이다. 일단 링크한다.

꼼꼼이 살펴봐야 하겠다...내용을 일견해보니 아두이노 공식 사이트에 lcd에 대한 강좌가 있는 것으로 보인다. 그리고 lcd에 대한 라이브러리도 있다....

 

다음은 아두이노의 LCD강좌를 변역/편집한 내용이다...나름대로...

 

LiquidCrystal library는  Hitachi HD44780 driver와 호환되는 LCD를 제어할 수 있게 한다.

이 예제는 LCD에 "Hello World!" 를 출력하게 하는 것과 아두이노가 리셋한 후 경과한 시간(초단위)를 표시하는 것이다.

 

 

 2x16 LCD 에 대한 스케치 윤곽

 

LCD는 병렬 인터페이스를 가지고 있다. 이 말은 화면을 조정하기 위해서는 동시에 여러개의 인터페이스 핀을 조작해야 한다는 것이다. LCD의 인터페이스는 다음과 같은 핀으로 구성되어 있다.

 

Register select (RS)핀 : 이 핀은 출력중인 data가 LCD 메모리에서 어디로 가야 할지를 결정한다. 2가지 장소가 있다. data register와 instruction(명령) register가 있다. data register는 화면으로 갈 정보를 담아두는 장소이고 instruction register는 LCD controller가 담에 할 일에 대한 지침,명령을 찾는 장소이다.

 

Read/Write (R/W) pin : 말 그대로 입력인지 출력인지를 결정하는 핀이다.

 

Enable pin : 문자그대로 레지스터에 쓰기가 가능하게 하는 핀이다.

 

8 data pins (D0 -D7) : 쓰기를 할때 레지스터에 입력하고 있는 것은 이 핀들의 상태 즉, HIGH or LOW이다. 읽기를 할때는  이 핀들의 값 즉(high,low) 이다.

 

Display constrast pin (Vo), power supply pins (+5V and Gnd) and LED Backlight (Bklt+ and BKlt-) :

LCD에 대한 전원 입력 핀이고, 대조도를 조절하는 핀 그리고 LED 백라이트를 키고 껴는 핀이다.

 

화면을 조정하는 과정은 화면에 쓰고자 하는 data를 data register에 입력하고 그런 다음 명령 register에 명령을 주는 과정으로 이루어져 있다. 그러나 Library를 이용하면 작업이 쉬워지고 저변에 깔려 있는 명령에 대해서는 몰라도 되게 해준다.

 

Hitachi-compatible LCDs는 두 가지 모드로 동작하는데 4-bit 혹은 8-bit이다. 4-bit 모드는 아두이노의 일곱개의 핀이 필요하고 8-bit 모드의 경우 11개의 핀이 필요하다. 화면에 출력하는 것으로는 4비트 모드로도 다 할 수 있으므로 예제는 4비트 모드이다.

 

회로도는 다음과 같다. 10k-전위차계가 포함되어 있다.

 

 

 

 

스케치에서 library를 초기화할 때 인터페이스핀을 입력하는 양상에 주목하자.

 

아하..........윗줄 출력하고 출력한 값을 그대로 두고 그 아랫줄을 출력하는 방법이 lcd.setCursor( , )를 사용해서 구현하는 구나. 이게 다른 프로젝트일지의 답인 것 같다. lcd를 더 공부해야 한다.

 

먼저, lcd.begin()부터 하자.

이것은 화면의 크기를 지정하는 함수이다. 형식은 lcd.begin(세로칸수, 가로칸수)

다음으로 lcd.setCursor()

이것은 LCD 커서의 위치를 즉 LCD에 출력할 그 다음 내용의 위치를 정하는 것이다.

형식은 lcd.setCursor(세로칸, 가로칸)

여기서 주의해야 할 것은 첫번째 세로칸이 '0'이라는 것과 첫 가로칸 역시 '0'이라는 것이다.

즉 '영'부터 시작한다.

위의 스케치에서 첫 줄에 등장하는 LiquidCrystal()을 보자

이것은 LCD의 타입에 관한 변수를 만드는 것이다. lcd는 4 혹은 8핀으로 조정될 수 있다. 4핀 조정이라면 d0부터 d3까지 생략되며 이 핀들은 연결되지 않는다. 그리고 RW 핀 역시 아두이노와 연결하지 않고 접지와 연결되면 생략 가능하다.

형식은  아래 그림중의 하나이다. 

따라서 생략 가능한 변수는 rw, d0, d1, d2, d3가 되겠다.

예를 들면,

LiguidCrystal lcd(12,11, 10, 5, 4, 3, 2) ;

 

약간 순서가 바뀐 감은 있지만 LiquidCrystal Library에 대해서 알아보자. 이것은 아두이노 보드가 LCD를 제어할 수 있게 해주는 것이다. 다음과 같은 명령어가 있다.

  

 

 

몇몇 기능은 이미 언급하엿다.

home()은 직관적으로 이해하는 것처럼 커서의 위치를 상단좌측에 위치시키게 한다. 형식은 lcd.home()

 

다음으로 write()이다. LCD에 character문자를 쓰라는 명령이다.

형식은 lcd.write(data)

이 명령을 사용하고 나면 쓰여진 바이트의 수가 되돌려 진다. 물론 이 수를 읽는 것은 선택사항이다.

예문은 다음과 같다.

 

 

이제 print()이다. 이것은 LCD에 text를 프린트하라는 명령이다.

형식은 lcd.print(data)

   또는 lcd.print(data. BASE)

data는 char, byte, int, long, string이 될 수 있다.

여기서 잠깐 정리하고 넘어가자....사실 write(), print()의 차이가 뭘까? write는 character를 쓰라는 명령이라고 했으니 print()가 훨씬 큰 개념인가?

그리고 print()의 data 종류를 잠깐 정리하자.

먼저 char이다. 이것은 1 바이트의 메모리를 차지하는 data 종류인데 character(문자)값을 저장한다. 하나의 문자는 ' '을 사용하여 ---'A'---표시되며 여러문자 즉 문자열은 "  "을 사용하여 표현된다.---"ABC"

문자는 사실 숫자로 저장된다. 그것은 ASCII 코드 값이다. 따라서 문자에 셈을 할 수 있다는 말이다. 예를 들면 'A' + 1 은 66이다. 왜냐면 A의 아스키값이 65이기 때문이다.

그리고 char는 부호를 가진다. 따라서 -128부터 127까지 표시된다. 부호가 없는 1 바이트 data 종류는 byte라고 한다.

다음으로 display()이다. 이것은 LCD 전원이 들어오게 한다. 물론 전원 off는 noDisplay()에 의해서 된다. display()하면 꺼기 직전의 text와 커서가 표시된다.

 

마지막으로 createChar()이다. 설명을 보긴 했는데 이해되지 않는다. 예문이 있지만 실행된 화면을 보질 못해서다. 담에 도전하기로 한다.

 

 

이대로 했는데 백라이트만 나오는 건 LCD문제일 수 있는거죠??
어떡하죠.....저는 잘 모르는데....사실 아두이노 공부를 시작하다가 프로젝트의 성격이 한순간에 바뀌는 바람에 비주얼베이직 프로그램 공부를 주로 하고 있어서....지송....
가변저항 값 조절해서 글자 밝기를 최대로 해보세요. 아니면 백라이트를 꺼보세요.
나그네님 감사합니다.....
좋은,,,네용,감사,합이다,,,,
청년,,같은,사람,덕분에,대한민국이,삽니다,(~)(~)(~)
항상,,,조은,하루,대시길.(하하)하(~)(~)(~)
정말 그지같네요 뭐가 좋은 내용인지 하나도 모르겠는데...