Estoy intentando multiplexar dos pantallas de siete segmentos, una vez que se detecta una entrada de interruptor.
- Si se presiona un interruptor, las siete pantallas de segmento deberían mostrar
1
- Si se presiona de nuevo,
2
, luego3
y así sucesivamente.
Mi problema surge cuando alcanzo el número 9
ya que la siguiente entrada del interruptor mostrará 10
. 1
en el primer SSD y 0
en el segundo SSD. A continuación se muestra un fragmento de mi código con respecto a cómo estoy detectando entradas de 1 a 9.
int k = 0;
unsigned int SW1;
PINSEL0 = 0; //Set P0.0 - P0.15 as GPIOS
PINSEL1 = 0; //Set P0.16 - P0.31 as GPIOS
IO0DIR = 0xFFFFF9FF; //Setting P0.9 as input for SW1
while (1)
{
SW1 = IO0PIN & 0x00000200; //switch connected on P0.9
if ( SW1 != 0x00000200 ) //when pressed
{
k++;
IO0SET = T1;
IO0SET = T2;
if (k == 1){
IO0SET = T1; //switching on left seven segment display
IO0CLR = T2; //clearing the right seven segment display
IO0CLR = a;
IO0SET = b;
IO0SET = c;
IO0CLR = d;
IO0CLR = g; //displaying number 1
IO0CLR = e;
IO0CLR = f;
small_delay();
}
}
Estoy siguiendo la misma estructura para el décimo interruptor presionando:
else if (k == 10){
IO0CLR = 0x000000FF; //turn off all the segments as well as both common anodes. Then your outputs will be ready for the new segment patterns to be set up.
IO0SET = T2; //switching on first display
IO0SET = b;
IO0SET = c; //displaying number 1
small_delay(); //calling short delay
IO0CLR = 0x000001FF;
IO0SET = a;
IO0SET = b;
IO0SET = c;
IO0SET = d; //displaying number 0
IO0SET = e;
IO0SET = f;
IO0SET = T1;
small_delay();
IO0CLR = 0x000000FF;}
El problema con el segundo código que proporciono es que la pantalla de siete segmentos solo muestra 10
una vez. Es decir, el primer 1
se muestra en la pantalla izquierda y luego 0
en la segunda pantalla según sea necesario, sin embargo, esto se realiza solo una vez y no continúa hasta que se detecta la siguiente entrada de interruptor.
Una de las soluciones con las que he encontrado este problema es que incluí una sentencia while después de if else
, de manera que:
else if (k == 10){
while (k == 10) { //rest of code
Esto realmente hace lo que quiero que haga, y continúa multiplexando ambos siete segmentos, mostrando el número 10
, sin embargo, el problema en este caso es que no se sale del bucle while para acomodar la siguiente entrada del interruptor.
¿Cómo puedo multiplexar ambas pantallas hasta que se detecte la siguiente entrada del interruptor? Cualquier idea / sugerencia sería muy apreciada.