.. note::
¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas.
**¿Por qué unirse?**
- **Soporte de expertos**: 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.
- **Preestrenos exclusivos**: Obtén acceso anticipado a nuevos anuncios de productos y avances.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
- **Promociones y sorteos festivos**: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo!
.. _1.1.4_py:
1.1.4 Pantalla de 7 segmentos
=================================
Introducción
--------------------
Vamos a intentar controlar una pantalla de 7 segmentos para mostrar una cifra del 0 al 9 y de la A a la F.
Componentes necesarios
--------------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../img/list_7_segment.png
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ARTÍCULOS EN ESTE KIT
- ENLACE
* - Kit Raphael
- 337
- |link_Raphael_kit|
También puedes comprarlos por separado en los siguientes enlaces.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCCIÓN DE COMPONENTES
- ENLACE DE COMPRA
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_7_segment`
- |link_7segment_buy|
* - :ref:`cpn_74hc595`
- |link_74hc595_buy|
Diagrama esquemático
-------------------------
Conecta el pin ST_CP del 74HC595 al GPIO18 de Raspberry Pi, SH_CP al GPIO27, DS al GPIO17,
y los puertos de salida paralelos a 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 borde ascendente, y al registro de memoria cuando ST_CP
(la entrada del reloj de la memoria) esté en el borde ascendente. Luego, puedes controlar
los estados de SH_CP y ST_CP a través de los GPIOs de Raspberry Pi para transformar la
entrada de datos en serie en salida de datos en paralelo, con el fin de ahorrar GPIOs
de Raspberry Pi y controlar la pantalla.
============== ========== ======== ===
Nombre T-Board Pin físico wiringPi BCM
GPIO17 Pin 11 0 17
GPIO18 Pin 12 1 18
GPIO27 Pin 13 2 27
============== ========== ======== ===
.. image:: ../img/schematic_7_segment.png
Procedimientos experimentales
---------------------------------
**Paso 1:** Construir el circuito.
.. image:: ../img/image73.png
**Paso 2:** Acceder a la carpeta del código.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python/
**Paso 3:** Ejecutar.
.. raw:: html
.. code-block::
sudo python3 1.1.4_7-Segment.py
Después de ejecutar el código, verás que la pantalla de 7 segmentos muestra de 0 a 9 y de A a F.
**Código**
.. note::
Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como ``raphael-kit/python``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto. Después de confirmar que no hay problemas, puedes usar el botón de Copiar para copiar el código modificado, luego abrir el código fuente en Terminal a través del comando ``nano`` y pegarlo.
.. raw:: html
.. code-block:: python
import RPi.GPIO as GPIO
import time
# Set up pins
SDI = 17
RCLK = 18
SRCLK = 27
# Define a segment code from 0 to F in Hexadecimal
segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW)
# Shift the data to 74HC595
def hc595_shift(dat):
for bit in range(0, 8):
GPIO.output(SDI, 0x80 & (dat << bit))
GPIO.output(SRCLK, GPIO.HIGH)
time.sleep(0.001)
GPIO.output(SRCLK, GPIO.LOW)
GPIO.output(RCLK, GPIO.HIGH)
time.sleep(0.001)
GPIO.output(RCLK, GPIO.LOW)
def main():
while True:
# Shift the code one by one from segCode list
for code in segCode:
hc595_shift(code)
print ("segCode[%s]: 0x%02X"%(segCode.index(code), code)) # %02X means double digit HEX to print
time.sleep(0.5)
def destroy():
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
main()
except KeyboardInterrupt:
destroy()
**Explicación del Código**
.. code-block:: python
segCode = [0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71]
Un array de código de segmento de 0 a F en Hexadecimal (Cátodo común).
.. code-block:: python
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(SDI, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(RCLK, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(SRCLK, GPIO.OUT, initial=GPIO.LOW)
Configura ds, st_cp, sh_cp tres pines como salida y el estado inicial como nivel bajo.
.. code-block:: python
GPIO.output(SDI, 0x80 & (dat << bit))
Asigna los datos de dat a SDI (DS) por bits. Aquí suponemos que dat=0x3f (0011 1111), cuando bit=2, 0x3f se desplazará a la derecha (<<) 2 bits. 1111 1100 (0x3f << 2) & 1000 0000 (0x80) = 1000 0000, es verdadero.
.. code-block:: python
GPIO.output(SRCLK, GPIO.HIGH)
El valor inicial de SRCLK se estableció en LOW, y aquí se establece en HIGH, lo cual es para generar un pulso de borde ascendente, luego desplaza los datos de DS al registro de desplazamiento.
.. code-block:: python
GPIO.output(RCLK, GPIO.HIGH)
El valor inicial de RCLK se estableció en LOW, y aquí se establece en HIGH, lo cual es para generar un pulso de borde ascendente, luego desplaza los datos del registro de desplazamiento al registro de almacenamiento.
.. note::
El formato hexadecimal de los números 0~15 es (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)
**Imagen del Fenómeno**
.. image:: ../img/image74.jpeg