Nota

Ciao, benvenuto nella Community di appassionati di Raspberry Pi, Arduino e ESP32 di SunFounder su Facebook! Approfondisci il tuo viaggio con Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime.

  • Sconti speciali: Godi di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e concorsi festivi: Partecipa a concorsi e promozioni durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

1.1.4 Display a 7 segmenti

Introduzione

Proviamo a pilotare un display a 7 segmenti per mostrare le cifre da 0 a 9 e da A a F.

Componenti necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/list_7_segment1.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

OGGETTI IN QUESTO KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

Display a 7 segmenti

ACQUISTA

74HC595

ACQUISTA

Schema elettrico

Collega il pin ST_CP del 74HC595 al GPIO18 del Raspberry Pi, SH_CP al GPIO27, DS al GPIO17 e le porte di uscita parallele ai 8 segmenti del display a 7 segmenti. Immetti i dati nel pin DS per registrarli quando SH_CP (l’ingresso del clock del registro a scorrimento) è al fronte di salita e al registro di memoria quando ST_CP (l’ingresso del clock della memoria) è al fronte di salita. Successivamente, puoi controllare gli stati di SH_CP e ST_CP tramite i GPIO del Raspberry Pi per trasformare l’input dati seriale in output dati parallelo, risparmiando GPIO del Raspberry Pi e pilotando il display.

../_images/schematic_7_segment1.png

Procedure sperimentali

Passo 1: Costruisci il circuito.

../_images/image731.png

Passo 2: Vai alla cartella del codice.

cd ~/raphael-kit/nodejs/

Passo 3: Esegui il codice.

sudo node 7-segment_display.js

Dopo l’esecuzione del codice, vedrai il display a 7 segmenti mostrare da 0 a 9 e da A a F.

Codice

const Gpio = require('pigpio').Gpio;

const segCode = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71];

const SDI = new Gpio(17, { mode: Gpio.OUTPUT });
const RCLK = new Gpio(18, { mode: Gpio.OUTPUT });
const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT });

function hc595_shift(dat) {
    for (let j = 0; j < 8; j++) {
        let code = 0x80 & (dat << j);
        if (code != 0) {
            code = 1;
        }
        SDI.digitalWrite(code);
        SRCLK.trigger(1,1);
    }
    RCLK.trigger(1,1);
}

let index = -1;
setInterval(() => {
    index = (index+1)%16;
    hc595_shift(segCode[index]);
}, 1000);

Spiegazione del codice

const segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71];

Definisci un array di codici esadecimali (catodo comune) da 0 a F.

const SDI = new Gpio(17, { mode: Gpio.OUTPUT });
const RCLK = new Gpio(18, { mode: Gpio.OUTPUT });
const SRCLK = new Gpio(27, { mode: Gpio.OUTPUT });

Inizializza i pin 17, 18 e 27 in modalità output e assegnali rispettivamente a SDI, RCLK e SRCLK.

function hc595_shift(dat) {
    for (let j = 0; j < 8; j++) {
        let code = 0x80 & (dat << j);
        if (code != 0) {
            code = 1;
        }
        SDI.digitalWrite(code);
        SRCLK.trigger(1,1);
    }
    RCLK.trigger(1,1);
}

Implementa una funzione hc595_shift per convertire i campi nell’array segCode in numeri e visualizzarli sul display a 7 segmenti.

let code = 0x80 & (dat << j);
if (code != 0) {
    code = 1;
}
SDI.digitalWrite(code);

Assegna i dati dat a SDI(DS) bit per bit. Qui assumiamo che dat=0x3f(0011 1111, quando j=2, 0x3f si sposterà a sinistra (<<) di 2 bit. 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, è vero. A questo punto, viene scritto 1 su SDI.

SRCLK.trigger(1,1);

Genera un impulso di salita e sposta i dati DS nel registro a scorrimento.

trigger(pulseLen, level)
  • pulseLen - lunghezza dell’impulso in microsecondi (1 - 100)

  • level - 0 o 1

Invia un impulso di trigger al GPIO. Il GPIO viene impostato a livello per pulseLen microsecondi e poi ripristinato a non livello.

RCLK.trigger(1,1);

Genera un impulso di salita e sposta i dati dal registro a scorrimento al registro di memoria.

let index = -1;
setInterval(() => {
    index = (index+1)%16;
    hc595_shift(segCode[index]);
}, 1000);

Infine, usa la funzione hc595_shift() per convertire i campi in segCode e visualizzarli tramite il display a 7 segmenti.

Immagine del fenomeno

../_images/image741.jpeg