Estoy intentando detectar una entrada de interruptor para que, si se presiona el interruptor, se incremente un número en la pantalla de siete segmentos. Por ejemplo, si la pantalla de siete segmentos muestra 0
, y se presiona el interruptor, el SSD ahora mostrará 1
. Si se presiona de nuevo, mostrará 2
y así sucesivamente.
- Mi pantalla de siete segmentos está conectada en P0.0 a P0.6
- MI interruptor está en P0.9
¿Cómo puedo detectar cada vez que se presiona el interruptor? Estoy tratando de incrementar una variable k
en mi programa para que cada vez que se presione el interruptor, k
se incremente, y así podré realizar diferentes funciones cada vez que se presione el interruptor. Sin embargo, esta parte no funciona correctamente.
Estoy pensando en algo similar al siguiente programa. Sin embargo, debo pasar por alto algo, ya que solo el primer clic del botón está funcionando. Cuando se presiona el interruptor, 1
aparece en la pantalla. No pasa nada cuando se presiona de nuevo.
#include <LPC21xx.h>
#define a 0x00000001
#define b 0x00000002
#define c 0x00000004
#define d 0x00000008
#define e 0x00000010
#define f 0x00000020
#define g 0x00000040
void small_delay (void);
void infinite (void);
int main (void)
{
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 = 0xFFFFFDFF; //Setting P0.9 as input for SW1
while (1)
{
SW1 = IO0PIN & 0x00000200; //switch connected on P0.9
if ( SW1 == 0x00000200 ) //when not pressed
{
}
if ( SW1 != 0x00000200 ) //when pressed
{
k++;
if (k == 1){
IO0SET = b;
IO0SET = c; //displaying number 1
}
else if (k == 2){
IO0CLR = c;
IO0SET = a;
IO0SET = b;
IO0SET = g; //displaying number 2
IO0SET = d;
IO0SET = e;
//small_delay();
}
}
}
}
void small_delay (void)
{
unsigned int i, j;
for (i=0; i<1000; i++)
{
for (j=0; j<1000; j++)
{
}
}
}
Se agradecería cualquier sugerencia o sugerencia sobre lo que podría mejorar.