Skip to content

Commit f7c207a

Browse files
committed
Created
0 parents  commit f7c207a

File tree

13 files changed

+1070
-0
lines changed

13 files changed

+1070
-0
lines changed

README.txt

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
TM1628 library
2+
--------------
3+
Vasyl Yudin
4+
Email: vasyl(dot)yudin(at)gmail(dot)com
5+
URL: github TM1628
6+
7+
A library for interacting an arduino with a TM1628.
8+
9+
Includes:
10+
- Support for the TM1628;
11+
- Helper method for displaying time;
12+
- Reading simultaneous button presses;
13+
- Support for dimming the display and LEDs;
14+
- Support for method 'print';
15+
16+
USAGE NOTES
17+
-----------
18+
19+
Just put the files on a TM1628 directory under "arduino/libraries" on your arduino IDE instalation

TM1628.cpp

+175
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
2+
#if defined(ARDUINO) && ARDUINO >= 100
3+
#include "Arduino.h"
4+
#else
5+
#include "WProgram.h"
6+
#endif
7+
8+
#include "TM1628.h"
9+
byte _curpos = 0x00;
10+
byte buffer[14] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
11+
const byte seg_addr[7]={0x00,0x01,0x07,0x02,0x03,0x04,0x05};//no bit of digital segments
12+
// SG0 SG1 SG2 SG3 SG4 SG5 SG6 SG7 DVD VCD MP3 PLY PAU PBC RET DTS DDD CL1 CL2 //name -|
13+
const byte led_addr[19]={0x03,0x0B,0x0D,0x07,0x05,0x09,0x0D,0x01,0x01,0x03,0x05,0x09,0x0b,0x07,0x00,0x08,0x06,0x02,0x04};//adress -| for the signs's and disc's leds
14+
const byte led_val[19]= {0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x40,0x40,0x40,0x40,0x40};//byte -|
15+
16+
TM1628::TM1628(byte _dio_pin, byte _clk_pin, byte _stb_pin) {
17+
this->_dio_pin = _dio_pin;
18+
this->_clk_pin = _clk_pin;
19+
this->_stb_pin = _stb_pin;
20+
21+
pinMode(_dio_pin, OUTPUT);
22+
pinMode(_clk_pin, OUTPUT);
23+
pinMode(_stb_pin, OUTPUT);
24+
25+
digitalWrite(_stb_pin, HIGH);
26+
digitalWrite(_clk_pin, HIGH);
27+
28+
sendCommand(0x40);
29+
sendCommand(0x80);
30+
31+
digitalWrite(_stb_pin, LOW);
32+
send(0xC0);
33+
clear();
34+
digitalWrite(_stb_pin, HIGH);
35+
}
36+
37+
void TM1628::begin(boolean active = true, byte intensity = 1) {
38+
sendCommand(0x80 | (active ? 8 : 0) | min(7, intensity));
39+
}
40+
41+
void TM1628::update() {
42+
for (int i=0; i<14; i++)
43+
sendData(i, buffer[i]);
44+
}
45+
46+
void TM1628::setTime(int hour,int min,int sec) {
47+
48+
if (hour >= 100) setSeg(0, (hour/100));
49+
if (hour >= 10) setSeg(1, (hour%100)/10);
50+
setSeg(2, (hour%100)%10);
51+
setSeg(3, (min/10));
52+
setSeg(4, (min%10));
53+
setSeg(5, (sec/10));
54+
setSeg(6, (sec%10));
55+
update();
56+
}
57+
58+
void TM1628::clear() {
59+
for (int i=0; i<14; i++)
60+
buffer[i]=0x00;
61+
_curpos=0x00;
62+
update();
63+
}
64+
65+
void TM1628::setLED(byte led){
66+
buffer[led_addr[led]] = buffer[led_addr[led]] ^ led_val[led];
67+
update();
68+
}
69+
70+
void TM1628::setLEDon(byte led){
71+
buffer[led_addr[led]] |= led_val[led];//= buffer[led_addr[led]] | led_val[led];
72+
update();
73+
}
74+
75+
void TM1628::setLEDoff(byte led){
76+
buffer[led_addr[led]] &= 0xFF - led_val[led];//= buffer[led_addr[led]] & (0xFF - led_val[led]);
77+
update();
78+
}
79+
80+
void TM1628::setDisc(boolean onoff){
81+
if (onoff) {
82+
for(int i=0;i<8;i++)// turn on all disc segments
83+
buffer[led_addr[i]] = buffer[led_addr[i]] | led_val[i];
84+
} else {
85+
for(int i=0;i<8;i++)
86+
buffer[led_addr[i]] = buffer[led_addr[i]] & (0xFF - led_val[i]);
87+
}
88+
update();
89+
}
90+
91+
byte TM1628::getButtons() {
92+
byte keys = 0;
93+
94+
digitalWrite(_stb_pin, LOW);
95+
send(0x42);
96+
for (int i = 0; i < 5; i++) {
97+
keys |= receive() << i;
98+
}
99+
digitalWrite(_stb_pin, HIGH);
100+
101+
return keys;
102+
}
103+
104+
void TM1628::write(byte chr){
105+
if(_curpos<0x07) {
106+
setChar(_curpos, chr);
107+
_curpos++;
108+
}
109+
}
110+
111+
void TM1628::setCursor(byte pos){
112+
_curpos = pos;
113+
}
114+
/*********** mid level **********/
115+
void TM1628::sendData(byte addr, byte data) {
116+
sendCommand(0x44);
117+
digitalWrite(_stb_pin, LOW);
118+
send(0xC0 | addr);
119+
send(data);
120+
digitalWrite(_stb_pin, HIGH);
121+
}
122+
123+
void TM1628::sendCommand(byte data) {
124+
digitalWrite(_stb_pin, LOW);
125+
send(data);
126+
digitalWrite(_stb_pin, HIGH);
127+
}
128+
129+
void TM1628::setSeg(byte addr, byte num) {
130+
for(int i=0; i<7; i++){
131+
bitWrite(buffer[i*2], seg_addr[addr], bitRead(NUMBER_FONT[num],i));
132+
}
133+
}
134+
135+
void TM1628::setChar(byte addr, byte chr) {
136+
for(int i=0; i<7; i++){
137+
bitWrite(buffer[i*2], seg_addr[addr], bitRead(FONT_DEFAULT[chr - 0x20],i));
138+
}
139+
update();
140+
}
141+
/************ low level **********/
142+
void TM1628::send(byte data) {
143+
for (int i = 0; i < 8; i++) {
144+
digitalWrite(_clk_pin, LOW);
145+
digitalWrite(_dio_pin, data & 1 ? HIGH : LOW);
146+
data >>= 1;
147+
digitalWrite(_clk_pin, HIGH);
148+
}
149+
}
150+
151+
byte TM1628::receive() {
152+
byte temp = 0;
153+
154+
// Pull-up on
155+
pinMode(_dio_pin, INPUT);
156+
digitalWrite(_dio_pin, HIGH);
157+
158+
for (int i = 0; i < 8; i++) {
159+
temp >>= 1;
160+
161+
digitalWrite(_clk_pin, LOW);
162+
163+
if (digitalRead(_dio_pin)) {
164+
temp |= 0x80;
165+
}
166+
167+
digitalWrite(_clk_pin, HIGH);
168+
}
169+
170+
// Pull-up off
171+
pinMode(_dio_pin, OUTPUT);
172+
digitalWrite(_dio_pin, LOW);
173+
174+
return temp;
175+
}

TM1628.h

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#ifndef TM1628_h
2+
#define TM1628_h
3+
4+
#if defined(ARDUINO) && ARDUINO >= 100
5+
#include "Arduino.h"
6+
#else
7+
#include "WProgram.h"
8+
#endif
9+
10+
#include "TM16XXFonts.h"
11+
#include "Print.h"
12+
//flags for turn on/off
13+
#define ON true
14+
#define OFF false
15+
16+
//flags for indicating LEDs
17+
#define LED_SE0 0x00
18+
#define LED_SE1 0x01
19+
#define LED_SE2 0x02
20+
#define LED_SE3 0x03
21+
#define LED_SE4 0x04
22+
#define LED_SE5 0x05
23+
#define LED_SE6 0x06
24+
#define LED_SE7 0x07
25+
#define LED_DVD 0x08
26+
#define LED_VCD 0x09
27+
#define LED_MP3 0x0A
28+
#define LED_PLY 0x0B
29+
#define LED_PAU 0x0C
30+
#define LED_PBC 0x0D
31+
#define LED_RET 0x0E
32+
#define LED_DTS 0x0F
33+
#define LED_DDD 0x10
34+
#define LED_CL1 0x11
35+
#define LED_CL2 0x12
36+
37+
38+
class TM1628 : public Print
39+
{
40+
public:
41+
// init
42+
TM1628(byte _dio_pin, byte _clk_pin, byte _stb_pin);
43+
44+
void begin(boolean active, byte intensity);
45+
void update();
46+
void clear();
47+
void setSeg(byte addr, byte num);
48+
void setChar(byte _curpos, byte chr);
49+
void setCursor(byte pos);
50+
virtual void write(byte chr);
51+
void setTime(int hour, int min, int sec);
52+
void setLED(byte led);
53+
void setLEDon(byte led);
54+
void setLEDoff(byte led);
55+
void setDisc(boolean onoff);
56+
byte getButtons();
57+
protected:
58+
byte receive();
59+
void sendData(byte addr, byte data);
60+
void sendCommand(byte data);
61+
void send(byte data);
62+
63+
byte _dio_pin;
64+
byte _clk_pin;
65+
byte _stb_pin;
66+
byte _curpos;
67+
// byte buffer[];
68+
// byte seg_addr[];
69+
};
70+
71+
#endif

0 commit comments

Comments
 (0)