CAFE

한국직업능력교육원

[스크랩] [Arduino 실습 39] TM1637 7Segment Display

작성자송명규|작성시간26.06.16|조회수36 목록 댓글 0

이 번에는 TM1637 7Segment FND Display 모듈을 Test 해 봤습니다.

워낙 Arduino 에서 제공하는 라이브러리가 잘 되어 있어 별도의 My 라이브러리를 

만들 필요가 없습니다.

함수 사용법만 공부하시면 편하게 사용하실 수 있습니다.

TM1637은 7Segment FND전용 IC 칩 으로 많은 기능이 있으며 FND 표시에 대한 거의 모든 기능이 들어있는

칩 입니다.  사용해 보시면 너무 편합니다. GPIO Pin 수도 줄고요... 앞으로 74HC595 모듈하고 TM1637 모듈을

주로 사용하겠습니다.  여러분들도 프로젝트에 사용해 보시기 바랍니다.

 

단 구매시 주의할 점은 시계용 쿨롬이 표시된 FND 모듈은 구매하시 마세요...

DP 단자가 표시 안 됩니다.  그대신 시계처럼 분하고 초가 구별되는 쿨롬만 표시 됩니다.

 



#include <TM1637Display.h>

 

#define  CLK   2

#define  DIO   3

 

uint8_t data[]={0xff,0xff,0xff,0xff}; // 전부 켜짐 = 8자표시

 

// PLAY 표시하기

byte En_Font[] = {0x73, 0x38, 0x77, 0x6e}; // PLAY

byte twelve[] = {0x06, 0x5b}; //12

byte hex[4];

// Arduino 영문폰트

//byte Arduino[] {0x77, 0x50, 0x5e, 0x1c, 0x04, 0x54, 0x5c};

 

// 실습 4 = // Arduino 영문자 스크룰 표시하기

byte Arduino[] {

    0x00, 0x00, 0x00, 0x77,

    0x50, 0x5e, 0x1c, 0x04, 0x54, 0x5c,

    0x00, 0x00, 0x00, 0x00

  };

 

// Create the °C Symbol

const uint8_t Celsius[] = {

  SEG_A | SEG_B | SEG_F | SEG_G,  // Circle

  SEG_A | SEG_D | SEG_E | SEG_F   // C

};

 

//FND간 전환 시간 간격을 설정한다.

//bitDelay=100 = 기본 100us로 설정되어 있음

TM1637Display seg7(CLK, DIO); //bitDelay=100 ==> 생략가능(옵션)  

 

void setup() {

  // put your setup code here, to run once:

  seg7.setBrightness(0x07);//0-7, onoff = 생략가능, defult true

  seg7.setSegments(En_Font); // 표시할 fnd 전체, 원하는부분을 자체적으로 설정하는기능

  // data는 배열형태로 해야 됨

  // 7세그먼트는 K(-) 컴몬이므로 A(+)형태의 Data 이어야 함

  // setSegments(segments, length, position)

  // segments = 표시할 데이터(바이트 배열형태)

  // length = 표시할 숫자의 자릿수(표시할 바이트 수, 문자 수)

  // position = 표시항 시작 위치(0-3)

  //          - x1000 = 0, x100 - 1, x10 = 2, x1 = 3

  //          - 멘 왼쪽이 = 0, 오른쪽 끝 = 3

  delay(1000);

 

  seg7.clear();  // 전체 지움

  seg7.setSegments(twelve, 2, 1);

  delay(1000);

 

  seg7.clear();

  seg7.showNumberDec(567, true);

  delay(1000);

 

  seg7.clear();

  seg7.showNumberDec(123);

  delay(1000);

 

  // 끝 한지리 설정

  seg7.showNumberDec(4, false, 1, 3);

  delay(1000);

 

  // Dot 표시(쿨롬 포함) = : 이 있는 모델른 .Dot가 표시 안됨

  seg7.clear();

  seg7.showNumberDecEx(1234, 0x40, false, 4, 0);

  delay(1000);

 

  //hex 표시

  seg7.clear();

  seg7.showNumberHexEx(0xab5f, 0x40, false, 4, 0);

  delay(1000);

 

  // 10에서 13가지 십진수를 16진수로 변화하여 표시할때

  seg7.clear();

  for (int i=0; i<4; i++)

  hex[i] = seg7.encodeDigit(10 + i);

  seg7.setSegments(hex);

}

 

void loop() {

 

// Arduino 영문자 스크룰 표시하기

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

    seg7.setSegments(Arduino + i);

    delay(200);

}

delay(500);

 

for (int i=10; i>=0; i--) {

    seg7.setSegments(Arduino + i);

    delay(200);

}

delay(500);

 

  // 난수 발생 표시  seg7.clear();  // Clear the display

  long randNumber = random(0, 9999);        // Generate a random number between 0 and 9999

  seg7.showNumberDec(randNumber, false); // Display the number

delay(500);

 

 // 9999 까지 표시하기

 seg7.clear();           // Clear the display

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

     seg7.showNumberDec(i, true);  // i=value, true to padd the blank segments with 0

     delay(100);

  };

  delay(1000);

 

  // put your main code here, to run repeatedly:

  // // 실습3  = display on /off

  // for (int i=0; i<5; i++) {

  //   seg7.setBrightness(7, false);

  //   seg7.setSegments(data);

  //   delay(1000);

  //   seg7.setBrightness(7, true);

  //   seg7.setSegments(data);

  //   delay(1000);

  // }

 

  /*

  // 실습 2 = 7Seg 밝기변화

  for (int brightness=0; brightness<=7; brightness++) {

    seg7.setBrightness(brightness, true);

    seg7.setSegments(data);

    delay(1000);

  }

*/

 

/*

  // 실습 1

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

  {

    seg7.showNumberDec(i);

    delay(500);

  }

*/  

}

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼