Cómo escribir un programa C incrustado para visualización de 7 segmentos para contar de 00 a 99 en el microcontrolador 8051

El siguiente código se muestra de 0000 a 9999. Sin embargo, el punto importante que se requiere comprender aquí es eso. Las líneas de datos de los 7 segmentos están multiplexadas. Por lo tanto, si enciende todas las pantallas y envía ‘1’, aparecerá como 1111 en los cuatro segmentos.

La forma de resolverlo es encender una pantalla a la vez y cambiarla rápidamente para que parezca 1234.

Aquí hay un tutorial que he escrito para el segmento individual.

9.8051 Interfaz: siete segmentos

El código completo se puede encontrar a continuación:

ExploreEmbedded / AT89S52_Ultra_Development_Kit

Descargo de responsabilidad: trabajo para Explore Embedded, y los archivos adjuntos y el código son necesarios para explicar la pregunta, o de lo contrario, ¿cómo se resolvería? 😉

#include
#include “delay.h” // Biblioteca de delay definida por el usuario que contiene las rutinas de delay
#define SegmentValue P2 //PORT2.0 está conectado al segmento ‘a’
#define SegmentSlection P0 //PORT0.0 es la línea de selección ‘S1’
#define SegOne 0x01
#define SegTwo 0x02
#define SegThree 0x04
#define SegFour 0x08
#define NoSeg 0x00
void display_number (número int sin signo)
{
unsigned char seg_code [] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82, 0xF8,0x80,0x90};
carácter temporal sin firmar;
unsigned int i, num;
para (i = 0; i <100; i ++)
{
num = número;
temp = num / 1000;
num = num% 1000;
SegmentSlection = SegOne;
SegmentValue = seg_code [temp];
delay_us (10);
temp = num / 100;
num = num% 100;
SegmentSlection = SegTwo;
SegmentValue = seg_code [temp];
delay_us (10);
temp = num / 10;
SegmentSlection = SegThree;
SegmentValue = seg_code [temp];
delay_us (10);
temp = num% 10;
SegmentSlection = SegFour;
SegmentValue = seg_code [temp];
delay_us (10);
}
}
/ * inicia el programa principal * /
vacío principal()
{
unsigned int cnt = 0;
mientras que (1)
{
for (cnt = 0; cnt 9999
{
display_number (cnt);
}
}
}

Aquí está la conexión del circuito interno de una pantalla de 7 segmentos.

Hay dos tipos. Tomemos una pantalla común de 7 segmentos de cátodo.

  1. Entonces, como podemos ver, es bastante simple, solo conecte a tierra el pin del cátodo común (el del medio) y cualquiera que sea el pin al que proporcione el voltaje, el LED correspondiente se ilumina y el pasante ilumina el segmento en el que se encuentra.

Por ejemplo, para mostrar ‘6’, los LED que deberían brillar son a, f, g, e, c y d. Para esto necesitamos dar un 1 digital (VCC) a los LED correspondientes.

Entonces, si conectamos el puerto P1 (0–7 pines) de 8051 al 7-seg, como a-P1 ^ 0, b-P1 ^ 1, …, g-P1 ^ 6. Para mostrar ‘6’ tenemos que dar el valor digital 01111101 a P1 que en HEX es ‘7d’. Eso significa que se debe proporcionar un HEX 7d al puerto P1.

Consulte la tabla a continuación para conocer los valores HEX correspondientes de todos los dígitos.

Ahora para mostrar 0–9 dígitos,

  1. Conecte el puerto 1 de 8051 a los pines de la pantalla de 7 segmentos.
  2. Escriba una matriz con los valores HEX de los dígitos 0–9.
  3. Escriba el programa C usando un bucle for para dar los valores de la matriz al puerto 1.

Si tiene los conocimientos básicos de la sintaxis de C, puede comprender el código a continuación. Esto muestra 0–9 números en la pantalla.

Ahora para mostrar 0–99 en dos pantallas,

  1. Tienes que escribir un bucle for anidado. Cuando el dígito menos significativo va de 0 a 9, el superior se incrementa y el otro se reinicia y comienza a contar nuevamente.

El código anterior no es para mostrar 0–99. Es para mostrar 0-30. Para mostrar 0–99 use la misma matriz a [], es decir, reemplace b [] con a [] en el bucle for. Y también los valores ‘j’ (ponlo igual que k). Intenta escribir el código tú mismo.

NOTA:

  1. No olvide que el código binario comienza desde la derecha, es decir, el dígito menos significativo corresponde al LED ‘a’. El código 10011101 tiene el formato ‘hgfedcba’
  2. El ‘0x’ que está junto con los números representa que es un número HEX.
  3. No olvide agregar la función de retraso, de lo contrario los números cambian tan rápido que ni siquiera serían visibles para nosotros.
  4. Recuerde que hay dos tipos de 7 segmentos, ánodo común y cátodo común, y los valores HEX para el ánodo común son diferentes. Si está utilizando una pantalla de tipo de ánodo común, en lugar de cambiar los valores HEX del código anterior, simplemente puede poner un símbolo ‘NO’ (~) mientras asigna los valores al puerto. (P0 = ~ a [k])
  5. El octavo pin en la esquina derecha del 7-seg es para mostrar los números decimales (enciende el punto en la esquina inferior derecha)
  6. Antes de realizar el circuito en el hardware si desea verificar las condiciones de funcionamiento del circuito, puede hacerlo en el software Proteus . Un software muy muy útil para ingenieros electrónicos.

Gracias por leer. Espero eso ayude. Deje un voto positivo si lo hace.

Si tiene alguna pregunta sobre esto u otra cosa, no dude en preguntar en la sección de comentarios a continuación.

Hola, este es el tutorial para escribir código para la visualización de 7 segmentos con el microctonroller 8051.

Capítulo 10 – Pantalla LED de interfaz de 7 segmentos (ánodo común) con microcontrolador 8051 en placa de pruebas

Capítulo 10.4 – Pantalla LED de interfaz de 7 segmentos (ánodo común) con microcontrolador 8051 en placa de pruebas – Tutorial práctico

Como la mayoría de las respuestas ya han cubierto, cada IC de 7 segmentos tomará al menos 7 pines IO.

  1. La primera opción es conectar dos puertos, digamos P1 y P2 a dos circuitos integrados de 7 segmentos separados. Conduzca los valores requeridos de la unidad y de diez a los puertos respectivos.
  2. Use un puerto para interactuar con los dos circuitos integrados de 7 segmentos, pero cambie los datos entre los dos segmentos de 7 segmentos. Cuando desee escribir en el segmento de la unidad, habilite ese IC y luego cambie el valor a segmento de diez para habilitar otro IC.
  3. Use BCD para decodificadores de 7 segmentos. Cada IC necesita solo 4 bits de valor para cada dígito. Por lo tanto, no es necesario asignar los valores de siete segmentos a siete bits / líneas del puerto IO. Estos circuitos integrados tienen enclavamiento, por lo que no es necesario seguir cambiando entre los dos circuitos integrados de 7 segmentos.

Para el OP: si solo estaba buscando el código, ya lo tiene. Pero si realmente quiere aprender, intente implementar todos los métodos anteriores por su cuenta. La alimentación con cuchara completará sus tareas, pero es posible que no aprenda mucho a largo plazo.

Si está utilizando más de un segmento de siete segmentos, es mejor usar un decodificador de BCD a siete segmentos. Suponiendo que conectó P1.0 a P1.3 como líneas de decodificador de segmento y P1.4 a P1.7 como líneas de selección de segmento para las cuatro pantallas de siete segmentos como se muestra en la figura.

Ahora, a través de P1.0 a P1.3 (líneas de decodificador de segmento), proporciona el código BCD del dígito que se mostrará, por ejemplo, si desea mostrar 9, entonces el código BCD es 1001. Ahora, el IC del decodificador de segmento habilita directamente las líneas de siete segmentos correspondiente al código BCD para mostrar el dígito.

Las líneas de selección de segmento (P1.4 a P1.7) permitirán (seleccionar) que se muestre el segmento. Supongamos que quiero mostrar en el segmento 2, entonces habilitaré P1.5.

Aquí, en su caso, necesita usar solo dos siete segmentos, por lo que en el programa usaré solo dos líneas de selección de segmentos P1.4 y P1.5.

#include

sbit c0 = P1 ^ 4;
sbit c1 = P1 ^ 5;

msdelay nulo (tiempo int sin signo);

vacío principal()
{
unsigned int i, DD0, DD1, DD2, Count;

mientras que (1)
{
Cuenta = Cuenta + 1;
si (Cuenta> 99)
Cuenta = 0;

DD0 = Cuenta% 10; // Extraer un dígito

DD1 = (Cuenta / 10)% 10; // Extraer decenas de dígitos

for (i = 0; i <= 10; i ++) // Loop para seleccionar la velocidad de la pantalla
{
P1 = DD0;
c0 = 1; // Seleccione un dígito
msdelay (5); // retraso para cambiar entre los siete segmentos

P1 = DD1;
c1 = 1; // Seleccione decenas de dígitos
msdelay (5);

}

}

}

msdelay nulo (tiempo int sin signo)
{
unsigned int i, j;
para (i = 0; i para (j = 0; j <319; j ++);
}

Bueno, suponiendo que tenga las herramientas … puede tener una estructura de datos (tal vez una matriz) en la que cada fila representa un dígito de 0..9 y 0..6 columnas para representar el estado de cada segmento (bit) para cada dígito Luego establezca un bucle con un contador int, y para cada valor de bucle obtenga los dígitos que representan las unidades y las decenas. Para cada uno de estos dígitos vaya (hash) a su estructura de datos, obtenga los bits y escriba los valores en los dígitos de los puertos a los que está conectando la pantalla. Asegúrese de establecer una pausa adecuada entre los valores cambiantes.

Si está solicitando el código, es posible que no sea posible en este lugar, pero el algoritmo funciona de la siguiente manera:

Primero envíe datos a la memoria,

Luego transfiera el bit con la misma prioridad que los pines de prioridad conectados