TM1637 LED Display in Python

Based on information from here: https://raspberrytips.nl/tm1637-4-digit-led-display-raspberry-pi/

rand_hex.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
# https://raspberrytips.nl
 
import sys
import time
import datetime
import RPi.GPIO as GPIO
import tm1637
from random import randint
 
#CLK -> GPIO23 (Pin 16)
#Di0 -> GPIO24 (Pin 18)
 
Display = tm1637.TM1637(23,24,tm1637.BRIGHT_TYPICAL)
 
Display.Clear()
Display.SetBrightnes(1)
Display.ShowDoublepoint(0)
 
while(True):
 
   a = randint(0,15)
   b = randint(0,15)
   c = randint(0,15)
   d = randint(0,15)
 
   Display.Show([a,b,c,d])
   time.sleep(0.1)
tm1637.py
import sys
import os
import time
import RPi.GPIO as IO
 
IO.setwarnings(False)
IO.setmode(IO.BCM)
 
HexDigits = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]
 
ADDR_AUTO = 0x40
ADDR_FIXED = 0x44
STARTADDR = 0xC0
BRIGHT_DARKEST = 0
BRIGHT_TYPICAL = 2
BRIGHT_HIGHEST = 7
OUTPUT = IO.OUT
INPUT = IO.IN
LOW = IO.LOW
HIGH = IO.HIGH
 
class TM1637:
	__doublePoint = False
	__Clkpin = 0
	__Datapin = 0
	__brightnes = BRIGHT_TYPICAL;
	__currentData = [0,0,0,0];
 
	def __init__( self, pinClock, pinData, brightnes ):
		self.__Clkpin = pinClock
		self.__Datapin = pinData
		self.__brightnes = brightnes;
		IO.setup(self.__Clkpin,OUTPUT)
		IO.setup(self.__Datapin,OUTPUT)
	# end  __init__
 
	def Clear(self):
		b = self.__brightnes;
		point = self.__doublePoint;
		self.__brightnes = 0;
		self.__doublePoint = False;
		data = [0x7F,0x7F,0x7F,0x7F];
		self.Show(data);
		self.__brightnes = b;				# restore saved brightnes
		self.__doublePoint = point;
	# end  Clear
 
	def ShowInt(self, i):
		s = str(i)
		self.Clear()
		for i in range(0,len(s)):
			self.Show1(i, int(s[i]))
 
	def Show( self, data ):
		for i in range(0,4):
			self.__currentData[i] = data[i];
 
		self.start();
		self.writeByte(ADDR_AUTO);
		self.stop();
		self.start();
		self.writeByte(STARTADDR);
		for i in range(0,4):
			self.writeByte(self.coding(data[i]));
		self.stop();
		self.start();
		self.writeByte(0x88 + self.__brightnes);
		self.stop();
	# end  Show
 
	def SetBrightnes(self, brightnes):		# brightnes 0...7
		if( brightnes > 7 ):
			brightnes = 7;
		elif( brightnes < 0 ):
			brightnes = 0;
 
		if( self.__brightnes != brightnes):
			self.__brightnes = brightnes;
			self.Show(self.__currentData);
		# end if
	# end  SetBrightnes
 
	def ShowDoublepoint(self, on):			# shows or hides the doublepoint
		if( self.__doublePoint != on):
			self.__doublePoint = on;
			self.Show(self.__currentData);
		# end if
	# end  ShowDoublepoint
 
	def writeByte( self, data ):
		for i in range(0,8):
			IO.output( self.__Clkpin, LOW)
			if(data & 0x01):
				IO.output( self.__Datapin, HIGH)
			else:
				IO.output( self.__Datapin, LOW)
			data = data >> 1
			IO.output( self.__Clkpin, HIGH)
		#endfor
 
		# wait for ACK
		IO.output( self.__Clkpin, LOW)
		IO.output( self.__Datapin, HIGH)
		IO.output( self.__Clkpin, HIGH)
		IO.setup(self.__Datapin, INPUT)
 
		while(IO.input(self.__Datapin)):
			time.sleep(0.001)
			if( IO.input(self.__Datapin)):
				IO.setup(self.__Datapin, OUTPUT)
				IO.output( self.__Datapin, LOW)
				IO.setup(self.__Datapin, INPUT)
			#endif
		# endwhile
		IO.setup(self.__Datapin, OUTPUT)
	# end writeByte
 
	def start(self):
		IO.output( self.__Clkpin, HIGH) # send start signal to TM1637
		IO.output( self.__Datapin, HIGH)
		IO.output( self.__Datapin, LOW)
		IO.output( self.__Clkpin, LOW)
	# end start
 
	def stop(self):
		IO.output( self.__Clkpin, LOW)
		IO.output( self.__Datapin, LOW)
		IO.output( self.__Clkpin, HIGH)
		IO.output( self.__Datapin, HIGH)
	# end stop
 
	def coding(self, data):
		if( self.__doublePoint ):
			pointData = 0x80
		else:
			pointData = 0;
 
		if(data == 0x7F):
			data = 0
		else:
			data = HexDigits[data] + pointData;
		return data
	# end coding
 
# end class TM1637
tm1637_python.txt · Last modified: 2024/11/14 02:30 by 127.0.0.1
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0