7-SEGMENT 0.56″ DISPLAY 4-DIGIT TM1637 MODULE with case

7-SEGMENT 0.56″ DISPLAY 4-DIGIT TM1637 MODULE with case

เป็นโมดูลแสดงผล 7-SEGMENT ขนาด 0.56 นิ้ว 4หลัก พร้อมกล่องพลาสติก

ไฟเลี้ยง 3.3V หรือ 5V

สามารถนำไปดัดแปลงเป็น นาฬิกา นับจำนวนคนเข้าออก นับชิ้นงาน สกอร์บอร์ด นับตัวเลข นับเวลา และอื่นๆ

เชื่อมต่อสัญญาณ ผ่าน DIO และ CLK

ขนาด กxยxส 4.2x8x3.3 เซ็นติเมตร

น้ำหนัก 50 กรัม

สั่งซื้อสินค้าคลิ๊ก

ตำแหน่งขา

  • Vcc ไฟเลี้ยง 5 Vdc
  • CLK และ DIO ขาการสื่อสารสั่งงาน
  • GND กราว์ด

โปรแกรมทดสอบกับ Arduino ใช้ Library TM1637Display.h แสดงตัวเลข ตัวอักษร และปรับระดับความสว่างหน้าจอได้ 7 ระดับ

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2 //CLK ที่ต่อกับ Arduino เปลี่ยนเป็นขาอื่นได้
#define DIO 3 //DIO ที่ต่อกับ Arduino เปลี่ยนเป็นขาอื่นได้

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000 //หน่วงเวลา 2 วินาที

const uint8_t SEG_DONE[] = {
    SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
    SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
    SEG_C | SEG_E | SEG_G,                           // n
    SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
    };

TM1637Display display(CLK, DIO);

void setup()
{
}

void loop()
{
  int k;
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
  display.setBrightness(0x0f);

  // All segments on
  display.setSegments(data);
  delay(TEST_DELAY);

  // Selectively set different digits
  data[0] = display.encodeDigit(0);
  data[1] = display.encodeDigit(1);
  data[2] = display.encodeDigit(2);
  data[3] = display.encodeDigit(3);
  display.setSegments(data);
  delay(TEST_DELAY);

  /*
  for(k = 3; k >= 0; k--) {
    display.setSegments(data, 1, k);
    delay(TEST_DELAY);
    }
  */

  display.clear();
  display.setSegments(data+2, 2, 2);
  delay(TEST_DELAY);

  display.clear();
  display.setSegments(data+2, 2, 1);
  delay(TEST_DELAY);

  display.clear();
  display.setSegments(data+1, 3, 1);
  delay(TEST_DELAY);


  // Show decimal numbers with/without leading zeros
  display.showNumberDec(0, false); // Expect: ___0
  delay(TEST_DELAY);
  display.showNumberDec(0, true);  // Expect: 0000
  delay(TEST_DELAY);
    display.showNumberDec(1, false); // Expect: ___1
    delay(TEST_DELAY);
  display.showNumberDec(1, true);  // Expect: 0001
  delay(TEST_DELAY);
  display.showNumberDec(301, false); // Expect: _301
  delay(TEST_DELAY);
  display.showNumberDec(301, true); // Expect: 0301
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(14, false, 2, 1); // Expect: _14_
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(4, true, 2, 2);  // Expect: __04
  delay(TEST_DELAY);
  display.showNumberDec(-1, false);  // Expect: __-1
  delay(TEST_DELAY);
  display.showNumberDec(-12);        // Expect: _-12
  delay(TEST_DELAY);
  display.showNumberDec(-999);       // Expect: -999
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(-5, false, 3, 0); // Expect: _-5_
  delay(TEST_DELAY);
  display.showNumberHexEx(0xf1af);        // Expect: f1Af
  delay(TEST_DELAY);
  display.showNumberHexEx(0x2c);          // Expect: __2C
  delay(TEST_DELAY);
  display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1
  delay(TEST_DELAY);
  display.clear();
  display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__
  delay(TEST_DELAY);
  
    // Run through all the dots
    for(k=0; k <= 4; k++) {
        display.showNumberDecEx(0, (0x80 >> k), true);
        delay(TEST_DELAY);
    }

  // Brightness Test
  for(k = 0; k < 4; k++)
    data[k] = 0xff;
  for(k = 0; k < 7; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(TEST_DELAY);
  }
  
  // On/Off test
  for(k = 0; k < 4; k++) {
    display.setBrightness(7, false);  // Turn off
    display.setSegments(data);
    delay(TEST_DELAY);
    display.setBrightness(7, true); // Turn on
    display.setSegments(data);
    delay(TEST_DELAY);  
  }

 
  // Done!
  display.setSegments(SEG_DONE);

  while(1);
}

TM1637 Library

TM1637-4DIGIT.ino

Datasheet MT1637

 

โปรแกรมทดสอบกับ Arduino โดยไม่ใช้ Library

ตัวอย่างที่ 1

#define CLK 13  //กำหนดขาสัญญาณนาฬิกา
#define DIO 12  //กำหนดขาดิจิตอลอินพุทเอาพุท

byte Seg[20] { // DP G F E D C B A
  0b00111111, // 0
  0b00000110, // 1
  0b01011011, // 2
  0b01001111, // 3
  0b01100110, // 4
  0b01101101, // 5
  0b01111101, // 6
  0b00000111, // 7
  0b01111111, // 8
  0b01101111, // 9
  0b11111111, // 10 All
  0b01000000, // 11 -
  0b01110001, // 12 F
  0b01110011, // 13 P
  0b00001000, // 14 _
  0b00000000, // 15
  0b10000000, // 16 :
  0b10000000,  // 17
  0b00000000,  // 18
  0b00000001,  // 19
};

void Setup_7Seg() {
  pinMode(CLK, OUTPUT); //กำหนดให้ CLK เป็น OUTPUT สถานะ LOGIC จะเป็น 0
  pinMode(DIO, OUTPUT); //กำหนดให้ DIO เป็น OUTPUT สถานะ LOGIC จะเป็น 0
  pinMode(CLK, INPUT);  //กำหนดให้ CLK เป็น INPUT สถานะ LOGIC จะเป็น 1
  pinMode(DIO, INPUT);  //กำหนดให้ DIO เป็น INPUT สถานะ LOGIC จะเป็น 1
  //digitalWrite(CLK, 0); 
  //digitalWrite(DIO, 0);  
}

void setup() {
  Setup_7Seg();
}

void loop() { 
  Segment_Bit(0,6,9,2,19,0x0f); 
  /*หลักที่ 1, หลักที่ 2, หลักที่ 3, หลักที่ 4 ,จุดกลาง2จุดใส่ 18 และ 19 เท่านั้น ,ความสว่าง 8 ระดับ 0x08-0x0f เลขฐาน16
  ถ้าจะปิดหลักไหนก็ให้ใส่ 18 เพราะเป็น 0 ทุกบิต*/
}

void Segment_Bit(byte d1, byte d2, byte d3, byte d4 ,byte dp, byte Brightness) {
  Write7Seg(d1, Brightness, 0x00, dp); // ข้อมูล , ความสว่าง , ตำแหน่งหลัก , DP
  Write7Seg(d2, Brightness, 0x01, dp);
  Write7Seg(d3, Brightness, 0x02, dp);
  Write7Seg(d4, Brightness, 0x03, dp);
}

void delayBit() { //หน่วงเวลาสร้างพัลส์
  delayMicroseconds(10);
}

void Write7Seg(int data, byte Bri, byte Pos, byte DP) { //data=d1d2d3d4 //Bri=0x0a สว่าง // Pos=ตำแหน่ง //DP จุดกลาง

  Start();  // DIO เป็น OUTPUT จะมีสถานะเป็น LOW อัตโนมัติ และหน่วงเวลา 10 us
  Send_Bit(0x40 | 0x04);        // data 0100 0100 ส่ง Data command setting => Normal mode => Fix address => Write data
  Stop();

  Start();
  Send_Bit(0xC0 | Pos);         // ตำแหน่งหลัก  1100 0000
  Send_Bit(Seg[data] |( DP <<7 ));     // ข้อมูล ตัวเลข | DP จุดตาม Arry Seg 18 19
  Stop();

  Start();                // ตาราง Display control ความสว่าง
  Send_Bit(0x80 | Bri);   // 1000 0000 | 1010 = 1000 1010
  Stop();
}

void Start() {
  pinMode(DIO, OUTPUT);
  delayBit();
}

void Send_Bit(byte dataI) { //รับ (0x40 | 0x04) //MSB 40=0100  //LSB 04=0000 0100 // |กันได้ = 0100 0100
  byte data = dataI;
  for (int i = 0; i < 8; i++) { //วนส่งข้อมูล 8 บิต
    pinMode(CLK, OUTPUT); // เมื่อประกาศเป็น OUTPUT สถานะ PIN จะเป็น LOW โดยอัตโนมัติ
    delayBit();

    if (data & 0x01) {  //ถ้าสนานะบิตไหนเป็น 1 เขียน DIO = INPUT หรือ 1
      pinMode(DIO, INPUT); //INPUT digital input (the default at power-up)
    } 
    else {
      pinMode(DIO, OUTPUT); // OUTPUT an output (push-pull)
    }
    delayBit();

    pinMode(CLK, INPUT);
    delayBit();
    data = data >> 1; 
  }

  pinMode(CLK, OUTPUT);
  pinMode(DIO, INPUT);
  delayBit();

  pinMode(CLK, INPUT);
  delayBit();
  uint8_t ack = digitalRead(DIO);//อ่านสถานะ ASK จาก TM1637
  if (ack == 0)
    pinMode(DIO, OUTPUT);
    delayBit();
    pinMode(CLK, OUTPUT);
    delayBit();
}

void Stop() {
  pinMode(DIO, OUTPUT);
  delayBit();
  pinMode(CLK, INPUT);
  delayBit();
  pinMode(DIO, INPUT);
  delayBit();
}

TM1637-4DIGIT-01.ino

TM1637-4DIGIT-01
TM1637-4DIGIT-01

ตัวอย่างที่ 2

#define CLK 2 
#define DIO 3

byte Seg[18] { // DP G F E D C B A
  0b00111111, // 0
  0b00000110, // 1
  0b01011011, // 2
  0b01001111, // 3
  0b01100110, // 4
  0b01101101, // 5
  0b01111101, // 6
  0b00000111, // 7
  0b01111111, // 8
  0b01101111, // 9
  0b11111111, // All
  0b01000000, // -
  0b01110001, // F
  0b01110011, // P
  0b00001000,  // _
  0b00000000,
  0b11111111,
  0b10000000
};

void setup() {
  Setup_7Seg();
}

void loop() {
  byte OUT = 0;
  Segment_Bit(10,15,15,15);
  delay(500);
  Segment_Bit(15,8,15,15);
  delay(500);
  Segment_Bit(15,17,15,15);
  delay(500);
  Segment_Bit(15,15,10,15);
  delay(500);
  Segment_Bit(15,15,15,10);
  delay(500);
  OUT = 0;
  for(int r = 0; r < 10; r++){
    Segment_Bit(OUT,OUT,OUT,OUT);
    OUT++;
    delay(500);
  }
  delay(1000);
}

void Segment_Bit(byte d1, byte d2, byte d3, byte d4) {
  Write7Seg(d1, 0x0a, 0x00, 0);
  Write7Seg(d2, 0x0a, 0x01, 0);
  Write7Seg(d3, 0x0a, 0x02, 0);
  Write7Seg(d4, 0x0a, 0x03, 0);
}

void Segment(uint32_t Data) {
  Write7Seg(Data / 1000, 0x0f, 0x00, 0);
  Write7Seg((Data % 1000) / 100, 0x0f, 0x01, 0);
  Write7Seg((Data % 100) / 10, 0x0f, 0x02, 0);
  Write7Seg(Data % 10, 0x0f, 0x03, 0);
}

void Setup_7Seg() {
  pinMode(CLK, OUTPUT);
  pinMode(DIO, OUTPUT);
  delay(250);
  pinMode(CLK, INPUT);
  pinMode(DIO, INPUT);
  //pinMode(1, OUTPUT);
  //digitalWrite(1, 0);
  digitalWrite(CLK, 0);
  digitalWrite(DIO, 0);
}

void delayBit() {
  delayMicroseconds(10);
}

void Write7Seg(int data, byte Bri, byte Pos, byte DP) {

  Start();
  Send_Bit(0x40 | 0x04);
  Stop();

  Start();
  Send_Bit(0xC0 | Pos);
  Send_Bit(Seg[data] | DP);
  Stop();

  Start();
  Send_Bit(0x80 | Bri);
  Stop();
}

void Start() {
  pinMode(DIO, OUTPUT);
  delayBit();
}

void Send_Bit(byte dataI) {
  byte data = dataI;

  for (int i = 0; i < 8; i++) {
    pinMode(CLK, OUTPUT);
    delayBit();

    if (data & 0x01) {
      pinMode(DIO, INPUT);
    }
    else {
      pinMode(DIO, OUTPUT);
    }
    delayBit();

    pinMode(CLK, INPUT);
    delayBit();
    data = data >> 1;
  }

  pinMode(CLK, OUTPUT);
  pinMode(DIO, INPUT);
  delayBit();

  pinMode(CLK, INPUT);
  delayBit();
  uint8_t ack = digitalRead(DIO);
  if (ack == 0)
    pinMode(DIO, OUTPUT);


  delayBit();
  pinMode(CLK, OUTPUT);
  delayBit();
}

void Stop() {
  pinMode(DIO, OUTPUT);
  delayBit();
  pinMode(CLK, INPUT);
  delayBit();
  pinMode(DIO, INPUT);
  delayBit();
}

TM1637-4DIGIT-02.in0

 

สามารถต่อโดยตรงกับ Arduino Uno โดยเสียบสายแพร ที่ ICSP ตามรูปสังเกตที่แถบสีแดงของสายให้ตรงตามรูป

Arduino Uno 7-SEGMENT 0.56 TM1637
Arduino Uno 7-SEGMENT 0.56 TM1637

 

สามารถต่อโดยตรงกับ Arduino Mega 2560 โดยเสียบสายแพรที่ ICSPตามรูปสังเกตที่แถบสีแดงของสายให้ตรงตามรูป

การต่อกับบอร์ด Arduino Mega 2560 ต้องเปลี่ยน โค๊ดกำหนดขาให้ตรง

#define CLK  13  => #define CLK  52

#define DIO 12   =>  #define DIO 50

Arduino Mega 2560 7-SEGMENT 0.56 TM1637
Arduino Mega 2560 7-SEGMENT 0.56 TM1637

TM1637 MODULE clock นาฬิกา

 

สั่งซื้อสินค้าคลิ๊ก

ป้ายกำกับ:, , ,