8x8 LED 도트 매트릭스 실험

이번에는 8x8 LED 도트 매트릭스를 구동하는 실험입니다.

8X8 도트 매트릭스는 64 개의 LED로 구성되어 있습니다. 각 LED는 행(R)과 열(C)의 교차점에 위치하며 행(R)이 HIGH 레벨, 열(C)이 LOW 레벨로 설정되면 해당하는 LED가 켜지게 됩니다. 예를 들어, 첫 번째 점이 켜지려면 9번핀(R1)이 HIGH 레벨, 13번핀(C1)이 LOW 레벨로 되면 됩니다. 첫 번째 줄이 모두 켜지려면 9번핀이 HIGH 레벨에 연결되고 (13, 3, 4, 10, 6, 11, 15, 16)핀이 LOW 레벨에 연결되면 됩니다. 첫 번째 열이 모두 켜지려면 13번핀(C1)이 LOW 레벨에 연결되고 (9, 14, 8, 12, 1, 7, 2, 5)핀이 HIGH 레벨에 연결되면 됩니다.

8X8 도트 매트릭스의 1번핀 찾기

도트 매트릭스를 4면중에 모델번호가 인쇄가 되어 있고 면 가운데 돌출부가 있는 곳을 아래로 두고 맨 왼쪽이 1번핀이 됩니다. 1번부터 반시계방향으로 돌면서 1~16번핀이 됩니다.

 

 

아래는 실험을 위한 회로도입니다. 모든 행(R)에 220옴 저항을 연결하게 됩니다.

아래와 같이 아두이노 보드와 연결하게 됩니다. 프로그램을 통하여 좌측상단(0,0좌표)의 LED를 점멸하게 합니다. 아래의 소스를 수정하여 다른 좌표의 LED도 제어해보시기 바랍니다.

 

소스코드

아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.

//8x8 LED 도트 매트릭스 실험

//행을 제어하기 위한 핀설정
const int row1 = 2; // Arduino Pin2에 연결된 행 번호 9
const int row2 = 3; // Arduino Pin3에 연결된 행 번호 14 
const int row3 = 4; // Arduino Pin4에 연결된 행 번호 8 
const int row4 = 5; // Arduino Pin5에 연결된 행 번호 12 
const int row5 = 17; // Arduino Pin17 (A3)에 연결된 행 번호 1 
const int row6 = 16; // Arduino Pin16 (A2)에 연결된 행 번호 7 
const int row7 = 15; //Arduino Pin15 (A1)에 연결된 행 번호 2 
const int row8 = 14; // Arduino Pin14 (A0)에 연결된 행 번호 5 
//열을 제어하기 위한 핀설정
const int col1 = 6; //Arduino Pin6에 연결된 열 번호13 
const int col2 = 7; // Arduino Pin7에 연결된 열 번호3 
const int col3 = 8; //Arduino Pin8에 연결된 열 번호4 
const int col4 = 9; // Arduino Pin9에 연결된 열 번호10 
const int col5 = 10; //Arduino Pin10에 연결된 열 번호6 
const int col6 = 11; //Arduino Pin11에 연결된 열 번호11 
const int col7 = 12; // Arduino Pin12에 연결된 열 번호15 
const int col8 = 13; // Arduino Pin13에 연결된 열 번호16 
void setup()
{ 
  int i = 0 ; 
  for(i=2;i<18;i++) 
  { 
    pinMode(i, OUTPUT); //모든I/O포트(아날로그포함)를 출력모드로 설정
  } 

  for(i=2;i<18;i++) { 
    digitalWrite(i, LOW); //LOW 출력
  } 

} 
void loop()
{ 
  int i; 
  //1번 행, 1번 열의 LED를 켬
  digitalWrite(row1, HIGH); 
  digitalWrite(row2, LOW); 
  digitalWrite(row3, LOW); 
  digitalWrite(row4, LOW); 
  digitalWrite(row5, LOW); 
  digitalWrite(row6, LOW); 
  digitalWrite(row7, LOW); 
  digitalWrite(row8, LOW); 
  digitalWrite(col1, LOW); 
  digitalWrite(col2, HIGH); 
  digitalWrite(col3, HIGH); 
  digitalWrite(col4, HIGH); 
  digitalWrite(col5, HIGH); 
  digitalWrite(col6, HIGH); 
  digitalWrite(col7, HIGH); 
  digitalWrite(col8, HIGH); 
  delay(1000); 
  //turn off all 
  for(i=2;i<18;i++) { 
    digitalWrite(i, LOW); 
  } 
  delay(1000); 
}