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); }
โปรแกรมทดสอบกับ 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(); }

ตัวอย่างที่ 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(); }
สามารถต่อโดยตรงกับ Arduino Uno โดยเสียบสายแพร ที่ ICSP ตามรูปสังเกตที่แถบสีแดงของสายให้ตรงตามรูป

สามารถต่อโดยตรงกับ Arduino Mega 2560 โดยเสียบสายแพรที่ ICSPตามรูปสังเกตที่แถบสีแดงของสายให้ตรงตามรูป
การต่อกับบอร์ด Arduino Mega 2560 ต้องเปลี่ยน โค๊ดกำหนดขาให้ตรง
#define CLK 13 => #define CLK 52
#define DIO 12 => #define DIO 50

ตัวอย่างโปรเจค นาฬิกา ARDUINO DS3231 7-SEGMENT 0.56″ DISPLAY 4-DIGIT TM1637 MODULE