Nota

¡Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete más profundamente en Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Vistas previas exclusivas: Obtén acceso anticipado a anuncios de nuevos productos y avances.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo!

1.1.4 Pantalla de 7 segmentos

Introducción

Vamos a intentar controlar una pantalla de 7 segmentos para mostrar cifras del 0 al 9 y de la A a la F.

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/list_7_segment1.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

Pantalla de 7 segmentos

COMPRAR

74HC595

COMPRAR

Diagrama Esquemático

Conecta el pin ST_CP del 74HC595 al GPIO18 de la Raspberry Pi, SH_CP al GPIO27, DS al GPIO17, y los puertos de salida paralelos a los 8 segmentos de la pantalla LED de segmentos. Introduce datos en el pin DS al registro de desplazamiento cuando SH_CP (la entrada del reloj del registro de desplazamiento) esté en el flanco ascendente, y al registro de memoria cuando ST_CP (la entrada del reloj de la memoria) esté en el flanco ascendente. Luego puedes controlar los estados de SH_CP y ST_CP a través de los GPIO de la Raspberry Pi para transformar la entrada de datos serial en salida de datos paralela, ahorrando así GPIOs de la Raspberry Pi y controlando la pantalla.

../_images/schematic_7_segment1.png

Procedimientos Experimentales

Paso 1: Construye el circuito.

../_images/image731.png

Paso 2: Ve a la carpeta del código.

cd ~/raphael-kit/nodejs/

Paso 3: Ejecuta el código.

sudo node 7-segment_display.js

Después de ejecutar el código, verás la pantalla de 7 segmentos mostrar del 0 al 9 y de la A a la F.

Código

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);

Explicación del Código

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

Define un array de códigos de segmentos hexadecimales (cátodo común) de 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 });

Inicializa los pines 17, 18 y 27 en modo de salida, y asígnalos a SDI, RCLK y SRCLK respectivamente.

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 función hc595_shift para convertir los campos en el array segCode en números y mostrarlos en el tubo digital.

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

Asigna los datos dat a SDI(DS) por bits. Aquí asumimos dat=0x3f (0011 1111), cuando j=2, 0x3f se desplazará a la derecha (<<) 2 bits. 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, es verdadero. En este momento, se escribe 1 en SDI.

SRCLK.trigger(1,1);

Genera un pulso de flanco ascendente y mueve los datos DS al registro de desplazamiento.

trigger(pulseLen, level)
  • pulseLen - longitud del pulso en microsegundos (1 - 100)

  • level - 0 o 1

Envía un pulso de disparo al GPIO. El GPIO se establece en level durante pulseLen microsegundos y luego se restablece a not level.

RCLK.trigger(1,1);

Genera un pulso de flanco ascendente y mueve los datos del registro de desplazamiento al registro de almacenamiento.

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

Finalmente, usa la función hc595_shift() para convertir los campos en segCode y mostrarlos a través del tubo digital.

Imagen del Fenómeno

../_images/image741.jpeg