Cómo escribir código para una pantalla de siete segmentos de 00 a 99 en Embedded C

Como está utilizando dos módulos separados de 7 segmentos, el código dependerá de sus circuitos . En los sistemas integrados para controlar más de un módulo, a menudo arreglamos los circuitos y luego encontramos el código para facilitarnos la vida.

Ahora el núcleo del programa, es decir, mostrar el número en un solo módulo será el mismo. Pero el resto del código dependerá de sus circuitos. Los siguientes son dos ejemplos:

Ejemplo 1

Esta es una solución muy sencilla y casi nunca se usa en la práctica. Los dos módulos están conectados a dos puertos diferentes y funcionan de forma independiente.

Código:

#include
#include

// El lugar de diez conectado al puerto a
// el lugar de uno conectado al puerto b

uint8_t converto7seg (número uint8_t)
{
// rutina para convertir el número en 7 segmentos. Escribe directamente al puerto.
interruptor (número)
{
caso 1: retorno 0x06;
caso 2: retorno 0x5b;
caso 3: retorno 0x4f;
caso 4: retorno 0x66;
caso 5: retorno 0x6d;
caso 6: retorno 0x7d;
caso 7: retorno 0x07;
caso 8: retorno 0x7f;
caso 9: retorno 0x6f;
caso 0: retorno 0x3f;
}
}

anular twodigitwithoutenable (número uint8_t)
{
// rutina para imprimir el número de 2 dígitos en 7 segmentos
if (número> 99) devuelve;
PORTA = convert7seg (número / 10); // envía el número de diez a la pantalla de 7 segmentos
PORTB = convert7seg (número% 10); // envía el número de uno a la pantalla de 7 segmentos
}

int main (nulo)
{
uint8_t i;
DDRA = 0xFF; // establece la dirección de datos a la salida
DDRB = 0xFF;
mientras que (1)
{
para (i = 0; i <100; i ++)
{
dos dígitos sin consumible (i); // ciclo de 00 a 99
_delay_ms (300); // para que sea más fácil de leer
}
}
}

Ejemplo 2

Esta versión se usa más en la práctica (a menudo con una pequeña modificación). Los dos transistores en la parte inferior se utilizan para habilitar los dígitos uno tras otro . Aunque muestra un dígito a la vez, debido a la velocidad en cambiarlo, ambos dígitos aparecen al mismo tiempo para los ojos humanos. El módulo comparte un bus de datos común de 8 bits. Para cambiar el número, deberá interrumpir el cambio y escribir en el bus de datos . Para el presente ejemplo no hay necesidad de interrupciones, ya que actualizaremos continuamente los pines de activación mientras damos entradas.

#include
#include

// El lugar de diez y uno conectado al puerto a

uint8_t converto7seg (número uint8_t)
{
// rutina para convertir el número en 7 segmentos. Escribe directamente al puerto.
interruptor (número)
{
caso 1: retorno 0x06;
caso 2: retorno 0x5b;
caso 3: retorno 0x4f;
caso 4: retorno 0x66;
caso 5: retorno 0x6d;
caso 6: retorno 0x7d;
caso 7: retorno 0x07;
caso 8: retorno 0x7f;
caso 9: retorno 0x6f;
caso 0: retorno 0x3f;
}
}

anular twodigitwithenable (número uint8_t)
{
// rutina para imprimir el número de 2 dígitos en 7 segmentos
if (número> 99) devuelve;
PORTB = 1 << PINB1; // Habilita el segmento de diez dígitos
PORTA = convert7seg (número / 10); // envía el número de diez a la pantalla de 7 segmentos
PORTB = 1 << PINB0; // Enabe el segmento de un dígito
PORTA = convert7seg (número% 10); // envía el número de uno a la pantalla de 7 segmentos
}

int main (nulo)
{
uint8_t i, j;
DDRA = 0xFF; // establece la dirección de datos como salida
DDRB = 0xFF;
mientras que (1)
{
for (i = 0; i <100; i ++) // esto para el ciclo itera de 0 a 99
for (j = 0; j <200; j ++) // esto para loop agrega demora para facilitar la lectura del resultado
{
dos dígitos con capacidad de recuperación (i);
}
}
}

Ahora, si se desea eliminar la necesidad de actualizar continuamente el resultado, podemos usar un pestillo antes de cada módulo. Esto mantendrá el resultado anterior hasta que muestreemos (refresquemos el control de habilitación) el nuevo resultado nuevamente.

Espero que esto ayude.

Hay un total de 10 pines para SSD de los cuales 8 se dan para LED. Para mostrar dígitos en SSD (Seven Segment Display), primero deberá convertir los 8 pines en forma binaria. Entonces, cuando aplicamos la lógica 1 a un bit binario en particular, se ilumina. Y un pin denota el ‘.’

La tabla de conversión se da a continuación

ABCDEFG dígito. Código hexadecimal

1111110 0 0x3f

0110000 1 0x06

1101101 2 0x5b

1111001 3 0x4f

0110011 4 0x66

1011011 5 0x6d

1011111 6 0x7d

1110000 7 0x07

1111111 8 0x7f

1111011 9 0x6f

Programación : –

vacío principal();

unsigned int i, j;

para (i = 0; i <100; i ++);

para (j = 0; j <1000; j ++);

{

mientras que (1)

{

P1 = 0x3f; // para0

retrasar();

P1 = 0x06; // para1

retrasar();

P1 = 0x5b; // para2

retrasar();

P1 = 0x4f; // para3

retrasar();

P1 = 0x66; // para4

retrasar();

P1 = 0x6d; // para5

retrasar();

P1 = 0x7d; // para6

retrasar();

P1 = 0x07; // para7

retrasar();

P1 = 0x7f; // para8

retrasar();

P1 = 0x6f; // para9

retrasar();

}

}

retraso nulo ();

Tenga en cuenta que este programa mostrará 0-9 en la pantalla.

Nota 2: – déjame intentar trabajar con 00-99, la programación se actualizará más tarde.

1. Escriba una función que traduzca un número de 1 dígito dado al código LED de 7 segmentos correspondiente. Supongo que lo habría implementado para su contador.

2. Para cualquier número dado, el dígito más a la derecha (dígito en el lugar de la unidad) es el número% 10, y el dígito en el lugar de diez = número / 10, (el dígito en el 10 ^ n lugar es número / 10 ^ n). Escriba una función que tome el número dado y el lugar del dígito que desea como argumentos y devuelva el código LED para ese dígito.

3. Inicialice una variable a 99.

4. Use la función descrita en el paso 2 para generar el código LED para cada dígito en la variable. Muestrelos correspondientemente.

4. Disminuya el valor de la variable en 1 y repita el paso 4, hasta que la variable llegue a 0.

5. Disfruta.

básicamente 7 segmentos son en realidad 7 leds. que están conectados por ánodo o cátodo común. Estos 7 leds están conectados a 7 pines de un puerto específico. solo necesita enviar datos para hacer que este pin sea alto. puede usar una matriz para almacenar esos datos, por ejemplo:

#include

#include

sbit sl1 = P2 ^ 0;

sbit sl2 = P2 ^ 1;

sbit sl3 = P2 ^ 2;

sbit sl4 = P2 ^ 3;

unsigned int disp_lut [20] = {0xfc, 0x60,0xda, 0xf2,0x66,0xb6,0xbe, 0xe0,0xfe, 0xf6}; // 0xee, 0x3e, 0x9c, 0x7a, 0x9e, 0x8e};

unsigned int ds1, ds2, ds3, ds4, i, l;

retraso nulo (sin signo int);

pantalla vacía ();

void inc_d ();

vacío principal()

{

ds1 = ‘0’;

ds2 = ‘0’;

ds3 = ‘0’;

ds4 = ‘0’;

mientras que (1)

{

monitor();

inc_d ();

}

}

p0 conectado a 7 led. si convierte el valor hexadecimal de la matriz anterior en binario, se especifica al pin de puerto específico que ilumina el led. y el puerto p2 está conectado al controlador que selecciona un segmento a la vez.

pantalla vacía ()

{sl1 = 0;

sl2 = 1;

sl3 = 1;

sl4 = 1;

P0 = disp_lut [ds1 ‘]; //

retraso (1);

// ******************************

sl1 = 1;

sl2 = 0;

sl3 = 1;

sl4 = 1;

P0 = disp_lut [ds2];

retraso (1);

// ********************************

sl1 = 1;

sl2 = 1;

sl3 = 0;

sl4 = 1;

P0 = disp_lut [ds3];

retraso (1);

// ***********************************

sl1 = 1;

sl2 = 1;

sl3 = 1;

sl4 = 0;

P0 = disp_lut [ds4];

retraso (1);

}

// **********************************

void inc_d ()

{

ds1 ++;

if (ds1> ‘9’)

{

ds1 = ‘0’;

ds2 ++;

if (ds2> ‘9’)

{

ds2 = ‘0’;

ds3 ++;

if (ds3> ‘9’)

{

ds3 = ‘0’;

ds4 ++;

if (ds4> ‘9’)

{

ds1 = ‘9’;

ds2 = ‘9’;

ds3 = ‘9’;

ds4 = ‘9’;

}

}

}

}

}

Este es un buen enlace que explica cómo escribir código en c incorporado para contar de 00 a 99 en la pantalla de 7 segmentos con el microcontrolador 8051

VISITA BLOGS SIGUIENTES

Ieee Xpert ieee 2016 2017 proyectos | Ieee proyecta pondicherry

VLSI PHD GUÍA DE INVESTIGACIÓN | VLSI PHD THESIS SUPPORT

http://www.firmcodes.com/microco

More Interesting

Soy lento en el pensamiento lógico, ¿es conveniente para mí considerar los sistemas integrados y la programación en sistemas integrados como una opción profesional?

¿Golang es un buen lenguaje para sistemas integrados?

Cómo iniciar una empresa de sistemas integrados

Estoy en b. 2do año de tecnología con ece stream y quiero capacitarme en un sistema integrado, pero ¿qué debo hacer en el sistema integrado?

¿Cuál es la mejor fuente gratuita en línea para aprender sobre IoT y sistemas integrados?

¿Cómo solicitar trabajos de nivel de entrada en sistemas integrados en los EE. UU.?

Soy un estudiante de ingeniería mecánica que recientemente ha desarrollado un interés en el Internet de las cosas (IoT). ¿Cómo debo proceder? ¿Dónde debería aprender C incrustado, dado que ya he terminado con la introducción C? ¿Qué más debería estar en mi lista de tareas para estar en el campo IoT cuando se trata de tener un trabajo?

¿Cómo funciona un sistema en chip (soc)?

¿Qué debo elegir como carrera entre robótica y sistema embebido?

¿Qué debo elegir a continuación, análisis de big data, diseño de sistemas integrados o IoT?

¿Cuál es el beneficio de aprender microcontroladores C y AVR integrados como ingeniero de electrónica y comunicación (durante B.TECH)?

¿Cuáles son buenos institutos para cursos a corto plazo o capacitación de diseño de sistemas integrados (dominio de electrónica de potencia) en Bangalore?

¿Cuál es el propósito de 'eventos' Linux Kernel Thread?

¿Cómo funcionan las bandas de fitness?

Cómo escribir el código de interfaz del sensor para el microcontrolador AVR Atmega 128 en el estudio AVR