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
- Al igual que topcoder y codechef, ¿tenemos sitios web de codificación competitivos centrados en sistemas integrados?
- ¿En qué tipo de aplicaciones trabajan los programadores que trabajan con C ++ / C o sistemas integrados dado que gran parte del software ahora está basado en la web?
- ¿Cuáles son algunos de los temas de proyectos principales del año final fáciles e impresionantes en sistemas embebidos?
- Cómo interconectar LCD con ARM
- ¿Qué lenguaje de programación necesitas para programar micro chips?
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.