|
15 | 15 | TM1637_CMD3 = (128) # 0x80 display control command |
16 | 16 | TM1637_DELAY = (10) # 10us delay between clk/dio pulses |
17 | 17 |
|
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 | +' |
19 | 46 |
|
20 | 47 | class TM1637(): |
21 | 48 | def __init__(self, clk, dio, intensity=7, number = 4): |
22 | 49 | self.clk = clk |
23 | 50 | self.dio = dio |
24 | 51 |
|
25 | 52 | self._intensity = intensity%8 |
26 | | - self._LED = number |
| 53 | + self._LEDS = number |
27 | 54 | self._ON = 8 |
28 | | - self.dbuf = [0, 0, 0, 0] |
| 55 | + self.dbuf = [0]*number |
| 56 | + self._reverse = False |
| 57 | + self.FONT = _FONT1 |
29 | 58 |
|
30 | 59 | self.clk.init(Pin.OUT, value=0) |
31 | 60 | self.dio.init(Pin.OUT, value=0) |
@@ -93,50 +122,45 @@ def intensity(self, val=None): |
93 | 122 | self._write_data_cmd() |
94 | 123 | self._write_dsp_ctrl() |
95 | 124 |
|
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 |
97 | 135 | self._write_data_cmd() |
98 | 136 | self._start() |
99 | | - self._write_byte(TM1637_CMD2 | (bit%self._LED)) |
| 137 | + self._write_byte(TM1637_CMD2 | (bit%self._LEDS)) |
100 | 138 | self._write_byte(dat) |
101 | 139 | self._stop() |
102 | 140 | self._write_dsp_ctrl() |
103 | 141 |
|
104 | 142 | 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 |
117 | 149 | if show: |
118 | | - self._dat(bit, self.dbuf[bit] | 0x80) |
| 150 | + self.dat(self.dbuf[bit] | 0x80, bit) |
119 | 151 | 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) |
121 | 162 |
|
122 | 163 | 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)) |
141 | 165 |
|
142 | 166 |
|
0 commit comments