- Notifications
You must be signed in to change notification settings - Fork7
TM1638 LED driver with key-scan library for Arduino
License
Erriez/ErriezTM1638
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is a 3-pin serial TM1638 chip library for Arduino, optimized for size and speed. It supports a combined LED driver controller and key-scan interface to detect multiple key presses at the same time.
Displaying numbers, characters and reading keys depends on the hardware wiring and is not part of this library. A fully operational example for a board with 8 7-segment displays, 8 dual color LED's and 8 buttons which uses this library is available here:JY-LKM1638.
Connect power and 3 data pins to an Arduino board DIGITAL pins:
- VDD (Power 3.3V - 5V)
- GND (Ground)
- DIO (Bi-directional data input/output)
- STB (Chip select)
- CLK (Clock)
The following TM1638 pins should be connected to LED's and buttons in a matrix:
- K1~K3 (Key-scan data input to read multiple key presses at the same time)
- SEG/GRID (Output for LED matrix)
Pin | TM1638 | Arduino UNO / Nano / Micro / Pro Micro / Leonardo / Mega2560 | WeMos D1 & R2 / Node MCU | WeMos LOLIN32 |
---|---|---|---|---|
1 | VCC | 5V (or 3.3V) | 3V3 | 3V3 |
2 | GND | GND | GND | GND |
3 | CLK | 2 (DIGITAL pin) | D2 | 0 |
4 | DIO | 3 (DIGITAL pin) | D3 | 4 |
5 | STB0 | 4 (DIGITAL pin) | D4 | 5 |
- Check maximum regulator / diode current to prevent a burnout when using lots of LED's. Some boards can provide only 100mA, others 800mA max.
Arduino IDE | Examples | Erriez TM1638 button and LED driver:
Initialization
// Include TM1638 library#include<ErriezTM1638.h>// Connect display pins to the Arduino DIGITAL pins#defineTM1638_CLK_PIN2#defineTM1638_DIO_PIN3#defineTM1638_STB_PIN4// Create tm1638 objectTM1638tm1638(TM1638_CLK_PIN, TM1638_DIO_PIN, TM1638_STB_PIN);voidsetup(){// Initialize TM1638 tm1638.begin();}
Display on/off
// Turn display offtm1638.displayOff();// Turn display ontm1638.displayOn();
Turn all LED's off
// Turn all LED's offtm1638.clear();
Get keys
// Get 32-bit key-scanuint32_t keys = tm1638.getKeys();
Write Byte to display register
// Write segment LED's to the first display registers 0x00..0x0F with value 0x00..0xff to// display numbers and characters. Just an example which depends on the hardware:tm1638.writeData(0x01,0x01);
Write buffer to display registers
// Creat buffer with LED'suint8_t buf[] = {0b10000110,0b00111111,0b00111111,0b00111111,0b00111111,0b00111111};// Write buffer to TM1638tm1638.writeData(0x00, buf,sizeof(buf));
Measured with Arduino IDE v1.8.5 without any other peripherals, calling all library functions once:
Board | MCU flash size | MCU RAM size | TM1638 library flash | TM1638 library RAM |
---|---|---|---|---|
Arduino UNO | 32kB | 2048kB | 1840 Bytes | 40 Bytes |
The library uses optimized pin control for AVR targets. Other targets uses the default digitalRead() and digitalWrite() pin control functions.
OutputBenchmark example:
Board | CLK | Read keys | Write Byte | Write 16 Bytes buffer | Clear display |
---|---|---|---|---|---|
Pro Mini 8MHz | 65kHz | 736us | 312us | 2448us | 2224us |
UNO 16MHz | 125kHz | 340us | 152us | 1192us | 1176us |
WeMos D1 & R2 80MHz | 200kHz | 284us | 116us | 683us | 682us |
WeMos D1 & R2 160MHz | 300kHz | 223us | 66us | 474us | 469us |
- TheErriezTM1638Benchmark example usesErriez Timestamp library.
Please refer to theWiki page.
About
TM1638 LED driver with key-scan library for Arduino