Afficheur 8x7-segments TM1638

Ce tutoriel explique comment mettre en oeuvre un afficheur 8x7 segments TM1638 en MicroPython.

Montage

La connectique de l’afficheur s’organise de la manière suivante :

Afficheur 8x7 segments TM1638

Vous pouvez retrouver les informations de connectique à l’arrière de l’afficheur.

Afficheur ST Nucleo
5V 5V
DIO D4
CLK D3
STB0 D2
GND GND

Le code MicroPython

Les scripts présentés ci-après sont disponibles dans la zone de téléchargement.

Vous pouvez également télécharger ici la bibliothèque TM1638. Dans un premier temps, il est nécessaire d’importer les bibliothèques contenant les pilotes de l’afficheur et des entrées-sorties de la NUCLEO-WB55 :

# Importation des bibliothèques
import tm1638 # Pilotes de l'afficheur
from machine import Pin # Pilotes des entrées-sorties de la NUCLEO-WB55

Ensuite on initialise les broches de communication avec l’afficheur :

# Déclaration de l'afficheur
tm = tm1638.TM1638(stb=Pin('D2'), clk=Pin('D3'), dio=Pin('D4'))

Maintenant l’afficheur est prêt à être utilisé ; voici les instructions pour piloter ses différentes fonctions :

  • Les LEDS : tm.leds(valeur) : allume/éteint les leds sont la valeur indiquée tm.led(position, valeur) : allume/éteint la led à la position indiquée ex :
# Gestion des leds
tm.leds(0b01010101) # allume une led sur 2
tm.leds(0b00000001) # allume la led 1 et éteint les autres
tm.led(2, 0) # éteint la led 3
tm.led(0,1) # allume la led 1
  • Les boutons : tm.keys() renvoie un mot binaire avec 1 pour indiquer que le bouton est pressé. Par exemple si tm.keys() renvoie 0b00100001, cela signifie que les 1er et 6e boutons sont pressés.
# on récupère l'information sur les boutons
boutons = tm.keys()
  • Les segments : tm.show('mot') : permet d’écrire les caractères 0-9, A-Z, espace, -, ° (affiché en utilisant ‘*’) et les points. L’affichage est aligné à gauche et n’efface pas ce qui à été précédemment affiché si le texte est plus petit que les 8 caractères. tm.number(nombre) : permet d’afficher un entier. L’affichage est aligné à droite et efface les cases non-remplies. tm.scroll('message', temps) : permet d’afficher un message qui se déplace de droite à gauche. “temps” est optionel et permet de changer la vitesse du message.
# Segments
tm.show('  *--*  ')
tm.show('a.b.c.d.e.f.g.h.')

tm.number(-1234567)
tm.number(1234)

tm.scroll('Hello World')
tm.scroll('Bonjour tout le monde', 100)
  • Ajustement de la luminosité : Il est possible de modifier la luminosité des leds et segments avec tm.brightness(0) ou de les éteindre avec tm.clear().
# Change la luminosité des leds et segments
tm.brightness(0)

# Eteint les leds et segments
tm.clear()

Finalement, le code complet :

# Objet du script : Mise en oeuvre d'un afficheur 8x7 segments piloté par
# un contrôleur TM1638

# Importation des bibliothèques
import tm1638 # Pilotes de l'afficheur
from machine import Pin # Pilotes des entrées-sorties de la NUCLEO-WB55

# Déclaration de l'afficheur
tm = tm1638.TM1638(stb=Pin('D2'), clk=Pin('D3'), dio=Pin('D4'))

# Gestion des LED
tm.leds(0b01010101) # allume une led sur 2
tm.leds(0b00000001) # allume la led 1 et éteint les autres
tm.led(2, 0) # éteint la led 3
tm.led(0,1) # allume la led 1

# On récupère l'information sur les boutons
boutons = tm.keys()

# Segments
tm.show('  *--*  ')
tm.show('a.b.c.d.e.f.g.h.')

tm.number(-1234567)
tm.number(1234)

tm.scroll('Hello World')
tm.scroll('Bonjour tout le monde', 100)

# Change la luminosité des leds et segments
tm.brightness(0)

# Eteint les leds et les segments
tm.clear()