Skip to content

Commit 804d3b4

Browse files
committed
Update TM1637.py
+ add reverse display mode + update char font - remove showhex function
1 parent f65ae21 commit 804d3b4

File tree

1 file changed

+61
-37
lines changed

1 file changed

+61
-37
lines changed

‎LED/TM1637/TM1637.py‎

Lines changed: 61 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,46 @@
1515
TM1637_CMD3 = (128) # 0x80 display control command
1616
TM1637_DELAY = (10) # 10us delay between clk/dio pulses
1717

18-
_SEGMENTS = (0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71)
18+
19+
'''
20+
0x00-0x0F
21+
0x10-0x1F
22+
0x20-0x2F
23+
0x30-0x39 0 ~ 9
24+
0x3A-0x40
25+
0x41-0x5A A - Z
26+
0x5B-0x60
27+
'''
28+
_FONT1 = b'\
29+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
30+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
31+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\
32+
\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F\
33+
\x00\x00\x00\x00\x00\x00\x00\
34+
\x77\x7C\x39\x5E\x79\x71\x3D\x76\x00\x0E\x00\x38\x00\x54\x5C\x73\x67\x00\x00\x78\x3E\x1C\x00\x00\x00\x00\x00\
35+
\x00\x00\x00\x00\x08\x00\
36+
'
37+
_FONT2 = b'\
38+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
39+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
40+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\
41+
\x3F\x30\x5B\x79\x74\x6D\x6F\x38\x7F\x7D\
42+
\x00\x00\x00\x00\x00\x00\x00\
43+
\x7E\x67\x0F\x73\x4F\x4E\x2F\x76\x00\x31\x00\x07\x00\x62\x63\x5E\x7C\x00\x00\x47\x37\x23\x00\x00\x00\x00\x00\
44+
\x00\x00\x00\x00\x01\x00\
45+
'
1946

2047
class TM1637():
2148
def __init__(self, clk, dio, intensity=7, number = 4):
2249
self.clk = clk
2350
self.dio = dio
2451

2552
self._intensity = intensity%8
26-
self._LED = number
53+
self._LEDS = number
2754
self._ON = 8
28-
self.dbuf = [0, 0, 0, 0]
55+
self.dbuf = [0]*number
56+
self._reverse = False
57+
self.FONT = _FONT1
2958

3059
self.clk.init(Pin.OUT, value=0)
3160
self.dio.init(Pin.OUT, value=0)
@@ -93,50 +122,45 @@ def intensity(self, val=None):
93122
self._write_data_cmd()
94123
self._write_dsp_ctrl()
95124

96-
def _dat(self, bit, dat):
125+
def reverse(self, reverse=False):
126+
self._reverse = reverse
127+
if reverse:
128+
self.FONT = _FONT2
129+
else:
130+
self.FONT = _FONT1
131+
132+
def dat(self, dat, bit=0):
133+
if self._reverse:
134+
bit = self._LEDS - bit - 1
97135
self._write_data_cmd()
98136
self._start()
99-
self._write_byte(TM1637_CMD2 | (bit%self._LED))
137+
self._write_byte(TM1637_CMD2 | (bit%self._LEDS))
100138
self._write_byte(dat)
101139
self._stop()
102140
self._write_dsp_ctrl()
103141

104142
def clear(self):
105-
self._dat(0, 0)
106-
self._dat(1, 0)
107-
self._dat(2, 0)
108-
self._dat(3, 0)
109-
self.dbuf = [0, 0, 0, 0]
110-
111-
def showbit(self, num, bit = 0):
112-
self.dbuf[bit%self._LED] = _SEGMENTS[num%16]
113-
self._dat(bit, _SEGMENTS[num%16])
114-
115-
def showDP(self, bit = 1, show = True):
116-
bit = bit%self._LED
143+
for i in range(self._LEDS):
144+
self.dat(0, i)
145+
self.dbuf[i] = 0
146+
147+
def showDP(self, show = True, bit = 1):
148+
bit = bit%self._LEDS
117149
if show:
118-
self._dat(bit, self.dbuf[bit] | 0x80)
150+
self.dat(self.dbuf[bit] | 0x80, bit)
119151
else:
120-
self._dat(bit, self.dbuf[bit] & 0x7F)
152+
self.dat(self.dbuf[bit] & 0x7F, bit)
153+
154+
def show(self, s):
155+
_s = s.upper()
156+
for i in range(self._LEDS):
157+
if i < len(_s):
158+
self.dbuf[i] = self.FONT[min(0x60, ord(_s[i]))]
159+
else:
160+
self.dbuf[i] = 0
161+
self.dat(self.dbuf[i], i)
121162

122163
def shownum(self, num):
123-
if num < 0:
124-
self._dat(0, 0x40) # '-'
125-
num = -num
126-
else:
127-
self.showbit((num // 1000) % 10)
128-
self.showbit(num % 10, 3)
129-
self.showbit((num // 10) % 10, 2)
130-
self.showbit((num // 100) % 10, 1)
131-
132-
def showhex(self, num):
133-
if num < 0:
134-
self._dat(0, 0x40) # '-'
135-
num = -num
136-
else:
137-
self.showbit((num >> 12) % 16)
138-
self.showbit(num % 16, 3)
139-
self.showbit((num >> 4) % 16, 2)
140-
self.showbit((num >> 8) % 16, 1)
164+
self.show(str(num))
141165

142166

0 commit comments

Comments
 (0)