Utiliser un affichage à 7 segments
Principe
On affiche les valeurs retournées par le capteur interne de température sur le dispositif d’affichage LED 7 segments.
L’afficheur sera banché sur le port grove PIN0.
Matériel
- microcontrôleur microbit et shield grove
- composant grove avec affichage LED à 7 segments
Script
from microbit import *
ASCII_4DD_NUM = bytearray(b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F')
def start4dd(clk,dio):
dio.write_digital(0)
clk.write_digital(0)
def stop4dd(clk,dio):
dio.write_digital(0)
clk.write_digital(1)
dio.write_digital(1)
def writeByte4dd(clk,dio,cmd):
for i in range(8):
dio.write_digital((cmd>>i)&1)
clk.write_digital(1)
clk.write_digital(0)
clk.write_digital(0)
clk.write_digital(1)
clk.write_digital(0)
def command4dd(clk,dio,cmd):
start4dd(clk,dio)
writeByte4dd(clk,dio,cmd)
stop4dd(clk,dio)
def init4dd(clk,dio):
command4dd(clk,dio,0x40)
command4dd(clk,dio,0x88|6)
def write4dd(clk,dio,s,p=0):
if not 0<=p<=3:
raise ValueError('Position out of range')
command4dd(clk,dio,0x40)
start4dd(clk,dio)
writeByte4dd(clk,dio,0xC0|p)
for i in s:
writeByte4dd(clk,dio,i)
stop4dd(clk,dio)
command4dd(clk,dio,0x88|6)
def encodeNum(str):
s=bytearray(len(str))
for i in range(len(str)):
o=ord(str[i])
if o>=48 and o<=57:
s[i]=ASCII_4DD_NUM[o-48]
return s
def setNumber(clk,dio,n):
if not -999<=n<=9999:
raise ValueError('Number out of range')
write4dd(clk,dio,encodeNum('{0: >4d}'.format(int(n))))
init4dd(pin0, pin14)
Afficheur = None
while True:
Afficheur = temperature()
setNumber(pin0, pin14, Afficheur)
display.scroll(Afficheur)
sleep(1000)