Actualmente estoy tratando de controlar dos pantallas de siete segmentos desde los mismos 7 pines (P0.0 - P0.6) de un microcontrolador ARM 7. Primero estoy probando esto en el software de simulación Proteus.
Sigo el esquema de este tutorial de multiplexación 8051 , sin embargo, mi segmento 7 las pantallas están conectadas desde el Puerto 0.0 al Puerto 0.6 y los dos transistores de control están conectados en P0.7 y P0.8.
Estoy bastante seguro de que la pantalla de siete segmentos y los transistores de mi simulación están conectados correctamente y que el problema surge del siguiente código. También he probado mi código para asegurarme de que estoy mostrando los números correctos y que los pines del transistor están configurados según lo requerido.
El problema que encuentro es que ambos dígitos se imprimen en ambas pantallas , en lugar de que la primera pantalla muestre 1
y la segunda pantalla muestre 2
.
#include <LPC21xx.h>
#define a 0x00000001
#define b 0x00000002
#define c 0x00000004
#define d 0x00000008
#define e 0x00000010
#define f 0x00000020
#define g 0x00000040
#define T2 0x00000080
#define T1 0x00000100
void small_delay (void);
int main (void)
{
PINSEL0 = 0; //Set P0.0 - P0.15 as GPIOS
PINSEL1 = 0; //Set P0.16 - P0.31 as GPIOS
IO0DIR = 0xFFFFFFFF; //Set all port0 pins as outputs
while (1){
IO0SET = e; //displaying number 1
IO0SET = f; //displaying number 1
IO0SET = T1; //switching on first display
small_delay(); //calling short delay
IO0CLR = T1; //clearing first display
IO0SET = a; //displaying number 2
IO0SET = b; //displaying number 2
IO0SET = g; //displaying number 2
IO0SET = e; //displaying number 2
IO0SET = d; //displaying number 2
IO0SET = T2; //switching on first display
small_delay(); //calling small delay
IO0CLR = T2; //clearing second display
}
}
void small_delay (void)
{
unsigned int i, j;
for (i=0; i<10; i++)
{
//do nothing
}
}
Esto es lo que estoy tratando de lograr con el código anterior:
- Envíe los datos
1
a ambas pantallas. - Habilitando el segmento de la izquierda siete usando
IO0SET = T1;
- Llamando un
delay
corto. - Deshabilitar el segmento siete izquierdo utilizando
IO0CLR = T1;
- Enviando datos
2
a ambas pantallas. - Habilitando el segmento siete derecho usando
IO0SET = T2;
- Llamando un
delay
corto. - Deshabilitar el segmento siete derecho usando
IO0CLR = T2;
- Repetir.
¿Hay alguna falla en esta lógica? Cualquier sugerencia / idea con respecto a lo que estoy haciendo mal en mi codificación sería muy apreciada.