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.5 Pantalla de 7 segmentos de 4 dígitos

Introducción

A continuación, sigue conmigo para intentar controlar la pantalla de 7 segmentos de 4 dígitos.

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/list_4_digit1.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 y 4 dígitos

-

74HC595

COMPRAR

Nota

En este proyecto, para la pantalla de 7 segmentos de 4 dígitos, debemos usar el modelo BS. Si usas el modelo AS, puede que no se encienda.

Diagrama Esquemático

../_images/schmatic_4_digit1.png

Procedimientos Experimentales

Paso 1: Construye el circuito.

../_images/image801.png

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

cd ~/raphael-kit/nodejs/

Paso 3: Ejecuta el código.

sudo node 4_digit_7_segment_display.js

Después de ejecutar el código, el programa lleva una cuenta, aumentando en 1 por segundo, y la pantalla de 7 segmentos de 4 dígitos muestra el conteo.

Código

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

var counter = 0;

const number = [0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90]; //for BS

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

const pin1 = new Gpio(10, { mode: Gpio.OUTPUT });
const pin2 = new Gpio(22, { mode: Gpio.OUTPUT });
const pin3 = new Gpio(27, { mode: Gpio.OUTPUT });
const pin4 = new Gpio(17, { mode: Gpio.OUTPUT });
const placePin = [pin1, pin2, pin3, pin4];

function clearDisplay() {
    hc595_shift(0xff); //for BS
}

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

function pickDigit(digit) {
    for(let i=0;i<4;i++){
        placePin[i].digitalWrite(0);
    }
    placePin[digit].digitalWrite(1);
}


let digit = -1
setInterval(() => {
    digit = (digit +1)% 4
    clearDisplay();
    pickDigit(digit);
    switch(digit){
        case 0:
            hc595_shift(number[Math.floor(counter % 10)]);
            break;
        case 1:
            hc595_shift(number[Math.floor(counter % 100 / 10)]);
            break;
        case 2:
            hc595_shift(number[Math.floor(counter % 1000 / 100)]);
            break;
        case 3:
            hc595_shift(number[Math.floor(counter % 10000 / 1000)]);
            break;
    }
}, 5);

setInterval(() => {
    counter++;
}, 1000);

Explicación del Código

const pin1 = new Gpio(10, {mode: Gpio.OUTPUT});
const pin2 = new Gpio(25, {mode: Gpio.OUTPUT});
const pin3 = new Gpio(27, {mode: Gpio.OUTPUT});
const pin4 = new Gpio(17, {mode: Gpio.OUTPUT});
const placePin = [pin1,pin2,pin3,pin4];

Inicializa los pines 10, 25, 27 y 17 en modo de salida y colócalos en la matriz placePin para facilitar el control del ánodo común de la pantalla de 7 segmentos de cuatro dígitos.

const number = [0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90];

Define una matriz constante number para representar el código de segmento hexadecimal del 0 al 9 (ánodo común).

function clearDisplay() {
    hc595_shift(0xff);
}

Escribe 0xff para apagar el tubo digital.

function pickDigit(digit) {
    for(let i=0;i<4;i++){
        placePin[i].digitalWrite(0);
    }
    placePin[digit].digitalWrite(1);
}

Selecciona el lugar del valor. Solo debe haber un lugar habilitado cada vez. El lugar habilitado se escribirá en alto.

let digit = -1
setInterval(() => {
    digit = (digit +1)% 4
    clearDisplay();
    pickDigit(digit);
    switch(digit){
        case 0:
            hc595_shift(number[Math.floor(counter % 10)]);
            break;
        case 1:
            hc595_shift(number[Math.floor(counter % 100 / 10)]);
            break;
        case 2:
            hc595_shift(number[Math.floor(counter % 1000 / 100)]);
            break;
        case 3:
            hc595_shift(number[Math.floor(counter % 10000 / 1000)]);
            break;
    }
}, 5);

Este código se usa para configurar el número mostrado en la pantalla de 7 segmentos de 4 dígitos.

Primero, inicia el cuarto segmento de la pantalla y escribe el número de un solo dígito. Luego, inicia el tercer segmento de la pantalla y escribe el dígito de las decenas; después de eso, inicia el segundo y el primer segmento de la pantalla respectivamente, y escribe los dígitos de las centenas y miles respectivamente. Debido a que la velocidad de actualización es muy rápida, vemos una pantalla de cuatro dígitos completa.

setInterval(() => {
    counter++;
}, 1000);

Agrega uno al counter (el tubo digital de cuatro dígitos muestra el número incrementado en uno) cada segundo que pasa.

Imagen del Fenómeno

../_images/image811.jpeg